How to Enable/Disable CPUs (Limiting CPU count) in CentOS / RHEL?

There are three ways to restrict number of CPU’s in CentOS/RHEL.

 

  • Using maxcpus parameter (RHEL/CentOS 6)
  • Using nr_cpus parameter (RHEL/CentOS 6,7)
  • Disabling CPU Online (RHEL/CentOS 6,7)

 

1. Using maxcpus parameter

 

This method works with RHEL/CentOS 6 systems. It may fail if you use it in RHEL/CentOS 7 systems. Although in newer version of RHEL 7 system this bug has been fixed.

 

You can add the kernel parameter maxcpus=N in /boot/grub/grub.conf or to the kernel line at boot time. For example to limit the server to use only 2 CPU’s use the below entry in the 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.img

 

NOTE:

It is not possible to disable CPU0 on Red Hat Enterprise Linux systems.

 

When maxcpus is used, it will take the CPUs from all the available physical CPUs. For example on a system with two dual core CPUs, maxcpus=2 will take one CPU from each physical CPUs. To know the physical CPU IDs in use:

# cat /sys/devices/system/cpu/cpu*/topology/physical_package_id 

 

2. Using nr_cpus parameter

 

a. For CentOS/RHEL 6

 

Add kernel parameter nr_cpus=N in /boot/grub/grub.conf or to the kernel line at boot time. For example, Below entry will restrict server to only 2 CPU’s.

# 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 

 

b. For CentOS/RHEL 7

 

1. For RHEL 7 systems add the nr_cpus=N parameter to the “GRUB_CMDLINE_LINUX” line in “/etc/sysconfig/grub” as shown below.

# 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. Use the grub2-mkconfig command to regenrate the /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. Verify the entry of the nr_cpu parameter in the grub configuration file.

# 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. Disabling CPU Online

 

Disabling CPU cores

 

1. At runtime it is possible to disable cpu cores with the following commands. For example for a 4 core system, we can disable 3 CPUs as shown below.

 # 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. To verify if you have disable 3 cores and left with only 1 core enabled, use the below command.

# grep "processor" /proc/cpuinfo
processor	: 0 

 

Enabling CPU cores back

1. The cpu cores can be reactivated again by below command.

# 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. Verify again for 4 core enabled cores in /proc/cpuinfo.

# grep "processor" /proc/cpuinfo
 processor       : 0
 processor       : 1
 processor       : 2
 processor       : 3 

 

NOTE:

These settings are not persistent across reboot.

Was this answer helpful? 0 Users Found This Useful (0 Votes)