GNU/Linux >> Linux の 問題 >  >> Linux

Linux でディスク I/O キャッシュをパージする方法は?

次のようにできます:

# 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


Linux
  1. Linux –特定のディレクトリのディスクI / Oを監視する方法は?

  2. Linuxで「中断できない」プロセスを停止するには?

  3. Linux での予測不可能な I/O パフォーマンスの大幅な低下

  1. Linuxでディスクをパーティション分割する方法

  2. LinuxでディスクがSSDかHDDかを確認する方法

  3. LinuxでSSDまたはHDDのディスクを見つける方法は?

  1. C の Linux でノンブロッキング コンソール I/O を行うにはどうすればよいですか?

  2. Linux での CPU I/O 待機の評価

  3. プロセスごとのディスク I/O 使用率を確認する方法は?