¿Es posible evitar que un programa específico (es decir, rhythmbox y sus dependencias) se intercambie alguna vez al disco?
Lo pregunto porque tengo un problema cuando un reproductor de música tiene problemas cuando Chromium ocupa demasiada memoria. ¿Hay alguna manera de evitar esto? Esto ya no es un problema en Windows, así que presumiblemente hay una manera.
ps
otop
para ver si realmente se intercambia rhytmbox marcando el campoRSS
/RES
? Creo que su problema se debe principalmente a una programación incorrecta. Debe intentarrenice
el proceso rhytmbox o cambiar algunas de sus configuraciones, por ejemplo, el tamaño del búfer de audio.Respuestas:
Creo que el problema del hipo no es necesariamente causado por el intercambio. Si un programa está reproduciendo algo, Linux debería notar esto y no cambiarlo. Los programas que no hacen mucho son los primeros que se intercambian. Puede verificar si el programa realmente se está intercambiando mirando el campo
RSS
/RES
desde ps o arriba .RSS
es el tamaño del conjunto residente, la memoria física no intercambiada que utiliza una tarea (en kiloBytes).Creo que su problema probablemente se deba a una programación inadecuada de CPU y E / S y un poco de ineficiencia de Rhythmbox que lo hace sensible a las altas cargas del sistema. La prioridad de la CPU se puede cambiar con los comandos nice y renice . La prioridad de E / S se puede cambiar con el comando ionice . Solo el superusuario puede usar altas prioridades. También debe saber que los chicos del kernel de Linux están tratando de mejorar la capacidad de respuesta de los sistemas de escritorio con varios parches de baja latencia, por lo que podría considerar usarlos. Uno de ellos es un parche de ~ 200 líneas escrito por Mike Galbraith que ha impresionado incluso a Linus. La alternativa a este parche es el truco cgroups de Lennart Poettering que creo que será el predeterminado en Fedora 15.
De todos modos, sin esos parches hay dos opciones: iniciar el programa con alta prioridad o cambiarlo después. Para la primera opción, podría usar un script de envoltura alrededor de Rhythmbox:
Deberá ejecutarlo como root. Si no desea iniciar sesión como root solo para comenzar esto, puede usar cualquiera
su
osudo
.En cuanto a cambiar la prioridad después, si eres demasiado flojo para iniciar sesión como root para cambiarlo, puedes intentar usar un trabajo cron que se ejecute cada 5 minutos y establezca la prioridad del
rhythmbox
proceso, pero no recomendaría hacerlo:fuente
Respuesta corta: no se puede y no se debe.
Hace mucho tiempo, los archivos ejecutables honraban el bit pegajoso
+t
que le diría al kernel que no se intercambie, pero hoy se ignora.Si el núcleo decide que tiene que intercambiar, seguramente tiene un motivo válido. Linux es muy agresivo en el uso de la memoria, porque la RAM inactiva es un recurso desperdiciado.
Si realmente no desea intercambiar, obtenga más RAM, o simplemente
# swapoff -a
(no recomendado, puede inutilizar su sistema si ya tiene problemas).Shouldn't
ocurre cuando estás desarrollando alguna aplicación y no quieres que se intercambie en absoluto. Echa un vistazo a esta publicación en stackoverflow .fuente
Esto parece haber sido respondido aquí:
/programming/578137/can-i-tell-linux-not-to-swap-out-a-particular-processes-memory
Aunque el consenso es que probablemente no deberías: /
fuente
Hay varias maneras de hacer eso. Puede intentar probar es "dice" que Linux trabaje menos con swap (generalmente):
De: https://www.kernel.org/doc/Documentation/sysctl/vm.txt
Otra opción es usar el administrador de kernel de cgroups, esto es específico para cada proceso, pero tendrá que hacer "trabajo": Respondido aquí: /unix/10214/per-process-swapiness-for -linux # 10227
fuente
Puedes usar
mlockall()
syscall. mlockall () fuerza que el proceso de memoria sea residente (= sin intercambio, sin sobrecompromiso, etc.). AFAIK, no hay un comando de shell para hacerlo, pero es fácil crear uno. Se vería así:Tenga en cuenta que debe ser root para llamar
mlockall()
.Sin embargo, como se dijo en otra respuesta, no creo que sea realmente lo que quieres.
fuente