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 ( Ay 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, Cobtiene el 66% de la CPU mientras se divide Ay el B33%. Si mato Centonces Ay Bobtengo el 50% cada uno (como se esperaba).
¿Por qué Cobtiene el 66%? Hubiera esperado 33% cada uno en este escenario, o quizás 50% (C), 25% (A) y 25% (B). Sin Cembargo, el 66% que va no funciona, no importa cómo haga los cálculos.
En general, quiero entender cómo los procesos iniciados sin cgexecinteractuar con los procesos iniciados cgexeccuando se trata de compartir recursos (CPU en particular, pero se agradecería una respuesta más general si no es demasiado complejo).

topy creo que se iniciaron simplemente desde un símbolo del sistema:cgexec -g cpu:foo myprogramy./myprogram. Ha pasado un tiempo, así que no recuerdo con certeza.cpu.shareses una opción de configuración muy peculiar; Recomiendo dividir las cosas por CPU si es posible usando en sucpuset.cpuslugar.Respuestas:
Los grupos C son jerárquicos y todos los subprocesos los heredan. Por lo tanto, todos los procesos deben estar en algún cgroup. Por defecto, es el cgroup raíz y, por defecto, tiene 1024 recursos compartidos, que es el doble que A y B en su ejemplo.
El tiempo de CPU se comparte entre los grupos de acuerdo con el peso asignado a ellos en cpu.shares.
Si A tuviera 1024 acciones y B 512 y C 256 y D 256, la distribución de tiempo de la CPU sería A - 50%, B - 25%, C y D 12,5%.
fuente
cgexec. Por lo tanto, el nocgexecproceso obtendría el 50% y los procesos agrupados compartirían el 50% restante. Dentro de los procesos agrupados, comparten su 50% de manera uniforme, lo que significa que ambos obtienen el 25%. Esto tendría sentido, pero no es el comportamiento que observé. Lo que vi es 66%, 33% y 33%. ¿Puedes actualizar la respuesta para incluir más detalles y quizás una distribución de ejemplo?cgexecobtener 1024 recursos compartidos Cualquier proceso iniciado concgexecobtiene los recursos compartidos especificados. Entonces, en este caso, un proceso obtiene 1024 acciones y los otros dos obtienen 512 cada uno, lo que resulta en la distribución que vi. ¿Le importaría actualizar su respuesta para dar un poco más de claridad, por ejemplo, con un ejemplo?1024 + 512 + 512 = 2048.512/2048 == 25%. No creo que esta respuesta sea correcta, al menos no en la superficie.