c linux xen scheduled-tasks

En Linux SCHED_FIFO y SCHED_RR



xen scheduled-tasks (4)

Estoy escribiendo un daemon muy pequeño que debe seguir siendo receptivo incluso cuando un sistema está bajo un estrés severo. Estoy mirando las diferencias entre SCHED_FIFO y SCHED_RR con respecto a la programación, así como también tratando de determinar una prioridad sensata.

¿Qué programador sería apropiado para un daemon de monitoreo pequeño pero crítico, qué prioridad sería razonablemente segura? Todavía me estoy volviendo un poco confuso cuando trato de entender las diferencias entre los dos.

Mi programa se asigna por debajo de 3k (y usa mlockall ()), escribe unos 600 bytes para xenbus y luego duerme, pero es imposible para mí decir cuánto tiempo (en ms) se tardará realmente en escribir los datos ... ya que está escrito depende de un archivo de configuración.

Gracias de antemano por cualquier sugerencia / explicación.


No soy un experto en esquemas de programación, pero eche un vistazo a

man sched_setscheduler

detalla la diferencia entre los diferentes algoritmos de programación y proporciona enlaces a otras funciones de programación. SCHED_FIFO realmente suena bastante peligroso, pero se describe como la programación más agresiva:

Un proceso SCHED_FIFO se ejecuta hasta que es bloqueado por una solicitud de E / S, es reemplazado por un proceso de prioridad más alta o llama a sched_yield (2).

Tenga cuidado de no bloquear su sistema. Yo personalmente haría algunas pruebas empíricas para ver qué prioridad encaja mejor y cómo se comportan exactamente.


El infame programa pchdtvr , que captura señales de televisión digital, usa SCHED_FIFO para asegurarse de que los paquetes de TV se escriban en el disco SCHED_FIFO que SCHED_FIFO . Puede capturar 4 espectáculos a la vez mientras reproduce Doom en una computadora vieja.

El programa es infame porque fue lanzado bajo GPL y el autor intentó revocar la GPL retroactivamente . Este acto provocó una pequeña tormenta de fuego. De todos modos, puede encontrar una versión reciente para estudiar en http://frequal.com/pmn/pchdtvr.html .


Si todas sus otras tareas usan el planificador estándar, no hace ninguna diferencia; SCHED_FIFO y SCHED_RR solo afectan la programación de estas tareas entre sí.

Entonces en un sistema normal no hace diferencia. FIFO es más fácil de entender, así que use eso, supongo.

Si tiene varias tareas de diferentes prioridades, solo la más alta se ejecutará si están listas para ejecutarse (y solo hay un núcleo de CPU)


SCHED_FIFO no puede ser reemplazado (el contexto cambió a otro proceso) a menos que otro proceso de mayor prioridad aparezca en la cola de ejecución.

SCHED_RR puede ser reemplazado por una cantidad de tiempo (retraso otorgado a un proceso para ejecutar).

Ambas son prioridades "en tiempo real" de los planificadores basados ​​en Linux.