上のディスクI/Oキャッシュをパージするにはどうすれば、より予測可能なベンチマークのためにそれを行う必要があります。は、Linux
は、Linux
答えて
アンマウントし、試験中の再マウントディスクは、すべてのキャッシュやバッファをリセットします。
必ずしもそうではありません。例: 'mount/dev/sda1/mnt'は、そのパーティションを開き、'/dev/sda'( '1'が見つからないことに注意してください)を見て、'/mnt'の下のファイルを変更します。これは '/ dev/sda'に反映されていないことがわかります。これはこれが異なるキャッシュを使用するためです。 'umount/mnt'は、物理的に同じドライブであっても、'/dev/sda'には影響しないので、その場合は役に立ちません。 – Tino
あなたはこのようにそれを行うことができます:あなたはこれらの3つの異なるシステムコールも
であることを確認するためにstraceのを使用することができ
# 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
、hdparmのを使用してHDDのキャッシュをオフにするかわからないことが望ましいかもしれませんあなたがベンチマーキングするものは何ですか?どのようにして
、あなたは最近使用したデータの最後64/32/16 MBをキャッシュするためにHDDを防ぐことはできません。そのキャッシュを殺すためには、単にゼロ(およびフラッシュ)のいくつかの量を書き+ HDDからのいくつかの無関係な場所をお読みください。キャッシュは、一部の読み取りと書き込みの部分をするために分割することができるので、これは必要とされます。その後、HDDのベンチマークを行うことができます。
+1 'blockdev'はまさに私が探していたものでした。 – Tino
'blockdev --flushbufs/dev/sda'は私のUSBドライブでは動作しますが、SATA SSDドライブでは効果がありません。 'echo 3 | sudo tee/proc/sys/vm/drop_caches'は両方のドライブで動作します。 –
最後のコマンドは、ディスクをカーネルから削除します。あなたは間違いなくディスクをベンチマークすることはできません(または何らかの方法でディスクを使用します)。ディスクが使用中の場合は危険です。それを他のコマンドとともに含める理由はありません。このコマンドの使用例とその動作の例を次に示します。https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/5/html/Online_Storage_Reconfiguration_Guide/removing_devices.html – ndemou
ディスクキャッシュのパージ:echo 3 | sudo tee /proc/sys/vm/drop_caches
コマンドのドキュメント:https://www.kernel.org/doc/Documentation/sysctl/vm.txt
これへの書き込みは、カーネルが自由になるためにそのメモリを引き起こして、メモリからクリーンなキャッシュ、dentriesとiノードをドロップするようになります。無料ページキャッシュへ
:
:無料ページキャッシュ、dentriesとiノードへ
echo 3 > /proc/sys/vm/drop_caches
echo 2 > /proc/sys/vm/drop_caches
:無料dentriesとiノードを
echo 1 > /proc/sys/vm/drop_caches
このよう
が非破壊的な操作で、汚れたオブジェクトが解放可能なものではなく、ユーザーは、すべてのキャッシュされたオブジェクトが解放されていることを確認するために、第1の「同期」を実行する必要があります。
ショート十分良い答え:(コピーはやさしいペースト)
DISK=/dev/sdX # <===ADJUST THIS===
sync
echo 3 > /proc/sys/vm/drop_caches
blockdev --flushbufs $DISK
hdparm -F $DISK
説明:
sync
:フラッシュファイルシステムのバッファ:manページから。ブロックをディスクに強制的に変更し、スーパーブロックを更新します。
echo 3 > /proc/sys/vm/drop_cache
:フラッシュバッファ[へ] コールブロックデバイスのioctl:manページから:from the kernel docsこれはカーネルがクリーンなキャッシュ
blockdev --flushbufs /dev/sda
をドロップするようになります。
hdparm -F /dev/sda
:manページから:上のドライブライトキャッシュバッファをフラッシュ(古いドライブは、これを実装しない場合があります)
BLOCKDEVとのhdparmコマンドは、それらが異なるのioctlを発行an answer aboveによると似ていますが、デバイス。
ロングおそらくより良い方法:
(私はあなたがディスクをフォーマットしていることを前提としていますが、あなたが直接ディスクに書き込みたい場合は、これらのコマンドを適応させることができます)
は一度だけこれを実行します第一ベンチマークの前に:
:MOUNT=/mnt/test # <===ADJUST THIS===
dd if=/dev/urandom of=$MOUNT/temp-hddread.tmp bs=64M count=16
実行このたび、あなたはキャッシュを空にしたいです
完了したらこれを実行してください。
MOUNT=/mnt/test # <===ADJUST THIS===
rm $MOUNT/temp-hddread.tmp
説明:
HDDは、上記のコマンドによってクリアされないH/Wキャッシュを有していてもよいです。私は擬似ランダムデータホッピングを作成して読み込み、それらをゴミで埋めています。どのくらいのデータがHDDキャッシュの大きさに依存するか。私は/ dev/urandomを使用しています。速いため、私たちは気にしませんtrueランダム性。私は最初から/mnt/test/temp-hddread.tmpを作成していて、十分なランダムなデータを読みたいときに毎回使用しています。十分なランダムなデータを書きたいときに毎回/mnt/test/temp-hddwrite.tmpを作成して削除しています。
クレジット
私は、既存の回答の最良の部分に基づいて、この答えを書いてきました。
- 1. は、LinuxターミナルでのLinux
- 2. は、Linux
- 3. は、Linux
- 4. Linuxは
- 5. は、Linux
- 6. は、Linux
- 7. は、Linux
- 8. は、Linux
- 9. は、Linux
- 10. は、Linux
- 11. は、Linux
- 12. Linuxは
- 13. ページは、Linux
- 14. は、Linuxサーバー
- 15. QtCreatorは、Linux
- 16. :QMLワードは、Linux
- 17. PostgreSQLは、Linuxの
- 18. 許可は、Linux
- 19. atomic_tは、Linux
- 20. Azue Linuxマシンは
- 21. Linuxは、EXEC
- 22. IFSは、Linux
- 23. エイリアスは、Linuxマシン
- 24. XAMPP:MySQLはLinuxの
- 25. Linuxカーネルでは
- 26. は、C++ Linuxシステムコマンド
- 27. エラーは、Linux
- 28. Linuxシェル:私は `
- 29. Linuxでは
- 30. は、Linux:母音
'sync'はそれをしていませんか? – imm
'sync'は消去されず、フラッシュされます。 – Tino