В Linix вы можете временно включить или отключить ядра процессора без перезагрузки с помощью консольной утилиты chcpu.
Выведите информацию о доступных ядрах:
$ lscpu
CPU(s): 3 On-line CPU(s) list: 0-2
В этом примере для гостевой ОС на виртуальной машине Linux доступны три ядра 0, 1 и 2.
В Linux вы можете отключить любые ядра процессора, кроме нулевого (CPU0).
Чтобы отключить ядра 1 и 2, выполните команду:
$ sudo chcpu -d 1,2
CPU 1 disabled CPU 2 disabled
Проверьте теперь какие ядра доступны:
$ lscpu | grep list
On-line CPU(s) list: 0 Off-line CPU(s) list: 1,2
Также можно вывести информацию о доступных процессорах так:
$ grep "processor" /proc/cpuinfo
Чтобы включить ядра процессора, выполните:
$ sudo chcpu –e 1,2
CPU 1 enabled CPU 2 enabled
Также вы можете отключить определенное ядро командой. В этом примере мы отключаем CPU1:
$ sudo echo 0 | sudo tee /sys/devices/system/cpu/cpu1/online
Проверьте сообщения в dmseg:
$ sudo dmesg
[ 2257.253801] smpboot: CPU 1 is now offline
Чтобы включить его, выполните:
$ sudo echo 1 | sudo tee /sys/devices/system/cpu/cpu1/online
Если вы хотите, чтобы Linux всегда загружалась с меньшим количество доступных ядер, нужно настроить параметр ядра maxcpus=N.
N в этом случае – это количество доступных ядер процессора, доступных в Linux.
$ sudo mcedit /etc/default/grub
Измените строку следующим образом:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash maxcpu=2"
Обновите Grub.
$ sudo update-grub
Вы можете использовать отключение ядер CPU в Linux, когда нужно уменьшить количество vCPU для виртуальной машины Linux и вы хотите протестировать, как работает операционная система и приложения с меньшим количеством доступных vCPU.
Также в Linux вы можете запускать приложения на определённых ядрах с помощью CPU affinity. Чтобы получить информацию о привязки определенного процесса к ядрам, выполните:
$ taskset -p 894
pid 894's current affinity mask: 3
$ taskset -cp 894
pid 894's current affinity list: 0,1
Этому процессу разрешено выполняться на ядрах 0 и 1.
Чтобы разрешить запушенному процессу выполняться только на CPU0, выполните:
$ sudo taskset -cp 0 894
pid 894's current affinity list: 0,1 pid 894's new affinity list: 0
Или, чтобы разрешить процессу firefox использовать ядра с 0 по 3:
$ sudo taskset -c 0-3 firefox