검색

A.3. Fsync

download PDF
Fsync I/O 비용이 많이 드는 작업으로 알려져 있지만 완전히 사실이 아닙니다.
Firefox 는 사용자가 링크를 클릭하여 새 페이지로 이동할 때마다 sqlite 라이브러리를 호출하는 데 사용되었습니다. SQLite는 fsync 이라고 하며 파일 시스템 설정(데이터 정렬 모드가 있는 그대로 ext3) 때문에 아무 일도 없을 때 지연 시간이 길어졌습니다. 다른 프로세스가 대용량 파일을 동시에 복사하는 경우 시간이 오래 걸릴 수 있습니다(최대 30초).
그러나 fsync 이 전혀 사용되지 않은 다른 경우에는 ext4 파일 시스템으로 전환하면 문제가 발생했습니다. Ext3은 몇 초마다 메모리를 플러시하고 디스크에 저장하는 데이터 정렬 모드로 설정되었습니다. 그러나 ext4 및 laptop_mode를 사용하면 저장 간격이 길고 시스템이 예기치 않게 꺼지면 데이터가 손실될 수 있습니다. 이제 ext4가 패치되어 있지만 애플리케이션의 설계를 신중하게 고려하고 fsync 를 적절하게 사용해야 합니다.
구성 파일을 읽고 쓰는 간단한 예는 파일의 백업 또는 데이터 손실 방법을 보여줍니다.
/* open and read configuration file e.g. ./myconfig */
fd = open("./myconfig", O_RDONLY);
read(fd, myconfig_buf, sizeof(myconfig_buf));
close(fd);
...
fd = open("./myconfig", O_WRONLY | O_TRUNC | O_CREAT, S_IRUSR | S_IWUSR);
write(fd, myconfig_buf, sizeof(myconfig_buf));
close(fd);
더 나은 접근 방식은 다음과 같습니다.
/* open and read configuration file e.g. ./myconfig */
fd = open("./myconfig", O_RDONLY);
read(fd, myconfig_buf, sizeof(myconfig_buf));
close(fd);
...
fd = open("./myconfig.suffix", O_WRONLY | O_TRUNC | O_CREAT, S_IRUSR | S_IWUSR
write(fd, myconfig_buf, sizeof(myconfig_buf));
fsync(fd); /* paranoia - optional */
...
close(fd);
rename("./myconfig", "./myconfig~"); /* paranoia - optional */
rename("./myconfig.suffix", "./myconfig");
Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

© 2024 Red Hat, Inc.