Jądro Linux zamienia większość stron z pamięci, gdy uruchamiam aplikację, która wykorzystuje większość 16 GB pamięci fizycznej. Po zakończeniu aplikacji każda czynność (pisanie poleceń, przełączanie obszarów roboczych, otwieranie nowej strony internetowej itp.) Trwa bardzo długo, ponieważ odpowiednie strony muszą najpierw zostać ponownie odczytane z wymiany.
Czy istnieje sposób, aby poinformować jądro Linuksa, aby kopiowało strony z zamiany z powrotem do pamięci fizycznej bez ręcznego dotykania (i czekania) każdej aplikacji? Uruchamiam wiele aplikacji, więc czekanie jest zawsze bolesne.
Często używam, swapoff -a && swapon -a
aby system ponownie reagował, ale to usuwa strony z zamiany, więc muszą być napisane ponownie przy następnym uruchomieniu skryptu.
Czy istnieje interfejs jądra, być może wykorzystujący sysfs, który instruuje jądro, aby czytało wszystkie strony z wymiany?
Edycja: Naprawdę szukam sposobu na zamianę wszystkich swapów. (Dzięki derobert!)
[PS serverfault.com/questions/153946/… i serverfault.com/questions/100448/... to pokrewne tematy, ale nie zajmują się pytaniem, jak zmusić jądro Linuksa do kopiowania stron z zamiany z powrotem do pamięci bez usuwania zamiany.]
Odpowiedzi:
Na podstawie programu memdump pierwotnie znaleźć tutaj stworzyłem skrypt do selektywnego odczytu określonych zastosowaniach z powrotem do pamięci.
remember
:Zastosowanie: coś podobnego
Szybko przeskakuje pamięć nie wymienioną (gigabajty na sekundę) i zwalnia, gdy wymagana jest zamiana.
źródło
Może pomóc w górę
/proc/sys/vm/page-cluster
(domyślnie: 3).Z dokumentacji jądra (
sysctl/vm.txt
):Dokumentacja nie wspomina o limicie, więc być może możesz ustawić tę absurdalnie wysoką wartość, aby wszystkie wymiany zostały odczytane bardzo szybko. I oczywiście później przywróć normalną wartość.
źródło
page-cluster
wartości może poprawić wydajność.Możesz spróbować dodać programy, które najbardziej Cię interesują, do grupy cG i dostrajać swapiness , aby przy następnym uruchomieniu aplikacji dodawane programy były mniej prawdopodobne, że będą kandydatami do zamiany.
Niektóre strony prawdopodobnie nadal zostaną zamienione, ale może to rozwiązać problemy z wydajnością. Duża część tego jest prawdopodobnie tylko zachowaniem „zatrzymaj i uruchom”, gdy wiele stron programu jest zamienionych, a program musi stale wstrzymywać, aby zamienić swoje strony w pamięci RAM, ale tylko w przyrostach 4k.
Alternatywnie możesz dodać aplikację, która jest uruchomiona do grupy, i dostroić swapiness, tak aby aplikacja najczęściej używała pliku wymiany. Spowolni działanie aplikacji, ale pozwoli zaoszczędzić resztę systemu.
źródło
Wydaje mi się, że nie można magicznie „sprawić, aby system ponownie zareagował”. Albo ponosisz karę, albo odczytujesz strony z zamiany miejsca do pamięci albo ponosisz ją później, ale w ten czy inny sposób ją ponosisz. Rzeczywiście, jeśli zrobisz coś takiego
swapoff -a && swapon -a
, możesz odczuwać więcej bólu niż mniej, ponieważ zmuszasz niektóre strony do skopiowania z powrotem do pamięci, które w innym przypadku nigdy nie byłyby potrzebne i ostatecznie zostałyby usunięte bez czytania (pomyśl: zamknij aplikację, dopóki znaczna część stosu jest zamieniona; strony te można całkowicie wyrzucić bez konieczności ponownego czytania w pamięci).Cóż, prawie każda strona, która zostanie skopiowana z zamiany do pamięci głównej, i tak ma zostać zmodyfikowana, więc jeśli kiedykolwiek będzie trzeba ją wycofać, aby zamienić ją ponownie w przyszłości, i tak trzeba ją napisać na nowo. Należy pamiętać, że zamiana to głównie pamięć sterty, a nie strony tylko do odczytu (które zwykle mają kopie zapasowe plików).
Myślę, że twoja
swapoff -a && swapon -a
sztuczka jest tak dobra, jak wszystko, co możesz wymyślić.źródło
swapoff -a && swapon -a
nie będzie dla ciebie dobry. Myślę, że w takim przypadku potrzebujesz czegoś, co skanuje/proc/<each-process>/mem
i odczytuje każdą stronę pamięci, aby upewnić się, że istnieje ona w pamięci RAM. Nie wiem czy to istnieje.Bardzo miła dyskusja tutaj http://rudd-o.com/en/linux-and-free-software/tales-from-responsivenessland-why-linux-feels-slow-and-how-to-fix-that co sprowadza się do zmniejszania swapingu, przy założeniu, że aby zwiększyć postrzeganą szybkość reakcji systemu, należy zapobiegać zamianie kodu (i tak się dzieje). To nie jest tak naprawdę odpowiedź na twoje pytanie, ale może to zapobiec pojawieniu się problemu (twoje aplikacje po prostu się nie zamieniają, tylko nieużywane dane i pamięć podręczna stron)
źródło