Para comenzar, estoy usando Debian Wheezy con el kernel 3.2 en un chipset AMD64. Mi máquina tiene dos núcleos Xeon E5-2690. Configuré los parámetros de arranque para que todos los núcleos en una CPU estén dedicados a un solo proceso. Para hacer esto, he configurado isolcpus = 8,9,10,11,12,13,14,15 en grub.
Hasta aquí todo bien. Ahora digamos que quiero usar las CPU aisladas para un comando dado, para ser simple, solo usaré un bucle infinito simple:
$ taskset -c 8-15 bash -c 'mientras es verdadero; do echo hola> / dev / null; hecho' &
Hasta ahora todo bien, la parte superior muestra que el núcleo 8 gira hasta casi el 100% de utilización. Ahora digamos que vuelvo a ejecutar ese comando:
$ taskset -c 8-15 bash -c 'mientras es verdadero; do echo hola> / dev / null; hecho' &
Ahora la parte superior muestra que los núcleos 9-15 permanecen inactivos y los dos procesos comparten el núcleo 8. Si, en cambio, hago esto:
$ taskset -c 8 bash -c 'mientras es verdadero; do echo hola> / dev / null; hecho' &
$ taskset -c 9 bash -c 'mientras es verdadero; do echo hola> / dev / null; hecho' &
Los núcleos 8 y 9 obtienen el 100% de utilización como deberían. Esto solo se aplica a isolcpus porque el mismo conjunto de tareas con los núcleos 1-7 distribuye correctamente los procesos sobre los núcleos relevantes. Además, "taskset -p" muestra que la máscara de afinidad para los procesos 8-15 está configurada correctamente. Parece que el planificador del kernel se niega a usar cualquier cosa que no sea el núcleo más bajo especificado en una máscara de afinidad isolcpus.
Ahora, normalmente esto no sería un gran problema con mis ejemplos anteriores, solo especifique núcleos individuales para cada proceso. Sin embargo, quiero ejecutar una aplicación altamente multiproceso en la CPU dedicada. Quiero especificar el conjunto principal y hacer que el grupo de subprocesos lo use automáticamente, sin tener que restablecer individualmente la afinidad del procesador para cada subproceso individual que se genera.
¿Alguien tiene alguna idea de cómo hacer que el planificador me proporcione más de un núcleo del conjunto isolcpu?