Как отключить конкретное ядро ​​процессора при загрузке?

У меня 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, но я не смог заставить ее работать. Кто-то еще может знать.

Другие вопросы по тегам