Decirle al kernel de Linux * no * que use ciertas CPU

8

Estoy tratando de ejecutar algunos puntos de referencia en una máquina multinúcleo y me gustaría decirle al kernel de Linux que simplemente evite ciertos núcleos a menos que se indique explícitamente que los use.

La idea es que podría dejar de lado un puñado de núcleos (la máquina tiene 6 núcleos físicos) para la evaluación comparativa y usar la máscara de CPU para permitir solo procesos de evaluación comparativa en los núcleos dados.

¿Es esto factible?

Lajos Nagy
fuente
¿Cuáles son los puntos de referencia reales que desea ejecutar?
Basile Starynkevitch
Relacionado: Usar solo un núcleo de CPU
ilkkachu

Respuestas:

5

Puede aislar algunos núcleos de CPU de la programación del kernel usando el isolcpusparámetro. Agregue este parámetro a su grub.conf y reinicie para que surta efecto.

VenkatC
fuente
2
El enlace está muerto. Podría ser mejor incluir un ejemplo directamente en la respuesta.
pchaigno
4

Desea cierta afinidad de procesador (o afinidad de CPU ).

El syscall relevante es sched_setaffinity (2) , pero debe usarlo a través de pthread_set_affinity_np (3) si desea codificar sus puntos de referencia para eso.

El comando relacionado es el conjunto de tareas (1) y puede usarlo en los comandos que desea comparar (o en su shell).

Si es posible, tenga cuidado de que la máquina no se cargue mucho por otras tareas no relacionadas con el punto de referencia.

Alternativamente, use un hipervisor como Xen y arranque su Linux como un SO huésped para ese hipervisor. Luego configure xenpara usar solo un conjunto restringido de núcleos de CPU (no sé los detalles exactos, debe averiguarlo). En Debian (y relacionados) distribuciones, es posible instalar paquetes como xen-linux-system-amd64, xen-hypervisor-amd64, xen-utilsetc (estoy usando en Debian / Sid xen-hypervisor-4.5-amd64, xen-linux-system-4.0.0-1-amd64, xen-utils-4.5 etc ...).

Puede haber alguna forma de configurar (quizás en el momento de la compilación del núcleo, o pasando argumentos específicos al núcleo a través del cargador Grub) su núcleo Linux para restringir la cantidad de núcleos utilizables.

Por supuesto, es mejor, cuando la evaluación comparativa de algún programa -por ejemplo en un escritorio Linux en PC, para cuidar para evitar tener muchos procesos fuera de funcionamiento (uso ps auxw, pstree -p, topencontrar estos). Al menos, cierre y cierre la mayoría de las aplicaciones interactivas (navegador como Firefox, correo electrónico, editor, IDEs como Eclipse) y mantenga solo un pequeño número de terminales como punto de referencia. Incluso puede realizar una evaluación comparativa en modo por lotes (utilizando batcho atpara ejecutar las evaluaciones comparativas) mientras ni siquiera ha iniciado sesión (por lo que no tiene ninguna sesión de GUI al estilo Gnome o KDE o Xfce , etc.).

Basile Starynkevitch
fuente
Establecer la afinidad de las tareas como punto de referencia no es suficiente. También debes mantener alejadas otras tareas. Lo que hace su sugerencia de hipervisor, pero de una manera muy dura.
Gilles 'SO- deja de ser malvado'
@Gilles: ¿por qué es necesario mantener otras tareas alejadas para fines de evaluación comparativa? En la práctica, cuando se realiza una evaluación comparativa, la PC a menudo está bastante inactiva ... ¡Para un servidor costoso las cosas son diferentes!
Basile Starynkevitch
Por ejemplo, porque está haciendo una evaluación comparativa en su PC de escritorio que también está gastando recursos en Firefox, Eclipse y otras tareas muy exigentes.
Gilles 'SO- deja de ser malvado'
En su propia PC de escritorio, puede detener fácilmente las tareas más consumidoras (por ejemplo, cerrar y salir de Firefox y eclipse) mientras realiza la evaluación comparativa. Incluso podría ejecutar los puntos de referencia en modo por lotes (usando ato batch) mientras no esté conectado (por lo tanto, no ejecute ninguna sesión de consumo).
Basile Starynkevitch