Używam zram na moim komputerze jako skompresowanej wymiany opartej na pamięci RAM. Kiedy system musi coś zamienić, zamiana na plik wymiany wspierany zramem jest mniej więcej równoważny z kompresowaniem tych danych w pamięci w celu zwolnienia miejsca. To sprawia, że zamiana jest bardzo szybka przez większość czasu, w porównaniu do wymiany kopii zapasowej na dysku. Z tego powodu zastanawiam się, czy można uzyskać jakąś wydajność, zachęcając system do bardziej agresywnej wymiany nieużywanych rzeczy, ponieważ może to zrobić bez faktycznego uderzenia w dysk?
Czy ktoś pomylił się z, powiedzmy, ustawieniem vm.swappiness
na 100 podczas korzystania z zram? Czy byłoby to pożądane?
sysctl -w vm.swappiness=100
Odpowiedzi:
Naprawdę nie zalecałbym, aby zwiększyć swapiness. Częstym mechanizmem w jądrze jest umieszczanie stron (fragmentu pamięci) w swapie, aby zwolnić pamięć dla innych uruchomionych zadań.
Pierwszy „problem”, gdy jądro chce uwolnić n stron, m (przy m <n, m to liczba skompresowanych stron potrzebnych do przechowywania n) są nowo tworzone w pamięci RAM, nie jestem pewien, czy to może zakłócić jądro lub nie.
W każdym razie, gdy masz strony w swapie, możliwe jest, że będziesz później używać aplikacji z niektórymi stronami w swapie. Jądro przywraca te strony do pamięci fizycznej, ale nie usuwa ich z wymiany (która przy standardowej zamianie może być postrzegana jako buforowanie , więc gdy aplikacja wróci w tło, jądro nie musi zapisywać tych stron do wolnej zamiany). Jednak w przypadku zram może nie jest to mądra sztuczka, ponieważ masz w pamięci m stron w zram + n stron, które powróciły do pamięci!
Jądro ma normalnie „całkowitą pamięć”, którą może wykorzystać do prowadzenia swojej działalności. Kiedy dodajesz zram, liczy się on tylko w pamięci „swap”, tak jak w przypadku każdej wymiany dysku, ale zmniejszył rzeczywistą „całkowitą pamięć” i nie jest to oczekiwane / oczekiwane przez jądro. Czasami możesz mieć dziwne i niepożądane zachowanie z tego powodu!
Z zram dobrze by było, gdyby jądro nie zamieniało się zbytnio w ten obszar, gdy jest pod presją pamięci. I zawsze powinieneś mieć prawdziwą partycję wymiany dysku twardego większą niż twój maksymalny rozmiar zram, aby system nie dostał OOM, a jednocześnie zobaczyłbyś dużo wolnego miejsca, jak zgłosiło
free
!źródło
Krótka odpowiedź:
vm.swappiness=100
jest odpowiednią wartością dla zram (przynajmniej w Debian Stretch z Linuksem 4.9, uważam, że jest to najlepsza wartość)Już
vm.swappiness=100
dla mnie testuję.Myślę, że możesz zrobić prosty test, aby upewnić się, która wartość jest dla Ciebie najlepsza.
Stworzyłem również inny prosty program do testowania tego pytania. x Na mojej maszynie bardzo niska
vm.swappiness
wartość (np.vm.swappiness=1
) spowoduje oczywisty problem z odpowiedzią.O
SwapCached
w/proc/meminfo
:Po pierwsze, spróbuj
vm.page-cluster=0
, może to zredukować niektóre bezużyteczneSwapCached
z zamiany.SwapCached może przyśpieszyć zram tak samo jak urządzenie wymiany non-zram
SwapCached
można ponownie użyć (bezpłatnie) w razie potrzeby:źródło
Strony muszą zostać zamienione (na dysk), gdy pamięć jest pełna. Jeśli używasz pamięci do utworzenia miejsca do zamiany stron, gdy pamięć jest pełna, można by pomyśleć, że osiągnie cel, chyba że kompresja ma znaczenie (a wtedy naturalne byłoby skompresowanie pamięci bezpośrednio, zamiast przechodzenia przez nią zamiana). Chyba trzeba by to porównać, ponieważ komputery coraz szybciej kompresują i dekompresują w porównaniu do prędkości pamięci.
źródło
vm.swappiness
wartość jest dostrojona dla wymiany opartej na dysku i czy powinienem ją zmienić, jeśli w większości będę korzystał z wymiany opartej na zram.