¿Por qué Ubuntu 16.04 establece todos los programadores de unidades IO en "fecha límite"?

17

Acabo de instalar Xubuntu 16.04-64bit en una segunda partición en mi computadora portátil. Noté que a veces parecía un poco lento, así que verifiqué qué planificador de IO estaba usando para esa unidad, que resulta ser deadlinepara todas las unidades. Tengo un par de SSD y discos duros, así que sé que la "fecha límite" es mejor para los SSD y cfqpara los discos duros.

Arranqué en 14.04 en otra partición y está usando cfqpara las unidades giratorias y deadlinepara el SSD, como debería. También investigué /etc/udev/rules.dpara ver si 14.04 estaba usando una regla para configurar el tipo de unidad, pero no estaba allí, así que supongo que el núcleo lo está haciendo.

Entonces, me pregunto si esto es un error o si están usando "fecha límite" para todo ahora.

Actualización: El comentario que escribí sobre /etc/udev/rules.d fue un error. De hecho, he estado usando una regla udev para cambiar el programador (tal como la respuesta a continuación) según el tipo de rotación desde que comencé a usar un SSD, hace unos años. Supongo que me olvidé ... envejecer. De todos modos, una de las referencias que usé fue la wiki de optimización de Debian SSD .

¿No sería una buena idea si se incluyera? ¡Sólo una sugerencia!

curt54
fuente

Respuestas:

6

Con el lanzamiento de 14.04, el planificador predeterminado para el kernel 3.13 cambió de CFQ a Deadline .

Ya no hay un núcleo de servidor separado y el planificador CFQ no es adecuado para muchos escenarios de uso del servidor, por ejemplo, tiempos de espera de escritura KVM . Incluso hay regresiones de rendimiento en el escritorio con dispositivos USB .

NGRhodes
fuente
1
Gracias por la lectura, muy esclarecedor! El problema de USB que he tenido a menudo con las tarjetas SD y con la tableta Android en TWRP En este último, colgaría justo al final durante varios minutos. El problema KVM nunca aparece en mis invitados VB ya que están en mi SSD con fecha límite.
curt54
32

El equipo Ubuntu Kernel ejecuta regularmente un gran análisis de diferentes cargas de trabajo simuladas en diferentes sistemas de archivos y planificadores de E / S para tener una idea de la mejor opción genérica de planificador de E / S. La respuesta general es que no hay una opción perfecta de planificador de E / S para una configuración genérica en todos los tipos de instalaciones para los diferentes tipos de medios. Los puntos más destacados para recordar son:

  1. Los sistemas se están moviendo a SSD, por lo que noop o fecha límite son los mejores para estos; noop tiene menos sobrecarga de CPU que la fecha límite.

  2. CFQ vs Fecha límite es una decisión difícil. CFQ permite una mayor flexibilidad. Sin embargo, descubrimos que para una gama más amplia de operaciones de E / S simuladas, la fecha límite proporcionaba latencias más bajas y un rendimiento ligeramente mayor que CFQ.

  3. Comparo los núcleos regularmente (cada prueba de núcleo tarda más de 3 días en completarse) para una gama de sistemas de archivos y programadores de E / S. A partir de este y otros datos variados, tratamos de tomar una decisión informada sobre la mejor opción, ver:

http://kernel.ubuntu.com/~cking/fs-tests/

Hay ventajas y desventajas en todos los planificadores de E / S, por lo que cualquier valor predeterminado no es perfecto y el equipo del kernel de Ubuntu siempre está dispuesto a participar en la elección predeterminada si los datos y razones convincentes nos muestran que cambiamos de otra manera.

Colin Ian King
fuente
55
Pasamos a usar CFQ de manera predeterminada para el kernel Ubuntu Zesty 4.10 y también habilitamos el nuevo CONFIG_BLK_WBT_MQ (aceleración de reescritura multiqueue) ya que esto resuelve los problemas de reescritura de caché sucia con dispositivos lentos como dispositivos flash.
Colin Ian King
1
¿Quizás veamos BFQ como predeterminado ahora que está en el kernel 4.12?
JauntyDoe
Estaremos evaluando esto para 4.12 / 4.13, también realicé algunas pruebas iniciales con kyber, pero las volveré a revisar una vez que salga 4.12 esta semana.
Colin Ian King
En principio, esta pregunta es solo sobre el kernel 16.04, pero aún aparece en la búsqueda :-). Así que aquí hay una actualización más reciente: Ubuntu ha vuelto a CFQ, que coincide con el valor predeterminado predeterminado, en Ubuntu 17.04 (zesty) hasta 18.10 (cósmico) .
sourcejedi
1
Actualización adicional: Linux ha deshabilitado WBT cuando usa CFQ o BFQ (al menos por defecto), porque no funciona bien en conjunto. 2) Si desea evaluar el problema resuelto por WBT, creo que debe tener en cuenta que el problema varía entre dispositivos (diferentes firmwares). En sus resultados de referencia, ni siquiera puedo encontrar qué tipo de dispositivo se utilizó. 3) Tengo curiosidad sobre su descripción de lo que resuelve WBT. Si nos fijamos en la carta de presentación en la v2 del conjunto de parches WBT, WBT está diseñado para manejar escrituras almacenadas en memoria intermedia en flash rápido , que puede tener colas muy profundas, y evitar lectores hambrientos en el mismo dispositivo.
sourcejedi
9

No sé por qué los desarrolladores decidieron elegir deadlinecomo programador predeterminado, tal vez es porque la mayoría de las computadoras nuevas se envían con un SSD, en el que normalmente se instalan los sistemas. Puede configurar el planificador manualmente de esta manera, en caso de que aún no lo haya instalado ... instale gksu:

Abra una terminal y ejecute:

sudo apt install gksu  

Luego ejecute este comando:

gksudo gedit /etc/udev/rules.d/60-schedulers.rules  

Pegue el siguiente texto en el archivo vacío y guarde el archivo modificado.

# set cfq scheduler for rotating disks
ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="1", ATTR{queue/scheduler}="cfq"

# set deadline scheduler for non-rotating disks
ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="0", ATTR{queue/scheduler}="deadline"  

Reinicie el sistema operativo y ahora está utilizando los programadores óptimos para HDD y SSD.

cl-netbox
fuente
Sí, esto es lo que había estado usando, según mi actualización en la pregunta. Pero creo que, dado que es común hoy en día tener ambos tipos de unidades, incluirían esta regla en todas las distribuciones de Linux.
curt54