Pregunta

Estoy escribiendo un demonio muy pequeño que debe seguir respondiendo incluso cuando un sistema está bajo una gran presión. Estoy viendo las diferencias entre SCHED_FIFO y SCHED_RR en lo que respecta a la programación, así como tratando de determinar una prioridad razonable.

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

Mi programa está asignando menos de 3k (y usa mlockall ()), escribe unos 600 bytes al xenbus y luego se duerme, pero es imposible para mí saber cuánto tiempo (en ms) tomará para escribir los datos. .por lo que se escribe depende de un archivo de configuración.

Gracias de antemano por cualquier sugerencia / explicación.

¿Fue útil?

Solución

El infame programa pchdtvr , que captura señales digitales de TV, usa SCHED_FIFO para asegurarse de que los paquetes de TV se escriban en el disco sin importar nada. Puede capturar 4 programas a la vez mientras reproduce Doom en una computadora vieja.

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

Otros consejos

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

SCHED_RR puede ser precedido por un cuanto de tiempo (demora dada a un proceso a ejecutar).

Ambos son " en tiempo real " prioridades de los programadores basados ??en Linux.

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

man sched_setscheduler

detalla cuál es la diferencia entre los diferentes algoritmos de programación y proporciona enlaces a otras funciones de programación. SCHED_FIFO en realidad 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 mayor prioridad o llama a sched_yield (2).

Ten cuidado de no bloquear tu sistema. Personalmente haría algunas pruebas empíricas para ver qué prioridad se ajusta mejor a las personas y cómo se comportan exactamente.

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

Así que en un sistema normal no hay diferencia. FIFO es el más fácil de entender, así que supongo.

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top