Jak wyczyścić bufory We/Wy dysków w Linuksie
Muszę to zrobić dla bardziej przewidywalnego benchmarkingu.
5 answers
Wygląda na to, że potrzebujesz komendy synclub funkcji sync().
Jeśli chcesz spłukać pamięć podręczną dysku: echo 3 | sudo tee /proc/sys/vm/drop_caches
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-03-04 04:29:57
Możesz to zrobić tak:
# 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
Możesz użyć strace, aby zobaczyć, że są to trzy różne syscalls
Również, może być pożądane, aby wyłączyć pamięć podręczną HDD za pomocą hdparm, Nie wiem, co benchmarking.
W żaden sposób nie można uniemożliwić dyskowi twardemu pamięci podręcznej ostatnich 64/32/16 MB ostatnio używanych danych. W celu zabicia tej pamięci podręcznej wystarczy napisać jakąś ilość zer (i spłukać) + odczytać jakieś niepowiązane miejsce z dysku twardego. Jest to wymagane, ponieważ cache może być podzielony na Read-part I napisz-część. Następnie możesz przetestować dysk twardy.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-31 17:12:31
Oczyszczanie pamięci podręcznej dysku: echo 3 | sudo tee /proc/sys/vm/drop_caches
Dokumentacja polecenia: https://www.kernel.org/doc/Documentation/sysctl/vm.txt
Zapisanie tego spowoduje, że jądro usunie czyste pamięci podręczne, dentries i i-węzły z pamięci, powodując, że pamięć ta stanie się wolna.
Do free pagecache:
echo 1 > /proc/sys/vm/drop_caches
Aby uwolnić dentries i iPody:
echo 2 > /proc/sys/vm/drop_caches
Aby uwolnić pagecache, dentries i iPody:
echo 3 > /proc/sys/vm/drop_caches
Jako jest to nieniszcząca operacja, a brudne obiekty nie są wolne, Użytkownik powinien najpierw uruchomić "synchronizację", aby upewnić się, że wszystkie buforowane obiekty są zwolnione.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-08-16 01:43:34
Krótka dobra odpowiedź: (copy paste friendly)
DISK=/dev/sdX # <===ADJUST THIS===
sync
echo 3 > /proc/sys/vm/drop_caches
blockdev --flushbufs $DISK
hdparm -F $DISK
Explanation:
sync
: ze strony man: flush file system buffers. Wymuś zmianę bloków na dysk, zaktualizuj super blok.
echo 3 > /proc/sys/vm/drop_cache
: z dokumentów jądra spowoduje to, że jądro upuści czyste pamięci podręczne
blockdev --flushbufs /dev/sda
: ze strony man: wywołaj ioctls urządzenia blokowego [to] flush buffers.
hdparm -F /dev/sda
: ze strony man: Flush bufor pamięci podręcznej zapisu na dysku (starsze dyski mogą tego nie implementować)
Chociaż polecenia blockdev i hdparm wyglądają podobnie zgodnie z powyższą odpowiedzią, wydają różne ioktle do urządzenia.
Long prawdopodobnie better way:
(zakładam, że sformatowałeś dysk, ale możesz dostosować te polecenia, jeśli chcesz pisać bezpośrednio na dysk)
Uruchom to tylko raz przed pierwszym benchmarkiem:
MOUNT=/mnt/test # <===ADJUST THIS===
dd if=/dev/urandom of=$MOUNT/temp-hddread.tmp bs=64M count=16
Uruchom to za każdym razem, gdy chcesz opróżnić pamięć podręczną:
DISK=/dev/sdX # <===ADJUST THIS===
MOUNT=/mnt/test # <===AND THIS===
dd if=/dev/urandom of=$MOUNT/temp-hddwrite.tmp bs=64M count=16
rm $MOUNT/temp-hddwrite.tmp
sync
echo 3 > /proc/sys/vm/drop_caches
blockdev --flushbufs $DISK
hdparm -F $DISK
dd if=$MOUNT/temp-hddread.tmp of=/dev/null
Uruchom to, kiedy skończysz.
MOUNT=/mnt/test # <===ADJUST THIS===
rm $MOUNT/temp-hddread.tmp
Explanation:
Dysk twardy może mieć pamięci podręczne H/W, które nie zostaną wyczyszczone przez powyższe polecenia. Piszę i czytam pseudo-losowe DANE, aby wypełnić je śmieciami. Ilość danych zależy od wielkości pamięci podręcznej HDD. Używam /dev / urandom, ponieważ jest szybki i nie zależy nam na true losowości. Tworzę / mnt/test / temp-hddread.tmp z Uruchom i używaj go za każdym razem, gdy chcę przeczytać wystarczającą ilość losowych danych. Tworzę i usuwam /mnt/test/temp-hddwrite.tmp za każdym razem, gdy chcę napisać wystarczającą ilość losowych danych.
Kredyty
Napisałem tę odpowiedź na podstawie najlepszych części istniejących odpowiedzi.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-30 15:44:15
Odmontowanie i ponowne zamontowanie testowanego dysku spowoduje zresetowanie wszystkich pamięci podręcznych i buforów.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-03-04 03:00:23