
Si uso alguna aplicación intensiva de IO (como Virtualbox, verificación de datos de Steam o incluso dd
), mi sistema casi deja de responder. A pesar de que todo se inicia con prioridad normal, hacen que el escritorio sea muy lento y retrasan mucho el inicio de otras aplicaciones.
Sé que puedo usar algo como ionice
cambiar la prioridad a inactiva, por ejemplo, pero en el caso de Virtualbox, que genera muchos procesos, se vuelve difícil.
¿Puedo dar algún tipo de sugerencias al sistema, para que al iniciar algunas aplicaciones específicas se inicien con la menor prioridad de IO?
Respuesta1
Nota: Esta solución solo funciona con el programador cfq, como se explicaaquí. Debe verificar cuál se utiliza emitiendo
cat /sys/block/sda/queue/scheduler
ycambiarsi es necesario.
Si entendí correctamente, desea que ionice
se aplique alguna configuración cada vez que inicie un comando. Puedes hacerlo de esta manera:
echo 'ionice -c 3 /usr/bin/VirtualBox "$@"' > VirtualBox
chmod a+x VirtualBox
sudo mv VirtualBox /usr/local/bin/
El primer comando crea un archivo VirtualBox
con el texto entre comillas simples como contenido. Este debería tener la ruta completa al programa, ya que si solo VirtualBox
la especificamos podemos interpretarlo como el archivo que acabamos de crear y crear un "bucle".
El segundo comando lo hace ejecutable y el tercero mueve este nuevo archivo a una carpeta que está frente a la carpeta bin del "sistema" /usr/bin
, por lo que nuestro nuevo archivo se ejecuta en lugar del original. La parte "$@" contiene todos los argumentos con los que se invocó el comando, por lo que se reenvían al comando real de VirtualBox.
Según la respuesta ("sí") a esta pregunta de superusuario¿Los procesos infantiles heredan prioridades iónicas de sus padres? ¿Cómo se verifica la prioridad IO de un proceso en ejecución?, debería ser suficiente para ionice
el proceso padre, así:
ionice -c 3 VirtualBox
Deionice
página de manual, están disponibles los siguientes valores de clase de programación de E/S:
- 0 para ninguno
- 1 en tiempo real
- 2 para el mejor esfuerzo
- 3 para inactivo (usado en el ejemplo anterior)
Se puede utilizar un número o nombre de clase.
Además, -n level
la opción es aplicable para clases en tiempo real y de mejor esfuerzo, con 0-7 como datos válidos (niveles de prioridad).
Respuesta2
Puede utilizar el comando 'renice' para priorizar procesos:
renice -<priority> <application's pid>
También podría ser que su disco esté girando demasiado, por lo que cuando desee iniciar una aplicación como Virtualbox, debe girar antes de poder comenzar a solucionarlo (esto puede llevar un tiempo).