ここではどのように説明され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
この回答がお役に立てば幸いです。そして、私があなたのために事態を悪化させなかったことを願っています。