aumentare la reattività del desktop su Linux durante lo scambio


15

Tutte le distribuzioni GNU / Linux che ho testato finora hanno il problema che ogni volta che il ram viene riempito e il sistema inizia a scambiarsi, l'intera interfaccia utente desktop e grafica diventa non rispondente all'inferno nella misura in cui a volte devo aspettare circa 5-10 secondi dopo aver spostato il mouse fisico fino a quando il puntatore del mouse non si è effettivamente spostato.

Questo è un tipo di comportamento fastidioso, specialmente su sistemi con bassa ram.

Esiste un modo per assegnare ad alcune applicazioni / lavori, come l'ambiente desktop ecc., Una priorità più alta per rimanere nella RAM rispetto ad altre applicazioni, in modo che l'applicazione che effettivamente registra tutta la memoria venga scambiata prima dell'ambiente desktop ecc.?

EDIT: Sto parlando del caso in cui viene utilizzata l'intera RAM, quindi inizierà sempre a scambiarsi se non è disabilitato (non voglio che i processi vengano uccisi casualmente). Ho avuto questo problema non solo in ambienti a bassa RAM, ma anche con 8GiB di RAM sulla mia macchina desktop, in parte a causa di molte macchine virtuali in parte a causa della perdita di memoria. ZRAM non è una soluzione, in quanto sta solo ritardando il problema. L'unica soluzione che mi viene in mente per questo problema è l'utilità dello spazio utente o l'API del kernel che consente di impedire lo scambio di alcuni lavori o almeno di renderlo molto improbabile. Qualcuno conosce un'altra soluzione o sa qualcosa su tale strumento o API esistente o in fase di pianificazione?

2 ° EDIT: ulatencyd non sembra funzionare con le versioni più recenti di systemd, secondo https://aur.archlinux.org/packages/ulatencyd-git/ e https://wiki.archlinux.org/index.php/Ulatencyd . Ciò può essere dovuto al fatto che systemd ha assunto il pieno controllo dei cgroups dal punto di vista dello spazio utente se lo capisco correttamente.


3
cgroups, se hai il cgroup di memoria abilitato e swap accounting abilitato ( cgroup_enable=memory swapaccount=1dalla riga di comando del kernel; nota che questo ha un costo di prestazione minore). Esempio di implementazione: ulatencyd .
derobert,

@derobert Ottimo, sembra che sia esattamente quello che stavo cercando. Inizierò a sperimentare questo non appena avrò tempo.
FSMaxB,

Fantastico, ulatencyd ha anche un pacchetto AUR, suppongo che sia fortunato ad essere un utente Archlinux.
FSMaxB,

C'è anche un articolo wiki wiki.archlinux.org/index.php/Ulatencyd
FSMaxB

Se potessi votare questo Q in più lo farei! Non c'è davvero alcun modo diretto per dire alla GUI e ad alcuni programmi chiave di rimanere nella RAM in modo che rimanga reattivo? Voglio dire, qual è lo scenario peggiore di dare questa opzione agli utenti linux? Il computer si arresta in modo anomalo? CHI NON LO HA FATTO PRIMA? :) Voglio dire a volte, avvio accidentalmente troppe VM perché non sono riuscito ad aggiungere correttamente (numeri di RAM) e poi ci vuole SEMPRE per riportare le cose sotto controllo. Dire alla GUI e forse al terminale di rimanere nella RAM avrebbe risolto il problema, vero ?! Per favore, qualcuno risponda a questo!
Damon,

Risposte:


1

Per quanto ne so questo non è un problema specifico di Linux, è il modo in cui funziona SWAP (o memoria virtuale). Se il sistema operativo deve cercare i dati nel disco rigido rispetto alla RAM, rallenterà. Niente che puoi fare al riguardo, l'accesso al disco è molto più lento dell'accesso alla RAM.

Non sarai in grado di impostare la priorità con cui i processi vengono scambiati, che è determinato dal kernel che cercherà di massimizzare l'efficienza, non sarai in grado di farlo meglio. Quello che puoi fare è impostare la priorità della CPU di un processo e questo potrebbe aiutare. Il sistema viene disattivato a causa del tempo necessario per leggere da / a SWAP, ciò significa che la CPU dovrà attendere il recupero dei dati rilevanti da parte del processo richiedendolo prima che possa continuare. Se imposti il ​​tuo DE per avere una priorità più alta per l'accesso alla CPU, questo dovrebbe spingere le sue operazioni verso l'alto e accelerare un po 'le cose.

Pertanto, la priorità della CPU viene impostata con i comandi nicee 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.

Le priorità vanno da -20 (priorità massima) a 20 (priorità minima). Per modificare la priorità di un processo in esecuzione, è possibile eseguire:

renice -15 $PID

dove si $PIDtrova il PID del processo di cui si desidera aumentare la priorità. Puoi usare pgrepper scoprire qual è. Per esempio:

renice -15 $(pgrep gnome-session)

L'altra opzione sarebbe quella di impostare la "swappiness" del sistema che determina quando inizierà lo swap. Un valore di swapiness pari a 1 significa che cambierà solo per evitare errori di memoria insufficiente. Valori più alti indicano che inizierà lo scambio anche quando è ancora disponibile memoria fisica. Puoi impostarlo su un valore relativamente basso per scambiare il tuo sistema il meno possibile. Aggiungi questa linea a /etc/sysctl.conf:

vm.swappiness=1

ATTENZIONE: questa non è una buona idea se non hai molta RAM, lo scambio è una buona cosa in generale, dovrai cercare un po 'con i valori per trovare il giusto equilibrio per il tuo sistema.


Come dici tu, questo potrebbe essere risolto nello spazio del kernel, il che significa che sarebbe molto specifico per Linux. Cambiare lo swappiness non cambierà nulla perché quando viene utilizzata l'intera RAM il sistema si scambia comunque. E la priorità di un processo non cambierà nulla sulla sua gestione della memoria, ma solo il comportamento dello scheduler della CPU e del tempo della CPU non è davvero utile per accelerare l'accesso al disco.
FSMaxB,

La priorità della CPU @FSMaxB potrebbe essere utile poiché darà la priorità al DE, non aiuterà se il DE stesso sta cambiando, ma lo farà se c'è qualcos'altro che sta sostenendo la CPU e quindi rallentando la macchina.
terdon,

Quando il DE è inattivo per qualche tempo, nella mia esperienza il DE viene sempre scambiato quando la memoria si esaurisce.
FSMaxB,

@FSMaxB sì, ha senso dato che i DE sono maiali della memoria. Tuttavia, aumentare la sua priorità potrebbe aiutare, almeno lo scheduler non lo terrà indietro.
terdon,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.