GNU/Linux >> Znalost Linux >  >> Linux

Linux – Nezahazuje `sync + Drop_caches` mezipaměť?

Mám testovací případ pro journalctl kde stráví několik sekund čtením z disku. Ale když se pokusím srovnat několik běhů testovacího případu, zjistím, že je to po prvním spuštění neuvěřitelně rychlé. I když se pokusím zahodit kešky. Proč?

$ 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

Zajímavé je time stále ukazuje, že dělá spoustu IO přes chyby stránky (inputs ). Všiml jsem si, že když přeskočím drop_caches mezi běhy místo toho ukazuje 0.

Přijatá odpověď:

drop_caches ovlivňuje pouze mezipaměť souborového systému jádra. Nemá vliv na mezipaměti v základním hardwaru. Váš hardware má zřejmě stovky megabajtů mezipaměti (94992 * 4096 ~=400 MB). Skvělé!

V mém případě je to proto, že jádro běží na virtuálním počítači. Takže „základní hardware“ není jednoduchý pevný disk. Toto ilustruje nastavení disku používaná virt-manager .

Možnost použitá pro „režim mezipaměti“ respektuje vyprázdnění zápisu (pomocí fsync() ), ale jinak umožňuje ukládání do mezipaměti zápisů i čtení v mezipaměti stránek hostitelského jádra. „Základní hardware“ efektivně zahrnuje diskovou mezipaměť v paměti RAM hostitele, která se potenciálně rozroste na několik gigabajtů.

libvirt / KVM nazývá toto ukládání do mezipaměti „zpětného zápisu“.

Také jsem si všiml, že to urychluje restart VM.


Linux
  1. Linux – reference, ale pro Linux?

  2. Linux – Zpomalit kopírování disku/disku?

  3. Linuxový příkaz 'll' nefunguje

  1. Použijte df ke kontrole volného místa na disku v Linuxu

  2. Jak rozdělit disk v Linuxu

  3. Linux neuvolňuje velkou diskovou mezipaměť, když se zvýší nároky na paměť

  1. Zkontrolujte použité místo na disku v systému Linux pomocí du

  2. Zařízení Linux po změně velikosti nezobrazuje správné místo na disku

  3. Jak vyčistit diskové I/O mezipaměti v Linuxu?