GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Linux – Verwirft `sync + Drop_caches` keine Caches?

Ich habe einen Testfall für journalctl wo es mehrere Sekunden damit verbringt, von der Festplatte zu lesen. Aber wenn ich versuche, mehrere Durchläufe des Testfalls zu benchmarken, finde ich, dass es nach dem ersten Durchlauf unmöglich schnell ist. Auch wenn ich versuche, Caches zu löschen. Warum?

$ 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

Interessanterweise time zeigt immer noch, dass es viele IO durch Seitenfehler macht (inputs ). Das merke ich, wenn ich die drop_caches überspringe zwischen den Läufen wird stattdessen 0 angezeigt.

Akzeptierte Antwort:

drop_caches wirkt sich nur auf den Cache des Kernel-Dateisystems aus. Es wirkt sich nicht auf Caches in der zugrunde liegenden Hardware aus. Anscheinend verfügt Ihre Hardware über Hunderte von Megabyte Cache (94992 * 4096 ~=400 MB). Großartig!

In meinem Fall liegt es daran, dass der Kernel in einer VM läuft. Die „zugrunde liegende Hardware“ ist also keine einfache Festplatte. Dies veranschaulicht die Festplatteneinstellungen, die von virt-manager verwendet werden .

Die für den „Caching-Modus“ verwendete Option berücksichtigt Write-Flushes (unter Verwendung von fsync() ), erlaubt aber ansonsten das Zwischenspeichern von Schreib- und Lesevorgängen im Seiten-Cache des Host-Kernels. Die „zugrunde liegende Hardware“ umfasst effektiv einen Festplatten-Cache im RAM des Hosts, der möglicherweise auf mehrere Gigabyte anwächst.

libvirt / KVM nennt dies „Writeback“-Caching.

Mir ist auch aufgefallen, dass dies den Neustart der VM beschleunigt.


Linux
  1. Linux – Referenzen, aber für Linux?

  2. Linux – Festplatte/Festplattenkopie langsamer machen?

  3. fflush() funktioniert nicht unter Linux

  4. Linux-limits.conf funktioniert nicht?

  5. Linux gibt großen Festplatten-Cache nicht frei, wenn der Speicherbedarf steigt

So überprüfen Sie den Speicherplatz unter Linux

So löschen Sie eine Partition unter Linux

So listen Sie Festplattenpartitionen unter Linux auf

Linux-RAID

So verschlüsseln Sie eine Partition unter Linux

Linux-df-Befehl zum Überprüfen des Speicherplatzes