次のようにできます:
# sync # (move data, modified through FS -> HDD cache) + flush HDD cache
# echo 3 > /proc/sys/vm/drop_caches # (slab + pagecache) -> HDD (https://www.kernel.org/doc/Documentation/sysctl/vm.txt)
# blockdev --flushbufs /dev/sda
# hdparm -F /dev/sda
# NEXT COMMAND IS NOT FOR BENCHMARKING:
# should be run before unplug, flushes everything possible guaranteed.
# echo 1 > /sys/block/sdX/device/delete
strace を使用して、これらが 3 つの異なるシステムコールであることを確認できます
また、hdparm を使用して HDD キャッシュをオフにすることが望ましい場合もありますが、何をベンチマークしているのかわかりません。
いずれにせよ、HDD が最近使用したデータの最後の 64/32/16 MB をキャッシュするのを防ぐことはできません。そのキャッシュを強制終了するには、いくつかのゼロを書き込み (およびフラッシュ) + HDD から無関係な場所を読み取るだけです。これは、キャッシュが読み取り部分と書き込み部分に分割される可能性があるため必要です。その後、HDD のベンチマークを行うことができます。
sync コマンドまたは sync() 関数が必要なようですね。
ディスクキャッシュをフラッシュしたい場合:echo 3 | sudo tee /proc/sys/vm/drop_caches