Estoy tratando de ejecutar puntos de referencia de subprocesos múltiples en un conjunto de CPU aisladas. Para abreviar una larga historia, inicialmente intenté con isolcpus
y taskset
, pero tuve problemas . Ahora estoy jugando con cgroups / csets.
Creo que el cset shield
caso de uso "simple" debería funcionar bien. Tengo 4 núcleos, por lo que me gustaría usar los núcleos 1-3 para la evaluación comparativa (también configuré estos núcleos para que estén en modo de ticks adaptativos), luego el núcleo 0 se puede usar para todo lo demás.
Siguiendo el tutorial aquí , debería ser tan simple como:
$ sudo cset shield -c 1-3
cset: --> shielding modified with:
cset: "system" cpuset of CPUSPEC(0) with 105 tasks running
cset: "user" cpuset of CPUSPEC(1-3) with 0 tasks running
Así que ahora tenemos un "escudo" que está aislado (el cset de usuario) y el núcleo 0 es para todo lo demás (el cset del sistema).
Muy bien, se ve bien hasta ahora. Ahora echemos un vistazo htop
. Todos los procesos deberían haberse migrado a la CPU 0:
¿Eh? Algunos de los procesos se muestran como ejecutados en los núcleos blindados. Para descartar el caso de que htop tiene un error, también intenté usar taskset
para inspeccionar la máscara de afinidad de un proceso que se muestra como en el escudo.
¿Quizás esas tareas eran inamovibles? Arranquemos un proceso arbitrario que se muestra como ejecutándose en la CPU3 (que debería estar en el escudo) htop
y veamos si aparece en el cgroup del sistema de acuerdo con cset
:
$ cset shield -u -v | grep 864
root 864 1 Soth [gmain]
vext01 2412 2274 Soth grep 864
Sí, eso se está ejecutando en el cgroup del sistema de acuerdo con cset
. Entonces htop
y cset
no estoy de acuerdo.
Entonces, ¿qué está pasando aquí? ¿En quién confío: afinidades de la CPU ( htop
/ taskset
) o cset
?
Sospecho que se supone que no debes usar cset
y afinidades juntos. Quizás el escudo esté funcionando bien, y debería ignorar las máscaras de afinidad y la htop
salida. De cualquier manera, esto me parece confuso. ¿Alguien puede arrojar algo de luz?
numactl
y la cgconfig
e cgrules
/ cgred
a racionalizar lo que está haciendo. Estos pueden estar disponibles para Debian con algo de trabajo.