Configuración de planificadores de E/S con múltiples colas de procesos en Linux.
Desde hace algunos años, la mayoría de las versiones recientes de distribuciones Linux han adoptado de modo predeterminado los planificadores de E/S con múltiples colas de procesos. Utilizar éstos ―en lugar de los antiguos planificadores de E/S de una única cola de procesos― hace que mejore considerablemente el rendimiento de las unidades de almacenamiento SATA, SAS, SSD y NVMe.
Hasta hace unos pocos años, los planificadores de E/S en Linux se limitaban a cbq, deadline y noop. Durante muchos años funcionaron muy bien para uso general, discos duros SATA (cfq en escritorios y deadline en servidores), unidades SAS (noop en casi todos los casos) y unidades NVMe y SDD (noop en todos los casos). Gestionaban una única cola de procesos dando prioridades de acuerdo al planificador de E/S seleccionado.
La complejidad de las aplicaciones y el actual uso de datos hicieron que los planificadores de una única cola de procesos se volvieran insuficientes. Fue partir de la versión 4.12 que el núcleo de Linux tuvo una mejora radical: los planificadores de entrada/salida (E/S) con múltiples colas: bfq, kiber, mq-deadline y none.
Los planificadores de E/S de una única cola tienen justamente éso: una única cola de solicitudes de E/S en espera por cada unidad de almacenamiento. Las unidades giratorias están limitadas físicamente para atender una sola solicitud a la vez, por lo que internamente solo tienen una cola. Para estos dispositivos en máquinas más antiguas, tenía sentido que los planificadores de E/S también tuvieran una única cola.
El hardware avanzado trajo consigo un mayor número de núcleos de CPU, así como unidades individuales que podían funcionar en varias solicitudes en paralelo. Los planificadores de múltiples colas ayudan con ambos aspectos.
Tener múltiples núcleos de CPU introdujo más contención de bloqueo al trabajar con las colas de E/S. La creación de una cola por núcleo permitió que la mayoría de las interacciones de bloqueo se retrasaran hasta enviar solicitudes a la unidad y eliminó la mayor parte de la contención de bloqueo. Si la unidad también admite múltiples colas, permite que se haga menos trabajo fusionando las colas del núcleo antes de enviar solicitudes a las unidades.
Los núcleos modernos ahora usan planificadores de múltiples colas de forma predeterminada, incluso para dispositivos que tienen una sola cola de hardware.
¿Qué planificadores de E/S se utilizan actualmente?
BFQ.
BFQ (Budget Fair Queueing o cola de espera de presupuesto justa) es un planificador de E/S de participación proporcional que asocia cada proceso con un peso. Basándose en el peso, éste decide después cuánto del ancho de banda de E/S asignar a un proceso. Ideal para discos duros SATA en sistemas de escritorio.
Kyber.
Kyber es un planificador de E/S desarrollado por Facebook. Fue diseñado para dispositivos rápidos de múltiples colas de procesos y es relativamente simple. Tiene dos colas de solicitudes:
Solicitudes sincrónicas (por ejemplo, lecturas bloqueadas)
Solicitudes asíncronas (por ejemplo, escrituras)
Kyber tiene límites estrictos en el número…