zwiększyć responsywność pulpitu w systemie Linux podczas wymiany

15

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.

FSMaxB
źródło
3
cgroups, jeśli masz włączoną pamięć cgroup i włączono rozliczanie zamiany ( cgroup_enable=memory swapaccount=1w wierszu poleceń jądra; zwróć uwagę, że ma to niewielki koszt wydajności). Przykładowa implementacja: ulatencyd .
derobert
@derobert Świetnie, wygląda na to, że właśnie tego szukałem. Zacznę eksperymentować z tym, jak tylko będę miał czas.
FSMaxB
Świetnie, ulatencyd ma nawet pakiet AUR, myślę, że mam szczęście, że jestem użytkownikiem Archlinux.
FSMaxB
Jest nawet artykuł wiki wiki.archlinux.org/index.php/Ulatencyd
FSMaxB
Gdybym mógł zagłosować na więcej Q, zrobiłbym to! Czy naprawdę nie ma bezpośredniego sposobu, aby powiedzieć GUI i kilku kluczowym programom, aby pozostały w pamięci RAM, aby pozostało responsywne? Mam na myśli, jaki jest najgorszy scenariusz oferowania użytkownikom Linuksa tej opcji? Komputer ulega awarii? KTO NIE ZROBIŁ TO PRZED? :) Mam na myśli czasami, że przypadkowo uruchamiam zbyt wiele maszyn wirtualnych, ponieważ nie mogłem poprawnie dodać (numerów RAM), a potem ZAWSZE trzeba przywrócić kontrolę. Powiedzenie GUI i może terminalowi pozostania w pamięci RAM to naprawi, prawda ?! Proszę, odpowiedz ktoś!
Damon

Odpowiedzi:

1

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ń nicei renice:

 Renice alters the scheduling priority of one or more running processes.
 The following who parameters are interpreted as process ID's, process
 group ID's, or user names.  Renice'ing a process group causes all pro‐
 cesses in the process group to have their scheduling priority altered.
 Renice'ing a user causes all processes owned by the user to have their
 scheduling priority altered.  By default, the processes to be affected
 are specified by their process ID's.

Priorytety wynoszą od -20 (najwyższy priorytet) do 20 (najniższy priorytet). Aby zmienić priorytet uruchomionego procesu, możesz:

renice -15 $PID

gdzie $PID jest PID procesu, którego priorytet chcesz zwiększyć. Możesz użyć, pgrepaby dowiedzieć się, która to jest. Na przykład:

renice -15 $(pgrep gnome-session)

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:

vm.swappiness=1

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.

terdon
źródło
Jak twierdzisz, można to rozwiązać w przestrzeni jądra, co oznacza, że ​​bardzo dobrze byłby specyficzny dla Linuksa. Zmiana zamiany nic nie zmieni, ponieważ kiedy cała pamięć RAM jest używana, system i tak zamienia. Poza tym priorytet procesu nie zmieni niczego w zarządzaniu pamięcią, ale jedynie zachowanie procesora i czasu procesora nie jest tak naprawdę pomocne w przyspieszeniu dostępu do dysku.
FSMaxB
@ FSMaxB Priorytet procesora może pomóc, ponieważ nada priorytet DE, nie pomoże, jeśli sam DE zamieni się, ale zrobi to, jeśli coś innego wstrzymuje procesor i spowalnia maszynę.
terdon
Kiedy DE jest bezczynne przez pewien czas, z mojego doświadczenia wynika, że ​​DE zawsze zamienia się, gdy kończy się pamięć.
FSMaxB
@ FSMaxB tak, to ma sens, ponieważ DE to świnie pamięci. Mimo to zwiększenie jego priorytetu może pomóc, przynajmniej harmonogram nie będzie go powstrzymywał.
terdon