Pregunta
¿Cuál es el procedimiento para deshabilitar/habilitar procesadores (sobre la marcha) en sistemas con multiprocesadores? ¿Cómo restringir el servidor a un número "N" de CPU solamente?
Respuesta
Hay tres formas de restringir el número de CPU en CentOS/RHEL.
- Uso del parámetro maxcpus (RHEL/CentOS 6)
- Utilizando el parámetro nr_cpus (RHEL/CentOS 6,7)
- Deshabilitar CPU en línea (RHEL/CentOS 6,7)
1. Usando el parámetro maxcpus
Este método funciona con sistemas RHEL/CentOS 6. Puede fallar si lo usa en sistemas RHEL/CentOS 7. Aunque en la versión más nueva del sistema RHEL 7, este error se ha solucionado.
Puede agregar el parámetro del kernel maxcpus=N en /boot/grub/grub.conf o a la línea del kernel en el momento del arranque. Por ejemplo, para limitar el uso del servidor a solo 2 CPU, use la siguiente entrada en el archivo
# vi /boot/grub/grub.conf ... title Red Hat Enterprise Linux Server (2.6.18-238.el5) root (hd0,0) kernel /vmlinuz-2.6.18-238.el5 ro root=/dev/VolGroup00/LogVol00 rhgb quiet maxcpus=3 initrd /initrd-2.6.18-238.el5.imgNOTA :No es posible deshabilitar CPU0 en sistemas Red Hat Enterprise Linux.
Cuando se usa maxcpus, tomará las CPU de todas las CPU físicas disponibles. Por ejemplo, en un sistema con dos CPU de doble núcleo, maxcpus=2 tomará una CPU de cada CPU física. Para conocer las ID de CPU físicas en uso:
# cat /sys/devices/system/cpu/cpu*/topology/physical_package_id
2. Usando el parámetro nr_cpus
Agregar parámetro de kernel nr_cpus=N en /boot/grub/grub.conf o a la línea del kernel en el momento del arranque. Por ejemplo, la siguiente entrada restringirá el servidor a solo 2 CPU.
# vi /boot/grub/grub.conf title Red Hat Enterprise Linux Server (2.6.18-238.el5) root (hd0,0) kernel /vmlinuz-2.6.18-238.el5 ro root=/dev/VolGroup00/LogVol00 rhgb quiet nr_cpus=2 initrd /initrd-2.6.18-238.el5.img
# cat /etc/default/grub GRUB_TIMEOUT=1 GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)" GRUB_DEFAULT=saved GRUB_DISABLE_SUBMENU=true GRUB_TERMINAL="serial console" GRUB_SERIAL_COMMAND="serial --speed=115200" GRUB_CMDLINE_LINUX="console=ttyS0,115200 console=tty0 vconsole.font=latarcyrheb-sun16 crashkernel=auto nr_cpus=2" GRUB_DISABLE_RECOVERY="true"
2. Usa el grub2-mkconfig comando para regenerar el /boot/grub2/grub.cfg archivo.
# grub2-mkconfig -o /boot/grub2/grub.cfg Generating grub configuration file ... Found linux image: /boot/vmlinuz-3.10.0-693.21.1.el7.x86_64 Found initrd image: /boot/initramfs-3.10.0-693.21.1.el7.x86_64.img Found linux image: /boot/vmlinuz-3.10.0-693.17.1.el7.x86_64 Found initrd image: /boot/initramfs-3.10.0-693.17.1.el7.x86_64.img Found linux image: /boot/vmlinuz-3.10.0-693.11.6.el7.x86_64 Found initrd image: /boot/initramfs-3.10.0-693.11.6.el7.x86_64.img Found linux image: /boot/vmlinuz-3.10.0-693.11.1.el7.x86_64 Found initrd image: /boot/initramfs-3.10.0-693.11.1.el7.x86_64.img Found linux image: /boot/vmlinuz-3.10.0-693.5.2.el7.x86_64 Found initrd image: /boot/initramfs-3.10.0-693.5.2.el7.x86_64.img Found linux image: /boot/vmlinuz-0-rescue-f9afeb75a5a382dce8269887a67fbf58 Found initrd image: /boot/initramfs-0-rescue-f9afeb75a5a382dce8269887a67fbf58.img done
3. Verifique la entrada del parámetro nr_cpu en el archivo de configuración de grub.
# grep linux16 /boot/grub2/grub.cfg linux16 /boot/vmlinuz-3.10.0-693.21.1.el7.x86_64 root=UUID=0f790447-ebef-4ca0-b229-d0aa1985d57f ro console=ttyS0,115200 console=tty0 vconsole.font=latarcyrheb-sun16 crashkernel=auto nr_cpus=2 ...
3. Deshabilitar CPU en línea
Deshabilitar núcleos de CPU >1. En tiempo de ejecución, es posible deshabilitar los núcleos de la CPU con los siguientes comandos. Por ejemplo, para un sistema de 4 núcleos, podemos deshabilitar 3 CPU como se muestra a continuación.
# echo 0 > /sys/devices/system/cpu/cpu3/online # echo 0 > /sys/devices/system/cpu/cpu2/online # echo 0 > /sys/devices/system/cpu/cpu1/online
2. Para verificar si deshabilitó 3 núcleos y se quedó con solo 1 núcleo habilitado, use el siguiente comando.
# grep "processor" /proc/cpuinfo processor : 0
Habilitar núcleos de CPU de nuevo >1. Los núcleos de la CPU se pueden reactivar nuevamente con el siguiente comando.
# echo 1 > /sys/devices/system/cpu/cpu3/online # echo 1 > /sys/devices/system/cpu/cpu2/online # echo 1 > /sys/devices/system/cpu/cpu1/online
2. Vuelva a verificar si hay 4 núcleos habilitados en /proc/cpuinfo.
# grep "processor" /proc/cpuinfo processor : 0 processor : 1 processor : 2 processor : 3NOTA :estas configuraciones no son persistentes al reiniciar.