Articles

Jak wyczyścić pamięć podręczną w systemie Linux

pamięć podręczna systemu plików linux (Page Cache) służy do szybszego wykonywania operacji We / Wy. W pewnych okolicznościach administrator lub programista może chcieć ręcznie wyczyścić pamięć podręczną. W tym artykule wyjaśnimy, jak działa pamięć podręczna systemu plików Linux. Następnie zademonstrujemy, jak monitorować użycie pamięci podręcznej i jak ją wyczyścić. Przeprowadzimy kilka prostych eksperymentów wydajności, aby sprawdzić, czy pamięć podręczna działa zgodnie z oczekiwaniami i czy procedura opróżniania i czyszczenia pamięci podręcznej również działa zgodnie z oczekiwaniami.

Jak działa pamięć podręczna systemu plików w Linuksie

jądro rezerwuje pewną ilość pamięci systemowej do buforowania dostępu do systemu plików w celu zwiększenia ogólnej wydajności. Pamięć podręczna w Linuksie nazywana jest pamięcią podręczną strony. Rozmiar pamięci podręcznej strony jest konfigurowalny z dużymi ustawieniami domyślnymi włączonymi do buforowania dużych ilości bloków dyskowych. Maksymalny rozmiar pamięci podręcznej i zasady kiedy usuwać dane z pamięci podręcznej są regulowane za pomocą parametrów jądra. Metoda buforowania Linuksa nazywana jest buforowaniem zapisu. Oznacza to, że jeśli dane są zapisywane na dysku, są zapisywane do pamięci podręcznej i oznaczone jako brudne w pamięci podręcznej, dopóki nie zostaną zsynchronizowane z dyskiem. Jądro utrzymuje wewnętrzne struktury danych, aby zoptymalizować dane do usunięcia z pamięci podręcznej, gdy potrzeba więcej miejsca w pamięci podręcznej.

podczas wywołań systemowych Linux read, jądro sprawdzi, czy żądane dane są przechowywane w blokach danych w pamięci podręcznej, co byłoby pomyślnym trafieniem pamięci podręcznej i dane zostaną zwrócone z pamięci podręcznej bez wykonywania żadnych IO do systemu dyskowego. W przypadku braku pamięci podręcznej dane zostaną pobrane z systemu IO, a pamięć podręczna zaktualizowana na podstawie zasad buforowania, ponieważ te same dane prawdopodobnie zostaną ponownie zażądane.

Po osiągnięciu pewnych progów wykorzystania pamięci zadania w tle zaczną zapisywać brudne dane na dysk, aby upewnić się, że czyści pamięć podręczną. Mogą one mieć wpływ na wydajność aplikacji intensywnie wykorzystujących pamięć i procesor i wymagać dostosowania przez administratorów i programistów.

używając polecenia Free do podglądu użycia pamięci podręcznej

możemy użyć polecenia free z wiersza poleceń w celu analizy pamięci systemowej i ilości pamięci przydzielonej do pamięci podręcznej. Zobacz polecenie poniżej:

# free-m

z powyższego polecenia free widać, że w tym systemie jest 7,5 GB PAMIĘCI RAM. Z tego tylko 209 MB jest używany i 6.5 MB jest wolny. 667 MB jest używane w buforze cache. Teraz spróbujmy zwiększyć tę liczbę, uruchamiając polecenie, aby wygenerować plik 1 gigabajta i odczytać plik. Poniższe polecenie wygeneruje około 100MB losowych danych, a następnie dołączy 10 kopii pliku do jednego pliku large_file.

# dd if=/dev/random of=/root/data_file count=1400000
# for I in `seq 1 10`; do echo $i; Cat data_file >> large_file; done

teraz upewnimy się, że przeczytamy ten plik 1 Giga, a następnie ponownie sprawdzimy wolne polecenie:

# cat large_file>/dev/null
# free-m

widzimy, że użycie bufora pamięci podręcznej wzrosło z 667 do 1735 megabajtów wzrost wykorzystania pamięci podręcznej bufora o około 1 gigabajt.

Proc Sys VM polecenie upuszczania pamięci podręcznej

jądro Linuksa zapewnia interfejs do upuszczania pamięci podręcznej wypróbujmy te polecenia i zobaczmy wpływ na wolne ustawienie.

# echo 1>/proc/sys/vm/drop_caches
# free-m

alokacja bufora została zwolniona za pomocą tego polecenia.

eksperymentalna weryfikacja, czy Drop Cache działa

Czy możemy wykonać weryfikację wydajności użycia pamięci podręcznej do odczytu pliku? Odczytajmy plik i zapiszmy go z powrotem do /dev / null, aby sprawdzić, ile czasu zajmuje odczytanie pliku z dysku. Zmierzymy go za pomocą komendy czasu. Wykonujemy to polecenie natychmiast po wyczyszczeniu pamięci podręcznej za pomocą powyższych poleceń.

odczytanie pliku zajęło 8,4 sekundy. Przeczytajmy jeszcze raz, że plik powinien znajdować się w pamięci podręcznej systemu plików i zobaczmy, ile czasu to zajmie.

Zajęło tylko .2 sekundy w porównaniu do 8.4 sekundy, aby odczytać go, gdy plik nie był buforowany. Aby zweryfikować powtórzmy to ponownie, najpierw wyczyszczając pamięć podręczną, a następnie czytając plik 2 razy.

działało idealnie zgodnie z oczekiwaniami. 8.5 sekund dla nie buforowanego odczytu i .2 sekundy na buforowany odczyt.

podsumowanie

pamięć podręczna strony jest automatycznie włączona w systemach Linux i w przejrzysty sposób przyspieszy IO, przechowując ostatnio używane dane w pamięci podręcznej. Jeśli chcesz ręcznie wyczyścić pamięć podręczną, co można łatwo zrobić, wysyłając polecenie echo do systemu plików /proc, wskazując jądrowi, aby upuścił pamięć podręczną i zwolnił pamięć używaną do pamięci podręcznej. Instrukcje uruchomienia polecenia zostały pokazane powyżej w tym artykule, a także pokazano eksperymentalną walidację zachowania pamięci podręcznej przed i po wypłukaniu.