Как отключить конкретное ядро процессора при загрузке?
У меня 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 он-лайн:
doug@s15:~$ 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 всегда подключен к сети, и такой вещи как:
doug@s15:~$ grep . /sys/devices/system/cpu/cpu0/online
grep: /sys/devices/system/cpu/cpu0/online: No such file or directory
Хорошо, теперь подключите другие нужные ядра и процессоры:
doug@s15:~$ echo 1 | sudo tee /sys/devices/system/cpu/cpu3/online
1
doug@s15:~$ echo 1 | sudo tee /sys/devices/system/cpu/cpu4/online
1
doug@s15:~$ echo 1 | sudo tee /sys/devices/system/cpu/cpu5/online
1
doug@s15:~$ echo 1 | sudo tee /sys/devices/system/cpu/cpu7/online
И проверьте:
doug@s15:~$ 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, но я не смог заставить ее работать. Кто-то еще может знать.