deshabilitar los núcleos de la CPU en el procesador de cuatro núcleos en Linux

14

Quiero deshabilitar 3 núcleos de CPU y ejecutar mi procesador en un solo núcleo. Tengo comando utilizado: maxcpus=1. Pero después de esto ejecuté este comando ls /sys/devices/system/cpu. Aún se nota cpu0,cpu1,cpu2,cpu3.

También probé: echo 0 > /sys/devices/system/cpu3/onlinepero me sale el siguiente error: no such file or directory.

usuario3818847
fuente
¿No está claro dónde pones el maxcpus=1 comando ? ¿Pusiste esa cadena grub.cfgcomo una opción de arranque? (Actualice su pregunta en lugar de responderla en los comentarios).
Anthon
Estoy usando la placa sabreauto IMes6 de freescale en el sistema operativo Linux. Ejecuté el comando en un emulador de terminal "gtkterm"
user3818847
Con este comando echo 0> / sys / devices / system / cpu3 / online, puedo ver el apagado de cpu3. Ahora lo que quiero saber es, debería reiniciar el sistema para que los cambios en el efecto o puedo continuar sin reiniciar
user3818847
AFAIK debe especificar maxcpus = 1 como parámetro para el núcleo (es decir, cuando está en grub). Edite '/ etc / defaults / grub' para agregarlo a los parámetros del núcleo, ejecute 'update-grub' y reinicie. Eso hará que las cosas sean persistentes, es decir, con solo una CPU en el inicio de Linux.
Anthon
2
@ user3818847 ¿qué distribución estás usando? La modificación de los parámetros de arranque (para pasar maxcpus=1) varía según la distribución. Además, la /sysruta que tiene es simplemente la incorrecta, la ruta correcta es /sys/devices/system/cpu/cpu3/online.
Patrick

Respuestas:

28

Como Patrick ha indicado en un comentario , entendiste /sysmal el camino .

echo 0 > /sys/devices/system/cpu/cpu3/online

Si desea apagar todas las CPU excepto cpu0:

for x in /sys/devices/system/cpu/cpu[1-9]*/online; do
  echo 0 >"$x"
done

Escribir maxcpus=1en un indicador de comandos de shell no tiene ningún efecto. Más precisamente, establece la variable maxcpusal valor 1en ese shell, que no tiene ningún otro efecto. Puede establecer el número de CPU en el momento del arranque pasando maxcpuscomo parámetro del núcleo . Para eso, debe cambiar la configuración del cargador de arranque (por ejemplo, para cambiar la línea de comando del núcleo en U-Boot).

Gilles 'SO- deja de ser malvado'
fuente
Gracias por las sugerencias. Funcionó con el comando sugerido por usted
usuario3818847
Esto es al menos algo específico del núcleo. Estoy ejecutando kernel 3.6.6, y no hay tales archivos; en su lugar, usa los archivos individuales /sys/devices/system/cpu/onliney ./offlinepara controlar todos los núcleos.
Daniel Griscom
@Gilles: ¿hay alguna manera de saber cuánto tiempo se tarda en encender corey apagar?
Chetan Arvind Patil
@ChetanArvindPatil Time it. Creo que el tiempo estaría dominado por el acceso a RAM si el código involucrado no está ya en el caché L2 y en el momento en que apague el núcleo de lo contrario, pero depende mucho de la CPU y el sistema operativo.
Gilles 'SO- deja de ser malvado'
1
@Xofo Cuando el kernel apaga un núcleo, ese núcleo está ejecutando el código del núcleo, por lo que no hay hilos programados en ese núcleo en particular en ese momento. Después de que el núcleo está apagado, los subprocesos ya no están programados en ese núcleo. No sé qué sucede si la afinidad de un hilo lo restringe a un conjunto de núcleos que están todos apagados.
Gilles 'SO- deja de ser malvado'
1

no necesariamente apaga o deshabilita los núcleos.

que usaría cpusets y taskset

http://man7.org/linux/man-pages/man7/cpuset.7.html

Un cpuset define una lista de CPU y nodos de memoria ...

El sistema de archivos cpuset es una interfaz de pseudo-sistema de archivos para el mecanismo cpuset del núcleo, que se utiliza para controlar la ubicación del procesador y la ubicación de la memoria de los procesos. Se suele montar en / dev / cpuset.

En los sistemas con núcleos compilados con soporte integrado para cpusets, todos los procesos están conectados a un cpuset, y los cpusets siempre están presentes. Si un sistema admite cpusets, tendrá la entrada nodev cpuset en el archivo / proc / filesystems. Al montar el sistema de archivos cpuset (consulte la sección EJEMPLO a continuación), el administrador puede configurar los cpusets en un sistema para controlar el procesador y la ubicación de la memoria de los procesos en ese sistema. De manera predeterminada, si la configuración de cpuset en un sistema no se modifica o si el sistema de archivos cpuset ni siquiera está montado, entonces el mecanismo cpuset, aunque está presente, no tiene ningún efecto sobre el comportamiento del sistema.

Las CPU de un sistema incluyen todas las unidades de procesamiento lógico en las que se puede ejecutar un proceso, incluidos, si están presentes, múltiples núcleos de procesador dentro de un paquete e Hyper-Threads dentro de un núcleo de procesador. Los nodos de memoria incluyen todos los bancos distintos de memoria principal; Los sistemas pequeños y SMP generalmente tienen un solo nodo de memoria que contiene toda la memoria principal del sistema, mientras que los sistemas NUMA (acceso de memoria no uniforme) tienen múltiples nodos de memoria.

En resumen, si tiene 1 CPU con 6 núcleos, configuraría cpusets e iniciaría su proceso en un cpuset que está configurado en un solo núcleo, por ejemplo, core # 3. Si se tratara de un proceso paralelo, todo se limitaría a ese núcleo, de modo que si iniciara 4 procesos en un cpuset determinado con un solo núcleo definido, cada uno de los 4 procesos obtendría un 25% de utilización de CPU en el núcleo # 3.

Partiendo de eso, lo que generalmente sucede es que un cpuset está configurado de tal manera que

  • en un sistema de más de 200 núcleos, por ejemplo, cpusetA son núcleos 0..60 donde sea que se encuentren, cpusetB son núcleos 61..70; cpusetC es núcleos 71..80; y así sucesivamente, sin embargo, un administrador / arquitecto elige configurar.
  • cpusetA se asigna a ciertos usuarios y / o programas de software específicos; cpusetB se asigna a diferentes usuarios / programas; y así.
  • un usuario inicia un trabajo (proceso) que solicitaría N núcleos ... dentro de un cpuset dado, y ahora esos procesos múltiples (paralelos) están confinados a ese cpuset dado. Y para aquellos N paralelos confinados a un cpuset dado, cada uno de esos procesos debería / debería hacer uso de la afinidad del procesador o la afinidad de la CPU para que esos procesos paralelos no se agiten en diferentes núcleos dentro del cpuset.

también: https://linux.die.net/man/1/taskset

ron
fuente