¿Cómo se puede configurar la prioridad de E / S del disco automáticamente?

8

Si uso alguna aplicación intensiva de E / S (como Virtualbox, verificación de datos de Steam o incluso dd) mi sistema deja de responder. A pesar de que todo comenzó con prioridad normal, hacen que el escritorio sea muy lento y retrasan mucho el inicio de otras aplicaciones.

Sé que puedo usar algo como ionicecambiar la prioridad a inactivo, 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, de modo que cuando se inician algunas aplicaciones específicas se inician con la menor prioridad de E / S?

Salem
fuente
¿Probaste mi solución? ¿Hace el trabajo?
sm4rk0

Respuestas:

7

Nota: Esta solución solo funciona con el planificador cfq, como se explica aquí . Debe verificar cuál se utiliza emitiendo

cat /sys/block/sda/queue/scheduler

y cámbielo si es necesario.

Si entendí correctamente, desea ioniceque 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 VirtualBoxcon el texto entre comillas simples como su contenido. Esto debería tener la ruta completa al programa, porque si uno solo lo especifica VirtualBoxpuede 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 en una carpeta que se encuentra 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 VirtualBox real.

Según la respuesta ("sí") a esta pregunta de Superusuario ¿Los procesos de los niños heredan las prioridades de sus padres? ¿Cómo se verifica la prioridad IO de un proceso en ejecución? , debería ser suficiente para ioniceel proceso padre, así:

ionice -c 3 VirtualBox

Desde la ionice página de manual , están disponibles los siguientes valores de clase de programación de E / S:

  • 0 para ninguno
  • 1 para tiempo real
  • 2 para el mejor esfuerzo
  • 3 para inactivo (usado en el ejemplo anterior)

Se puede usar un número o nombre de clase.

Además, la -n levelopción es aplicable para clases en tiempo real y de mejor esfuerzo, con 0-7 como datos válidos (niveles de prioridad).

sm4rk0
fuente
1
Si bien esto puede responder teóricamente a la pregunta, sería preferible incluir aquí las partes esenciales de la respuesta y proporcionar el enlace para referencia.
Lucio
@Lucio, gracias por una pista, pero ¿no es ioniceparte esencial "debería ser suficiente para el proceso principal"?
sm4rk0
1
Si, tienes razón. Pero, si puede , tómese un tiempo y luego agregue más información de su propia experiencia sobre este procedimiento, creando una mejor respuesta :)
Lucio
@ Lucio, espero que sea lo suficientemente bueno ahora. Gracias por insistir (:
sm4rk0
1
FYI: ¡solo ionicepuedo trabajar con el cfqplanificador! Para más detalles: unix.stackexchange.com/questions/136226/…
andras.tim
-1

Puede usar el comando 'renice' para priorizar procesos:

renice -<priority> <application's pid>

También podría ser que su unidad esté girando demasiado, por lo que cuando desee iniciar una aplicación como Virtualbox, debe girar antes de que pueda comenzar a trabajar (esto puede llevar un tiempo).

ashish
fuente
Gracias por el consejo, pero estaba buscando una manera de hacerlo automáticamente y en todo el sistema. Por ejemplo: cuando inicie Virtualbox, ejecútelo con la prioridad de E / S más baja posible ...
Salem
regular nice y renice no priorizan IO por separado.
Jay _silly_evarlast_ Wren
Y esto es bueno, no ionice. Uno es para CPU y el otro para IO.
Dagelf