blk-iocost incorpora BPF para decisiones de coste en I/O
Tao Cui propone una serie de parches que permiten cargar programas BPF en el controlador blk-iocost, aumentando su flexibilidad y capacidad de adaptación.
El controlador de I/O blk-iocost recibió una mejora importante: ahora puede ejecutar programas BPF para decidir el coste de cada solicitud de bloque. La serie de parches, presentada por Tao Cui, añade un hook que permite cargar código BPF en tiempo de ejecución y que el scheduler utilice esas métricas para asignar prioridades.
En entornos con discos SSD, la latencia es tan baja que el algoritmo de planificación pasa de ordenar peticiones a garantizar equidad entre procesos competidores. blk-iocost ya estaba orientado a ese escenario, pero su lógica de coste está codificada estáticamente. Con BPF, los administradores pueden escribir políticas a medida, por ejemplo penalizar I/O de procesos de bajo nivel o favorecer flujos críticos sin recompilar el kernel.
Los cambios principales incluyen:
- Un nuevo archivo de configuración en /sys/fs/bpf/blk-iocost que permite cargar un objeto BPF compilado.
- Extensión del árbol de decisiones del controlador para invocar el programa BPF antes de asignar un coste.
- Compatibilidad total con versiones del kernel 6.6 y posteriores; los parches se integran como opción de configuración (CONFIG_BLK_IOCOST_BPF).
Tao Cui indica que la sobrecarga introducida por la ejecución de BPF es mínima, alrededor de 2‑3 % en pruebas con cargas mixtas de lectura/escritura en SSD NVMe de 3,5 MIOPS. No se observan regresiones en el rendimiento de discos tradicionales, lo que sugiere que la solución es viable tanto para servidores de bases de datos como para entornos de virtualización.
Esta ampliación abre la puerta a estrategias más sofisticadas, como adaptar dinámicamente el coste según la carga del sistema, el tipo de dispositivo o incluso métricas de energía. Además, al estar basada en BPF, la política puede ser auditada y actualizada sin reiniciar el kernel, lo que simplifica la operación en clústers de gran escala.
Qué implica para los operadores: la nueva funcionalidad requiere generar y cargar programas BPF compatibles con la API de blk-iocost. Herramientas como bpftool ya soportan la compilación de objetos BPF, pero será necesario diseñar políticas específicas para cada caso de uso. La comunidad del kernel aún está evaluando la mejor forma de documentar y distribuir ejemplos.
En resumen, la integración de BPF en blk-iocost permite a los administradores afinar la equidad y el rendimiento del subsistema de bloques sin modificar el código fuente del kernel, una opción que probablemente verá adopción rápida en entornos que demandan alta concurrencia de I/O.