Wszystkie dotychczas przetestowane dystrybucje GNU / Linux mają problem polegający na tym, że gdy pamięć RAM zostanie zapełniona, a system zacznie się zamieniać, cały pulpit i graficzny interfejs użytkownika przestaną reagować jak cholera do tego stopnia, że czasami muszę czekać około 5-10 sekund po poruszając fizyczną myszą, aż wskaźnik myszy faktycznie się poruszy.
Jest to trochę irytujące zachowanie, szczególnie w systemach z niskim RAM.
Czy jest jakiś sposób, aby nadać niektórym aplikacjom / zadaniom, takim jak środowisko pulpitu itp., Wyższy priorytet pozostawania w pamięci RAM niż inne aplikacje, tak aby aplikacja zajmująca całą pamięć została zamieniona przed środowiskiem pulpitu itp.?
EDYCJA: Mówię o przypadku, gdy używana jest cała pamięć RAM, więc zawsze zacznie się zamieniać, jeśli nie zostanie wyłączona (nie chcę, aby procesy były zabijane losowo). Miałem ten problem nie tylko w środowiskach z niskim RAM, ale także z 8GiB RAM na moim komputerze stacjonarnym, częściowo z powodu wielu maszyn wirtualnych, częściowo z powodu wycieku pamięci. ZRAM też nie jest rozwiązaniem, ponieważ tylko opóźnia problem. Jedynym rozwiązaniem, które mogę wymyślić dla tego problemu, jest narzędzie do obsługi przestrzeni użytkownika lub interfejs API jądra, który pozwala w ogóle zapobiec zamianie niektórych zadań lub przynajmniej uczynić je bardzo mało prawdopodobnym. Czy ktoś zna inne rozwiązanie lub wie coś o istnieniu lub planowaniu takiego narzędzia lub interfejsu API?
2. EDYCJA: ulatencyd nie wydaje się działać z nowszymi wersjami systemd, zgodnie z https://aur.archlinux.org/packages/ulatencyd-git/ i https://wiki.archlinux.org/index.php/Ulatencyd . Może to być spowodowane tym, że systemd przejął pełną kontrolę nad grupami z perspektywy przestrzeni użytkownika, jeśli dobrze to rozumiem.
cgroup_enable=memory swapaccount=1
w wierszu poleceń jądra; zwróć uwagę, że ma to niewielki koszt wydajności). Przykładowa implementacja: ulatencyd .Odpowiedzi:
O ile wiem, nie jest to problem specyficzny dla Linuksa, jego sposób działania SWAP (lub pamięci wirtualnej). Jeśli system operacyjny będzie musiał wyszukiwać dane na dysku twardym, a nie w pamięci RAM, zwolni. Nic nie możesz na to poradzić, dostęp do dysku jest znacznie wolniejszy niż dostęp do pamięci RAM.
Nie będziesz w stanie ustawić priorytetu, z jakim procesy są zamieniane, który jest określony przez jądro, które będzie próbowało zmaksymalizować wydajność, nie będziesz w stanie zrobić tego lepiej. Co można zrobić, to ustawić priorytet CPU procesu i że może pomóc. Twój system jest obniżany z powodu czasu potrzebnego na odczyt z / do SWAP, co oznacza, że procesor będzie musiał czekać na pobranie odpowiednich danych przez proces żądający go, zanim będzie mógł kontynuować. Jeśli ustawisz DE, aby miał wyższy priorytet dostępu do procesora, powinno to zepchnąć jego operacje na szczyt i nieco przyspieszyć.
Tak więc priorytet procesora ustawia się za pomocą poleceń
nice
irenice
:Priorytety wynoszą od -20 (najwyższy priorytet) do 20 (najniższy priorytet). Aby zmienić priorytet uruchomionego procesu, możesz:
gdzie
$PID
jest PID procesu, którego priorytet chcesz zwiększyć. Możesz użyć,pgrep
aby dowiedzieć się, która to jest. Na przykład:Inną opcją byłoby ustawienie systemu „swapiness” systemu, który określa, kiedy zacznie się zamiana. Wartość swapiness wynosząca 1 oznacza, że zamienia się tylko, aby uniknąć błędów braku pamięci. Wyższe wartości oznaczają, że zacznie się zamieniać, nawet jeśli nadal będzie dostępna pamięć fizyczna. Możesz ustawić tę wartość na względnie niską wartość, aby system zamieniał jak najmniej. Dodaj tę linię do
/etc/sysctl.conf
:OSTROŻNIE: To nie jest dobry pomysł, jeśli nie masz dużo pamięci RAM, zamiana jest ogólnie dobrą rzeczą, musisz trochę pobawić się wartościami, aby znaleźć odpowiednią równowagę dla swojego systemu.
źródło