파일 시스템 프로그래밍에서 fsync () 및 fdatasync ()는 파일 데이터가 디스크로 유지되도록 두 개의 시스템 호출입니다. 기능이 비슷하고 파일의 버퍼 데이터를 디스크에 쓰는 데 사용되지만 특정 컨텐츠 및 실행 성능에 따라 다릅니다. 이 기사에서는이 두 시스템 호출의 차이점과 다른 시나리오에서이를 사용하는 방법에 대해 자세히 설명합니다.
fsync ()
fsync () 함수는 지정된 파일 디스크립터에 해당하는 파일 데이터 및 메타 데이터 (예 : 수정 시간, 권한 등)를 동기화하는 데 사용됩니다. 이를 통해 파일의 모든 데이터 및 관련 메타 데이터에 디스크에 최신 사본이 있습니다. fsync ()를 호출 한 후 모든 데이터가 디스크에 기록되고 메타 데이터 업데이트가 완료 될 때까지 운영 체제가 대기합니다.
fdatasync ()
fdatasync () 함수는 더 간결하여 파일의 실제 데이터 (메타 데이터 아님)가 디스크에 기록되도록합니다. 다시 말해, fdatasync ()는 파일 내용의 무결성을 보장하지만 파일 메타 데이터를 업데이트하지는 않습니다. 수정 시간 및 권한과 같은 정보는 동기화되지 않을 수 있습니다.
FSYNC ()는 파일의 내용 외에도 파일의 메타 데이터 (예 : 수정 시간, 권한 등)가 디스크와 동기화되도록합니다.
fdatasync ()는 파일 내용의 데이터 동기화에만 초점을 맞추고 파일 메타 데이터 업데이트에 신경 쓰지 않습니다.
fdatasync () 는 동기 메타 데이터가 필요하지 않으므로 비교적 빠르게 실행됩니다. 대조적으로, fsync ()는 메타 데이터가 작성 될 때까지 기다려야하며, 이는 일반적으로 fdatasync () 보다 느립니다. 메타 데이터 업데이트가 아닌 데이터 컨텐츠에만 관심이있는 응용 프로그램의 경우 fdatasync ()를 사용하는 것이 더 효율적입니다.
fsync ()는 파일의 모든 정보를 업데이트하도록 강요하기 때문에 불필요한 시스템 호출 오버 헤드를 증가시킬 수 있습니다.
fdatasync ()는 데이터 동기화 만 수행하므로 특히 많은 양의 데이터의 경우 더 저렴하여 성능을 향상시킬 수 있습니다.
응용 프로그램이 파일 내용의 지속성에만 관심이 있고 파일의 메타 데이터를 업데이트 할 필요가없는 경우 fdatasync () 가 더 나은 선택입니다. 예를 들어, 로그 파일 쓰기와 같은 시나리오의 경우 파일의 메타 데이터를 변경하는 대신 로그 내용이 디스크에 기록되어 있는지 여부에 대해 더 우려합니다.
응용 프로그램에서 파일의 전체 정보 (데이터 및 메타 데이터 포함)가 디스크와 동기화되어야하는 경우 fsync ()를 사용해야합니다. 예를 들어, 데이터베이스 시스템 또는 파일 관리 시스템에서는 파일 컨텐츠 및 타임 스탬프와 같은 메타 데이터의 일관성을 보장해야 할 수도 있습니다.
성능이 핵심 요소이고 파일의 메타 데이터 업데이트가 중요하지 않은 경우 fdatasync ()가 더 적합한 선택입니다. 예를 들어, 배치 데이터 처리 또는 대형 파일을 작성할 때 fdatasync ()를 사용하면 효율성을 향상시키고 불필요한 오버 헤드를 줄일 수 있습니다.
fsync () 및 fdatasync () 는 파일의 지속성을 보장하기 위해 파일의 데이터를 디스크에 작성하는 데 사용되지만 동기화 범위는 다양합니다.
fsync ()는 데이터와 메타 데이터를 동시에 동기화하지만 fdatasync ()는 데이터 만 동기화되며 메타 데이터는 업데이트되지 않을 수 있습니다.
고성능 요구 사항이있는 시나리오에서 메타 데이터 동기화가 필요하지 않은 경우 fdatasync ()를 사용하면 더 나은 성능을 달성 할 수 있습니다.
데이터와 메타 데이터가 일관성이 있어야하는 시나리오에서는 fsync ()를 사용하는 것이 더 적절합니다.
사용할 기능을 선택할 때 특정 응용 프로그램 시나리오 및 데이터 무결성 요구 사항에 따라 결정을 내려야합니다.