Как отключить конкретное ядро процессора при загрузке?
У меня 16-ядерный процессор Intel Xeon, который успешно загружается в BIOS и GRUB, но не загружает Ubuntu (или любую другую операционную систему). Оказывается, что ядро № 14 является причиной всех проблем (обнаруженных после тестирования каждого отдельного ядра с помощью memtest86). В BIOS я могу настроить систему на работу только с 2 ядрами, и система работает в этой конфигурации. Но я хотел бы иметь возможность использовать 15 из 16 ядер. Есть ли способ отключить только ядро № 14 при загрузке?
1 ответ
Вы можете использовать возможности горячего подключения процессора для достижения своей цели. Вы можете загрузить процессоры 0-13, а затем добавить остальные (процессоры 15-27 и 29-31).
Все процессоры Xeon имеют гиперпоточность, поэтому я предполагаю, что вы имеете в виду 16 ядер по 2 потока на ядро, что в общей сложности составляет 32 процессора. Этот ответ написан и протестирован для 4-х ядерных процессоров, по два потока на ядро, где 2-е ядро плохое.
Во-первых, как sudo, отредактируйте /etc/default/grub и добавить максимальное время загрузки процессоров, maxcpus= , на ваш GRUB_CMDLINE_LINUX_DEFAULT линия. Пример для моей системы:
GRUB_CMDLINE_LINUX_DEFAULT="ipv6.disable=1 consoleblank=300 cpuidle_sysfs_switch cpuidle.governor=teo"
GRUB_CMDLINE_LINUX_DEFAULT="ipv6.disable=1 consoleblank=300 cpuidle_sysfs_switch cpuidle.governor=teo maxcpus=2"
Где я использовал maxcpus=2 вы бы использовали maxcpus=14 ,
Сначала сохраните копию grub и запустите sudo update-grub после. Таким образом, система будет загружаться только с использованием ядер 0 и 1, а в процессорах 0,1 он-лайн:
[email protected]:~$ grep . /sys/devices/system/cpu/cpu*/online /sys/devices/system/cpu/cpu1/online:1 /sys/devices/system/cpu/cpu2/online:0 /sys/devices/system/cpu/cpu3/online:0 /sys/devices/system/cpu/cpu4/online:0 /sys/devices/system/cpu/cpu5/online:0 /sys/devices/system/cpu/cpu6/online:0 /sys/devices/system/cpu/cpu7/online:0
Примечание. Для стандартных конфигураций ядра Ubuntu CPU 0 всегда подключен к сети, и такой вещи как:
[email protected]:~$ grep . /sys/devices/system/cpu/cpu0/online grep: /sys/devices/system/cpu/cpu0/online: No such file or directory
Хорошо, теперь подключите другие нужные ядра и процессоры:
[email protected]:~$ echo 1 | sudo tee /sys/devices/system/cpu/cpu3/online 1 [email protected]:~$ echo 1 | sudo tee /sys/devices/system/cpu/cpu4/online 1 [email protected]:~$ echo 1 | sudo tee /sys/devices/system/cpu/cpu5/online 1 do[email protected]:~$ echo 1 | sudo tee /sys/devices/system/cpu/cpu7/online
[email protected]:~$ grep . /sys/devices/system/cpu/cpu*/online /sys/devices/system/cpu/cpu1/online:1 /sys/devices/system/cpu/cpu2/online:0 /sys/devices/system/cpu/cpu3/online:1 /sys/devices/system/cpu/cpu4/online:1 /sys/devices/system/cpu/cpu5/online:1 /sys/devices/system/cpu/cpu6/online:0 /sys/devices/system/cpu/cpu7/online:1
Так что теперь у меня есть ядра 0,1,3 в режиме онлайн и ядро 2 в автономном режиме и 6 доступных процессоров. Обратите внимание, что ядро 0 = процессор 0 и 4, ядро 1 = процессор 1 и 5, .
РЕДАКТИРОВАТЬ 1: Для 32 процессоров, возможно, у вас есть несколько узлов (процессоров), поэтому отображение ядра на процессор может отличаться.
РЕДАКТИРОВАТЬ 2: Может случиться так, что процессоры, которые переводятся в оперативный режим после загрузки, по умолчанию используют регулятор производительности в драйвере масштабирования частоты процессора intel_pstate, который является конфигурацией ядра по умолчанию (которая изменяется на powersave 1 минуту после загрузки, для загрузка включена ЦП). Возможно, вы захотите проверить и настроить все регуляторы ЦП по своему усмотрению, как правило, регулятор энергосбережения. Для проверки сделайте:
grep . /sys/devices/system/cpu/cpu*/cpufreq/scaling_driver grep . /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
Чтобы сменить регулятор, например, (обратите внимание, что root):
# for file in /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor; do echo "powersave" > $file; done
Если у вас все работает так, как вы хотите, вы можете автоматизировать дополнительный онлайн после шага загрузки (см. Другие вопросы и ответы для «как»).
Примечание: мне кажется, что вы должны быть в состоянии достичь своей цели за один шаг загрузки с помощью манипуляции cpu_possible_mask с помощью Возможный_пус =n, но я не смог заставить ее работать. Кто-то еще может знать.
Отключить/включить ядра CPU в Linux
В Linix вы можете временно включить или отключить ядра процессора без перезагрузки с помощью консольной утилиты chcpu.
Выведите информацию о доступных ядрах:
CPU(s): 3 On-line CPU(s) list: 0-2
В этом примере для гостевой ОС на виртуальной машине Linux доступны три ядра 0, 1 и 2.
В Linux вы можете отключить любые ядра процессора, кроме нулевого (CPU0).
Чтобы отключить ядра 1 и 2, выполните команду:
CPU 1 disabled CPU 2 disabled
Проверьте теперь какие ядра доступны:
On-line CPU(s) list: 0 Off-line CPU(s) list: 1,2
Также можно вывести информацию о доступных процессорах так:
$ grep «processor» /proc/cpuinfo
Чтобы включить ядра процессора, выполните:
CPU 1 enabled CPU 2 enabled
Также вы можете отключить определенное ядро командой. В этом примере мы отключаем CPU1:
$ sudo echo 0 | sudo tee /sys/devices/system/cpu/cpu1/online
Проверьте сообщения в dmseg:
[ 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"
Вы можете использовать отключение ядер CPU в Linux, когда нужно уменьшить количество vCPU для виртуальной машины Linux и вы хотите протестировать, как работает операционная система и приложения с меньшим количеством доступных vCPU.
Также в Linux вы можете запускать приложения на определённых ядрах с помощью CPU affinity. Чтобы получить информацию о привязки определенного процесса к ядрам, выполните:
pid 894's current affinity mask: 3
pid 894's current affinity list: 0,1
Этому процессу разрешено выполняться на ядрах 0 и 1.
Чтобы разрешить запушенному процессу выполняться только на CPU0, выполните:
pid 894's current affinity list: 0,1 pid 894's new affinity list: 0
Или, чтобы разрешить процессу firefox использовать ядра с 0 по 3:
$ sudo taskset -c 0-3 firefox
Как быстро и просто отключить ядра процессора в Linux с помощью #chcpu
В Linux можно быстро и просто отключать и включать ядра процессора с помощью команды chcpu . Доступны 4 ядра с 0 по 3, можно выключить любое количество ядер, кроме нулевого.
Для отключения ядер используется команда chcpu -d , после которой указываются номера ядер, которые нужно отключить. Например, для отключения ядер 2 и 3, нужно использовать команду:
В результате выполнения этой команды, вы увидите сообщение “CPU 2 disabled” и “CPU 3 disabled”.
Чтобы проверить состояние ядер, используйте команду lscpu . Если вы отключили ядра, вы увидите сообщение “On-line CPU(s) list”, в котором указаны номера доступных ядер, и “Off-line CPU(s) list”, в котором указаны номера отключенных ядер. Например:
Отключение ядер может быть полезным для тестирования производительности виртуальных машин, а также для экономии ресурсов. Однако, не следует злоупотреблять этой функцией, так как это может привести к снижению производительности системы.
Для включения ядер используйте команду chcpu -e , после которой указываются номера ядер, которые нужно включить. Например, для включения ядер 2 и 3, нужно использовать команду:
Таким образом, команда chcpu позволяет быстро и просто управлять количеством ядер процессора в Linux. Это может быть полезно для управления ресурсами и тестирования производительности системы. Но не следует злоупотреблять отключением ядер, так как это может сильно снизить производительность системы и ухудшить ее работу.