ここではどのように説明されfdatasync()
どのように対作品fsync()
の作品は
fdatasync()
(システムコールが戻る前に)ファイルのすべてのデータバッファをディスクにフラッシュします。似てfsync()
いますが、アクセス時間などのメタデータを更新する必要はありません。データベースまたはログファイルにアクセスするアプリケーションは、多くの場合、小さなデータフラグメント(たとえば、ログファイルの1行)を書き込み、fsync()
すぐに呼び出して、書き込まれたデータがハードディスクに物理的に保存されるようにします。残念ながら、fsync()
常に2つの書き込み操作を開始します
- 新しく書き込まれたデータに対する1つの書き込み操作
- iノードに保存された変更時間を更新するための1つの書き込み操作
変更時間がトランザクションの概念の一部ではない場合、fdatasync()
不必要なiノードディスクの書き込み操作を回避するために使用できます。
英語では、O_DSYNC
より高速であるO_DIRECT
ため、O_DIRECT
呼び出しfsync()
倍(ログとデータのための1のための1)とfsync()
2つの書き込み操作を介した検証用データの書き込み。O_DSYNC
呼び出しfdatsync()
とを使用しますfsync()
。fdatasync()
非同期を実行するfsync()
(データを検証しない)と考えることができます。
数値を見ると、4回の書き込み操作O_DSYNC
が行われ、そのうち2回が検証され、fsync()
4回の書き込み操作が行われ、すべてが後で検証されます。
結論
O_DSYNC
- より速い
O_DIRECT
- レイテンシーまたは完全なクラッシュにより、データに一貫性がある場合とない場合があります
O_DIRECT
この回答がお役に立てば幸いです。そして、私があなたのために事態を悪化させなかったことを願っています。