flags を使用してファイルを開くユーザーレベルのプログラムがありますO_WRONLY|O_SYNC
。このプログラムは、それぞれ 256 バイト以上のデータをファイルに書き込もうとする 256 個のスレッドを作成します。合計で 1280000 件のリクエストが必要で、合計で約 300 MB のデータになります。1280000 件のリクエストが完了すると、プログラムは終了します。
pthread_spin_trylock()
完了したリクエストの数を追跡する変数をインクリメントするために使用します。各スレッドが一意のオフセットに書き込むようにするために、pwrite()
既に書き込まれた要求の数の関数としてオフセットを使用して計算します。したがって、実際にファイルに書き込むときはミューテックスを使用しません (このアプローチはデータの整合性を保証しますか?)
呼び出しがブロックされた平均時間pwrite()
と対応する数値 (つまり、BIO の完全なライフサイクルの時間の尺度である平均 Q2C 時間) を使用しblktrace
て確認すると、有意差。pwrite()
実際、特定の BIO の平均完了時間は、通話の平均待ち時間よりもはるかに長くなります。この不一致の背後にある理由は何ですか? O_SYNC
データが返される前に実際に物理メディアに書き込まれることを保証するため、これらの数値は似ているはずではありませんか?