Domanda
Qual è la procedura per disabilitare/abilitare i processori (al volo) su sistemi con multiprocessori? Come limitare il server a un numero "N" di sole CPU?
Risposta
Esistono tre modi per limitare il numero di CPU in CentOS/RHEL.
- Utilizzo del parametro maxcpus (RHEL/CentOS 6)
- Utilizzo del parametro nr_cpus (RHEL/CentOS 6,7)
- Disabilitazione della CPU in linea (RHEL/CentOS 6,7)
1. Utilizzo del parametro maxcpus
Questo metodo funziona con i sistemi RHEL/CentOS 6. Potrebbe non riuscire se lo utilizzi nei sistemi RHEL/CentOS 7. Sebbene nella versione più recente del sistema RHEL 7 questo bug sia stato corretto.
Puoi aggiungere il parametro del kernel maxcpus=N in /boot/grub/grub.conf o alla riga del kernel al momento dell'avvio. Ad esempio, per limitare il server a utilizzare solo 2 CPU, utilizzare la voce seguente nel file
# 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 :Non è possibile disabilitare CPU0 sui sistemi Red Hat Enterprise Linux.
Quando viene utilizzato maxcpus, prenderà le CPU da tutte le CPU fisiche disponibili. Ad esempio su un sistema con due CPU dual core, maxcpus=2 prenderà una CPU da ciascuna CPU fisica. Per conoscere gli ID fisici della CPU in uso:
# cat /sys/devices/system/cpu/cpu*/topology/physical_package_id
2. Utilizzo del parametro nr_cpus
a. Per CentOS/RHEL 6
Aggiungi parametro kernel nr_cpus=N in /boot/grub/grub.conf o alla riga del kernel al momento dell'avvio. Ad esempio, la voce Sotto restringerà il server a sole 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
1. Per i sistemi RHEL 7 aggiungere nr_cpus=N parametro a "GRUB_CMDLINE_LINUX ” in “/etc/sysconfig/grub ” come mostrato di seguito.
# 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 grub2-mkconfig comando per rigenerare il /boot/grub2/grub.cfg file.
# 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. Verificare l'immissione del parametro nr_cpu nel file di configurazione di 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. Disabilitazione della CPU in linea
Disattivazione dei core della CPU
1. A runtime è possibile disabilitare i core della cpu con i seguenti comandi. Ad esempio per un sistema a 4 core, possiamo disabilitare 3 CPU come mostrato di seguito.
# 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. Per verificare se hai disabilitato 3 core e ne hai lasciato solo 1 abilitato, usa il comando seguente.
# grep "processor" /proc/cpuinfo processor : 0
Riabilitazione dei core della CPU
1. I core della CPU possono essere riattivati nuovamente con il comando seguente.
# 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. Verifica di nuovo per 4 core abilitati core in /proc/cpuinfo.
# grep "processor" /proc/cpuinfo processor : 0 processor : 1 processor : 2 processor : 3NOTA :queste impostazioni non sono persistenti durante il riavvio.