2012-05-12 17 views
6

Estoy experimentando con SCHED_FIFO y estoy viendo un comportamiento inesperado. El servidor que estoy usando tiene 12 núcleos con hyper-threading deshabilitado. Todas las interrupciones configurables se han configurado para ejecutarse en la CPU 0.Uso práctico de las prioridades de programación en tiempo real de Linux (SCHED_FIFO y SCHED_RR)?

Mi programa inicia crea un subproceso para las tareas de menor prioridad utilizando la biblioteca pthreads sin cambiar la política de programación con afinidad de CPU establecida en el núcleo 0. El subproceso padre luego establece su CPU afinidad al núcleo 3 y su propia política de programación al SCHED_FIFO usando sched_setscheduler() con pid cero y prioridad 1 y luego comienza a ejecutar un bucle sin bloqueo.

El programa en sí funciona bien. Sin embargo, si intento iniciar sesión en el servidor por segunda vez mientras el programa se está ejecutando, el terminal no responde hasta que detenga mi programa. Es como si el planificador intentara ejecutar otros procesos en el mismo núcleo que el proceso en tiempo real.

  1. ¿Qué me falta?
  2. ¿El planificador aún intentará ejecutar otros procesos en un núcleo que ejecuta un proceso en tiempo real? Si es así, ¿hay alguna forma de prevenir esto?
  3. ¿La configuración de la política de planificación con sched_setscheduler() en el elemento principal cambia el comportamiento del elemento secundario creado anteriormente?

Gracias de antemano.

Respuesta

5

sched_setscheduler establece el planificador del proceso , no el hilo. Ver:

http://pubs.opengroup.org/onlinepubs/9699919799/functions/sched_setscheduler.html

Si desea configurar el planificador para un hilo, es necesario utilizar los pthread_attr_setschedpolicy y pthread_attr_setschedparam funciones en el objeto de atributo para el nuevo hilo antes de crearlo.

no estoy seguro de cómo conformes Linux es en honor a estos requisitos, pero al menos debe empezar por asegurarse de que su código es correcto a la especificación, y luego ajustar según sea necesario ...

+0

Gracias por la respuesta. Tiene razón, la documentación dice que sched_setscheduler() establece la política de programación para el proceso y no el hilo. Sin embargo, he realizado algunas pruebas utilizando ps después de leer esta respuesta y las políticas están configuradas correctamente para los hilos. Esto me llevó a ejecutar algunas pruebas adicionales. Uno de los problemas más notables es que un inicio de sesión lleva mucho tiempo cuando el programa se está ejecutando. Definitivamente parece que la sesión bash para el nuevo inicio de sesión se establece inicialmente en la CPU que ejecuta el proceso en tiempo real. – digby280

Cuestiones relacionadas