Tengo 3 procesos en una máquina de un solo núcleo. Cada proceso es exactamente el mismo y quema la CPU tan rápido como puede (circuito cerrado). Dos de ellos ( A
y B
) se lanzan con cgexec en grupos separados con acciones establecidas en 512 y 512. El tercero ( C
) se lanza regularmente, no con cgexec.
Una vez que todo está en funcionamiento, C
obtiene el 66% de la CPU mientras se divide A
y el B
33%. Si mato C
entonces A
y B
obtengo el 50% cada uno (como se esperaba).
¿Por qué C
obtiene el 66%? Hubiera esperado 33% cada uno en este escenario, o quizás 50% (C), 25% (A) y 25% (B). Sin C
embargo, el 66% que va no funciona, no importa cómo haga los cálculos.
En general, quiero entender cómo los procesos iniciados sin cgexec
interactuar con los procesos iniciados cgexec
cuando se trata de compartir recursos (CPU en particular, pero se agradecería una respuesta más general si no es demasiado complejo).
top
y creo que se iniciaron simplemente desde un símbolo del sistema: cgexec -g cpu:foo myprogram
y ./myprogram
. Ha pasado un tiempo, así que no recuerdo con certeza.
cpu.shares
es una opción de configuración muy peculiar; Recomiendo dividir las cosas por CPU si es posible usando en su cpuset.cpus
lugar.