Penso che il problema del singhiozzo non sia necessariamente causato dallo scambio. Se un programma sta riproducendo qualcosa, Linux dovrebbe notarlo e non scambiarlo. I programmi che non fanno molto sono i primi che vengono scambiati. Puoi verificare se il programma viene realmente scambiato guardando il RSS
/RES
campo da ps o in alto . RSS
è la dimensione del set residente, la memoria fisica non scambiata utilizzata da un'attività (in kiloByte).
Penso che il tuo problema sia molto probabilmente causato da una pianificazione impropria della CPU e dell'I / O e da un po 'di inefficienza di Rhythmbox che lo rende sensibile ai carichi di sistema elevati. La priorità della CPU può essere modificata con i comandi nice e renice . La priorità I/O può essere modificata con ionice comando. Solo il super utente può utilizzare priorità alte. Dovresti anche sapere che i ragazzi del kernel Linux stanno cercando di migliorare la reattività dei sistemi desktop con varie patch a bassa latenza, quindi potresti considerare di usarle. Uno di questi è una patch di circa 200 righe scritta da Mike Galbraith che ha impressionato anche Linus. L'alternativa a questa patch è il trucco cgroups di Lennart Poettering che penso sarà l'impostazione predefinita in Fedora 15.
Ad ogni modo, senza quelle patch ci sono due opzioni:avviare il programma con una priorità alta o cambiarlo in seguito. Per la prima opzione puoi usare uno script wrapper attorno a Rhythmbox:
#!/bin/sh
# Run Rhytmbox with high CPU and I/O priorities
nice -n -10 ionice -c 1 -n 1 su -l -c rhythmbox alexei
Dovrai eseguirlo come root. Se non vuoi accedere come root solo per iniziare, puoi usare su
o sudo
.
Per quanto riguarda la modifica successiva della priorità, se sei troppo pigro per accedere come root per modificarla, puoi provare a utilizzare un cron job che viene eseguito ogni 5 minuti e imposta la priorità del rhythmbox
processo, ma non consiglierei di farlo:
#!/bin/sh
renice -n -10 -p `pidof rhythmbox`
ionice -c 1 -n 1 -p `pidof rhythmbox`
Risposta breve:non puoi e non dovresti.
Molto tempo fa i file eseguibili onoravano lo sticky bit +t
che direbbe al kernel di non scambiare, ma oggi viene ignorato.
Se il kernel decide che deve eseguire lo scambio, ha sicuramente un motivo valido. Linux è molto aggressivo sull'utilizzo della memoria, perché la RAM inattiva è una risorsa sprecata.
Se davvero non vuoi scambiare, prendi più RAM o solo # swapoff -a
(non consigliato, può rendere il tuo sistema inutilizzabile se hai già problemi).
Shouldn't
va quando stai sviluppando un'app e non vuoi che si scambi affatto. Dai un'occhiata a questo post su StackOverflow.
Ci sono diversi modi per farlo. Puoi provare a "dire" che Linux funziona meno con lo scambio (generalmente):
echo 10 > /proc/sys/vm/swappiness
Da:https://www.kernel.org/doc/Documentation/sysctl/vm.txt
swappiness
Questo controllo è usato per definire quanto aggressivamente il kernel scambierà le pagine di memoria. Valori più alti aumenteranno l'aggressività, valori più bassi diminuiranno la quantità di scambio.
Il valore predefinito è 60.
Un'altra opzione è utilizzare il gestore del kernel di cgroups, questo è specifico per processo ma avrai del "lavoro" da fare:Risposta qui:https://unix.stackexchange.com/questions/10214/per-process-swapiness-for -linux#10227