So geht's:
# 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
Sie können strace verwenden, um zu sehen, dass dies drei verschiedene Syscalls sind
Außerdem kann es wünschenswert sein, den HDD-Cache mit hdparm auszuschalten, nicht sicher, was Sie Benchmarking durchführen.
Auf keinen Fall können Sie verhindern, dass die Festplatte die letzten 64/32/16 MB der zuletzt verwendeten Daten zwischenspeichert. Um diesen Cache zu löschen, schreiben Sie einfach einige Nullen (und leeren) + lesen Sie einen nicht verwandten Ort von der Festplatte. Dies ist erforderlich, da der Cache in einen Leseteil und einen Schreibteil aufgeteilt werden kann. Danach können Sie HDD Benchmarks durchführen.
Klingt, als wollten Sie den Sync-Befehl oder die Sync()-Funktion.
Wenn Sie den Festplatten-Cache leeren möchten:echo 3 | sudo tee /proc/sys/vm/drop_caches