GNU/Linux >> Znalost Linux >  >> Linux

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

Můžete to udělat takto:

# 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

Můžete použít strace, abyste viděli, že se jedná o tři různá systémová volání

Také může být žádoucí vypnout mezipaměť HDD pomocí hdparm, nejste si jisti, co srovnáváte.

V žádném případě nemůžete zabránit tomu, aby HDD uložil do mezipaměti posledních 64/32/16 MB nedávno použitých dat. Chcete-li tuto cache zabít, stačí napsat nějaké množství nul (a vyprázdnit) + přečíst nějaké nesouvisející místo z HDD. To je vyžadováno, protože cache může být rozdělena na část pro čtení a část pro zápis. Poté můžete provést benchmarking HDD.


Zní to, jako byste chtěli příkaz sync nebo funkci sync().

Pokud chcete vyprázdnění mezipaměti disku:echo 3 | sudo tee /proc/sys/vm/drop_caches


Linux
  1. Jak rozdělit disk v Linuxu

  2. Jak zjistit, zda je disk SSD nebo HDD v Linuxu

  3. Jak najít disk je SSD nebo HDD v Linuxu?

  1. Linux – Jak monitorovat diskový vstup/výstup v konkrétním adresáři?

  2. Jak děláte neblokující I/O konzoly na Linuxu v C?

  3. Masivní, nepředvídatelný pokles I/O výkonu v Linuxu

  1. Jak zastavit „nepřerušitelný“ proces v Linuxu?

  2. Vyhodnocení čekání CPU I/O na Linuxu

  3. Jak zkontrolovat využití I/O disku na proces?