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

Linux – `sync + Drop_caches`はキャッシュをドロップしませんか?

journalctlのテストケースがあります ディスクからの読み取りに数秒かかります。しかし、テストケースの複数の実行をベンチマークしようとすると、最初の実行後は信じられないほど高速であることがわかります。キャッシュを削除しようとしても。なぜですか?

$ sync && echo 1 | sudo tee /proc/sys/vm/drop_caches && /usr/bin/time journalctl -b -u dev-shm.mount
1
0.01user 0.03system 0:04.50elapsed 1%CPU (0avgtext+0avgdata 30956maxresident)k
95424inputs+0outputs (424major+665minor)pagefaults 0swaps
$ sync && echo 1 | sudo tee /proc/sys/vm/drop_caches && /usr/bin/time journalctl -b -u dev-shm.mount >/dev/null
1
0.00user 0.01system 0:00.08elapsed 26%CPU (0avgtext+0avgdata 31832maxresident)k
94992inputs+0outputs (422major+445minor)pagefaults 0swaps

興味深いことに、time それでも、ページフォールト(inputs)を介して多くのIOを実行していることを示しています )。 drop_cachesをスキップすると気づきます 実行の合間には、代わりに0が表示されます。

承認された回答:

drop_caches カーネルファイルシステムキャッシュにのみ影響します。基盤となるハードウェアのキャッシュには影響しません。どうやらあなたのハードウェアには数百メガバイトのキャッシュ(94992 * 4096〜=400MB)があります。素晴らしい!

私の場合、カーネルがVMで実行されているためです。したがって、「基盤となるハードウェア」は単純なハードディスクではありません。これは、virt-managerによって使用されるディスク設定を示しています 。

「キャッシュモード」に使用されるオプションは、書き込みフラッシュを尊重します(fsync()を使用 )。ただし、それ以外の場合は、書き込みと読み取りの両方をホストカーネルのページキャッシュにキャッシュできます。 「基盤となるハードウェア」には、ホストのRAM内にディスクキャッシュが効果的に含まれており、数ギガバイトにまで拡大する可能性があります。

libvirt / KVMは、これを「ライトバック」キャッシングと呼びます。

また、これによりVMの再起動が高速化されることにも気づきました。


Linux
  1. Linux –参照しかしLinuxの場合?

  2. Linux –ディスク/ディスクのコピーを遅くしますか?

  3. Linuxデバイスは、サイズ変更後に正しいディスク容量を表示しません

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

  2. Linux の limit.conf が機能しない?

  3. Linux ラップトップの消去

  1. Linuxでdfを使用して空きディスク容量を確認します

  2. Linuxでduを使用して使用済みディスク容量を確認する

  3. メモリ需要が高まったときに Linux が大きなディスク キャッシュを解放しない