El Planificador Completamente Justo (Completely Fair Scheduler - CFS) es un algoritmo planificador desarrollado con la meta de maximizar el uso de la CPU con las diferentes tareas que se lanzan en un sistema Linux basándose en el Fair Queuing.
Este planificador, apareció en la versión del núcleo Linux 2.6.23[1] para sustituir al proceso planificador O(1) incluido en los núcleos anteriores, siendo desarrollado inicialmente por Ingo Molnar. Este planificador fue desarrollado en 62 horas con 100 Kbytes de código añadido.[2]
Este algoritmo tiene como objetivo el maximizar el uso de la CPU pero permitiendo el uso interactivo de la máquina. Es decir, tratará de que en ningún momento un usuario vea una bajada de rendimiento.
Con el planificador CFS se realiza un cambio radical en los planteamientos actuales de los planificadores incluidos en Linux, cambiando la planificación de manera que se base en tiempo, en nanosegundos, en vez de colas de ejecución donde hay tareas en espera, sino que se creará un Árbol rojo-negro de búsqueda, en el que se almacenará una línea de tiempo de las futuras tareas que usarán la CPU. Ya no usará los jiffies, basado en los tick de la CPU, para expulsar a un proceso.
No usará intervalos de tiempo (quantum) estáticos, sino que se irán modificando dinámicamente según necesidades del sistema, con una granularidad definida en el fichero /proc/sys/kernel/sched_granularity_ns definido en nanosegundos.
Este planificador tiene una complejidad de planificación de O(log N), donde N es el número de tareas encoladas. Tiene la mejor complejidad en la elección de la tarea siguiente a ejecutar ya que es constante, pero insertar una tarea a ejecutar detrás supone O(log N), que corresponde con la implementación de la cola de procesos en forma de árbol.