Planificador de Linux (Scheduler) Profesor Gilberto Díaz gilberto@ula.ve Universidad de Los Andes Facultad de Ingeniería Departamento de Computación G. Díaz (ULA) Planificador de Linux (Scheduler) Mérida, 2013 1 / 21
Planificador de Linux Definición La planificación es el método mediante el cual los hilos, los procesos o los flujos de datos tienen acceso a los recursos, por ejemplo, tiempo de procesador, ancho de banda en la comunicación, entre otros. G. Díaz (ULA) Planificador de Linux (Scheduler) Mérida, 2013 2 / 21
Planificador de Linux Planificador Es el componente del sistema operativo encargado de la planificación. La necesidad de algoritmos de planificación surgió con la aparición de sistemas operativos multi tareas. Completely Fair Scheduler (CFS) Desde la versión 2.6.23 el planificador tradicional de Linux fue remplazado por el CFS. El 80 % del diseño de CFS fundamentalmente modela un Procesador multi tarea ideal. G. Díaz (ULA) Planificador de Linux (Scheduler) Mérida, 2013 3 / 21
Completely Fair Scheduler Completely Fair Scheduler CFS busca mantener el balance (equidad) en el tiempo de procesador que se asignan a los procesos. Cada proceso debe recibir un tiempo equitativo. Cuando un proceso esta fuera de balance, se le asigna tiempo de ejecución en el procesador. Para determinar el balance, CFS mantiene la cantidad de tiempo que se le ha asignado a un proceso en lo que llaman Virtual Runtime. G. Díaz (ULA) Planificador de Linux (Scheduler) Mérida, 2013 4 / 21
Completely Fair Scheduler Completely Fair Scheduler CFS utiliza una colas basadas en el tiempo. El proceso con menor Virtual Runtime es el más próximo a ser ejecutado. G. Díaz (ULA) Planificador de Linux (Scheduler) Mérida, 2013 5 / 21
CFS mantiene un árbol rojo-negro ordenado por tiempo. G. Díaz (ULA) Planificador de Linux (Scheduler) Mérida, 2013 6 / 21
Un árbol RB está balanceado El sub árbol con claves menores a n se encuentra a la izquierda. El sub árbol con claves mayores a n se encuentra a la derecha. La profundidad de 2 nodos cualquiera no difiere en más de 1. Los sub árboles son balanceados también. La búsqueda es O(log n) G. Díaz (ULA) Planificador de Linux (Scheduler) Mérida, 2013 7 / 21
El nodo más a la izquierda tiene la clave más pequeña. Eso quiere decir que es el nodo con el menor virtual runtime. Es decir, es el nodo que representa al proceso que más necesita ejecutarse El nodo de más a la derecha tiene la clave más grande (mayor virtual runtime). Es el proceso que menos necesita ejecución. Entonces, CFS selecciona el nodo más a la izquierda para ser despachado. El nodo se elimina del árbol. Si no ha terminado, se inserta de nuevo con un nuevo valor de virtual runtime. G. Díaz (ULA) Planificador de Linux (Scheduler) Mérida, 2013 8 / 21
virtualruntime+ = (delta_exec)(nice_0_load) se(load.weight) delta_exec Cantidad de tiempo de ejecución. NICE_0_LOAD Valor de la unidad de peso. G. Díaz (ULA) Planificador de Linux (Scheduler) Mérida, 2013 9 / 21
Los arboles rojo-negro son auto-balanceables. Ningún camino es, a lo sumo, el doble en tamaño que cualquier otro. G. Díaz (ULA) Planificador de Linux (Scheduler) Mérida, 2013 10 / 21
Las operaciones en el árbol ocurren en tiempo O(log(n)), donde n es el número de nodos del árbol. De esta manera se pueden ejecutar las operaciones de inserción y eliminación de procesos de manera rápida y eficiente. G. Díaz (ULA) Planificador de Linux (Scheduler) Mérida, 2013 11 / 21
Políticas de Planificación Políticas de Planificación Utiliza una técnica de tiempo compartido. A cada proceso se le asigna un quantum de tiempo para ejecutarse en el procesador. La planificación se ejecuta acorde a un ranking de prioridad. Utiliza prioridades dinámicas que son ajustadas a través del tiempo. Los procesos que no han sido ejecutados por ele procesador en un periodo largo de tiempo, aumentan su prioridad. Los que han sido ejecutados por mayor tiempo, reducen su prioridad. G. Díaz (ULA) Planificador de Linux (Scheduler) Mérida, 2013 12 / 21
Políticas de Planificación Políticas de Planificación Se utiliza la expropiación de procesos. Un proceso se expropia cuando: Se acaba su quantum de tiempo. Entra un nuevo proceso con mayor prioridad que se ejecuta actualmente. G. Díaz (ULA) Planificador de Linux (Scheduler) Mérida, 2013 13 / 21
Políticas de Planificación Políticas de Planificación Un proceso puede tener 2 tipos de prioridades: Estática: Dinámica: G. Díaz (ULA) Planificador de Linux (Scheduler) Mérida, 2013 14 / 21
Prioridad Estática Prioridad Estática Estática: Es asignada cuando el proceso es creado. Los procesos de tiempo real también tienen prioridad estática (de 0 a 99). Estos procesos tienen prioridad mayor a los procesos comunes y no puede ser cambiada por el planificador. Estos utilizan 2 tipos de políticas: SCHED_FIFO SCHED_RR Los procesos normales utilizan la política SCHED_OTHER. G. Díaz (ULA) Planificador de Linux (Scheduler) Mérida, 2013 15 / 21
Políticas de Planificación Políticas de Planificación Un proceso puede tener 2 tipos de prioridades: Estática: Es asignada cuando el proceso es creado. Los procesos de tiempo real también tienen prioridad estática (de 0 a 99). Estos procesos tienen prioridad mayor a los procesos comunes y no puede ser cambiada por el planificador. Estos utilizan 2 tipos de políticas: G. Díaz (ULA) Planificador de Linux (Scheduler) Mérida, 2013 16 / 21
Políticas de Planificación Políticas de Planificación Se pueden clasificar los procesos mediante dos esquemas: CPU-bound y I/O-bound Interactive, Batch y Real-Time El planificador asigna mayor prioridad a procesos en tiempo real. Estos nunca pueden ser bloqueados por procesos de menor prioridad. Los procesos Batch son penalizados por el planificador, ya que no son responsivos y corren generalmente en segundo plano. Los procesos Real Time necesitan mayor tiempo de ejecución. G. Díaz (ULA) Planificador de Linux (Scheduler) Mérida, 2013 17 / 21
Funcionamiento Funcionamiento El planificador de Linux ejecuta varios métodos para cumplir su función, entre los principales están: scheduler_tick() try_to_wake_up() recalc_task_prio() load_balance() schedule() G. Díaz (ULA) Planificador de Linux (Scheduler) Mérida, 2013 18 / 21
Funcionamiento Rutina schedule() Es el método más importante del planificador. Este método es el responsable de elegir el próximo proceso a ser ejecutado. Es ejecutado cuando: Un proceso cede voluntariamente el CPU. Un proceso espera por una señal para dormir. Un proceso agota su tiempo de ejecución. Otros casos. G. Díaz (ULA) Planificador de Linux (Scheduler) Mérida, 2013 19 / 21
Kernel de Linux G. Díaz (ULA) Planificador de Linux (Scheduler) Mérida, 2013 20 / 21
Kernel de Linux Kernel de Linux Se encuentra en el directorio de los códigos fuentes del kernel, en el directorio /usr/src/linux/kernel/sched/. Algunos de los archivos principales son: sched.c : Contiene el código del planificador genérico. Las políticas de gestión están implementadas en otros archivos. sched_fair.c : Contiene el código del planificador CFS y provee las politicas de planificación para los procesos Interactive y Batch. sched_rt.c : Provee las políticas usadas para los procesos Real Time. G. Díaz (ULA) Planificador de Linux (Scheduler) Mérida, 2013 21 / 21