現在のハードディスクでは、ありません ディスクが書き込み完了を OS に報告したとしても、ファイルが実際にディスクに書き込まれることを保証します!これは、ドライブの組み込みキャッシュによるものです。
freeBSD では、 kern.cam.ada.write_cache
を設定することでこれを無効にすることができます sysctl を 0 にします。これにより、劣化します。 パフォーマンスを大幅に書く .前回測定したときは (ICH-7 チップセットの WDC WD5001ABYS-01YNA0 ハードディスク、FreeBSD 8.1 AMD64)、連続書き込みパフォーマンス (dd if=/dev/zero of=/tmp/foo bs=10M count=1000
で測定) ) は 75,000,000 バイト/秒から 12,900,000 バイト/秒に低下しました。
ファイルが書き込まれたことを確実に確認したい場合は、
sysctl kern.cam.ada.write_cache=0
で書き込みキャッシュを無効にする 続いてcamcontrol reset <bus>:<target>:<lun>
.O_SYNC
でファイルを開きます オプション
注:
- あなたの (HDD への) 書き込みパフォーマンスは完全に最悪です。
sync
でパーティションをマウントしないでください オプション; すべての原因となります 同期して実行される I/O (読み取りを含む)。O_DIRECT
を使用しないでください .キャッシュを完全にバイパスしようとします。それはおそらく読み取りにも影響します。
O_DIRECT
基本的に、Oracle はカーネルのバッファ キャッシュ層をバイパスして独自のキャッシュを実行するためだけに存在します。セマンティクスが明確に定義されておらず、実行できる読み取りのサイズと配置に恣意的な制限があり、通常は使用しないでください。 O_SYNC
必要な効果が得られるはずですが、電源障害やクラッシュに対して堅牢な基盤となるファイルシステムがなければ、それでもニーズを満たすには十分ではない可能性があります.