отключение процессорных ядер на четырехъядерном процессоре в Linux


14

Я хочу отключить 3 ядра процессора и запустить свой процессор на одном ядре. Я использовал команду: maxcpus=1. Но после этого я выполнил эту команду ls /sys/devices/system/cpu. Это все еще показывает cpu0,cpu1,cpu2,cpu3.

Я также попытался: echo 0 > /sys/devices/system/cpu3/onlineно я получаю следующее сообщение об ошибке: no such file or directory.


Неясно, куда вы положили maxcpus=1 комманду ? Вы поместили эту строку в grub.cfgкачестве параметра загрузки? (Пожалуйста, обновите свой вопрос вместо того, чтобы отвечать в комментариях).
Антон

Я использую плату freescale IMx6 sabreauto на ОС Linux. Я выполнил команду на эмуляторе терминала "gtkterm"
user3818847

С помощью этой команды echo 0> / sys / devices / system / cpu3 / online я вижу отключение cpu3. Теперь я хочу знать, должен ли я перезагрузить систему, чтобы изменения вступили в силу, или я могу продолжить без перезагрузки
user3818847

AFAIK, вы должны указать maxcpus = 1 в качестве параметра для ядра (т.е. когда вы находитесь в grub). Отредактируйте / etc / defaults / grub, чтобы добавить его к параметрам ядра, запустите update-grub и перезагрузите компьютер. Это сделает вещи постоянными, то есть при запуске Linux будет только один процессор.
Энтон

2
@ user3818847 какой дистрибутив ты используешь? Изменение параметров загрузки (для передачи maxcpus=1) зависит от дистрибутива. Также у /sysвас просто неправильный путь, правильный путь /sys/devices/system/cpu/cpu3/online.
Патрик

Ответы:


28

Как указал Патрик в комментарии , вы /sysошиблись.

echo 0 > /sys/devices/system/cpu/cpu3/online

Если вы хотите выключить все процессоры, кроме cpu0:

for x in /sys/devices/system/cpu/cpu[1-9]*/online; do
  echo 0 >"$x"
done

Ввод maxcpus=1в приглашении оболочки не имеет никакого эффекта. Точнее, она устанавливает переменную maxcpusна значение 1в этой оболочке, которая не имеет никакого другого эффекта. Вы можете установить количество процессоров во время загрузки, передавая в maxcpusкачестве параметра ядра . Для этого вам нужно изменить конфигурацию вашего загрузчика (например, изменить командную строку ядра в U-Boot).


Спасибо за предложения. Это работало с предложенной вами командой
user3818847

Это, по крайней мере, несколько специфично для ядра. Я использую ядро ​​3.6.6, и таких файлов нет; вместо этого вы используете один файл /sys/devices/system/cpu/onlineи ./offlineфайлы для управления всеми ядрами.
Даниэль Гриском,

@ Жиль - Есть ли способ узнать, сколько времени требуется, чтобы включить coreи выключить?
Четан Арвинд Патил

@ChetanArvindPatil Время это. Я думаю, что время будет зависеть от доступа к ОЗУ, если соответствующий код еще не находится в кеше L2, и к тому времени, чтобы отключить ядро, но это очень сильно зависит от процессора и ОС.
Жиль "ТАК ... перестать быть злым"

1
@Xofo Когда ядро ​​отключает ядро, на этом ядре выполняется код ядра, поэтому на данный момент на этом конкретном ядре не запланирован поток. После выключения ядра потоки на этом ядре больше не планируются. Я не знаю, что произойдет, если сродство потока ограничит его набором ядер, которые все отключены.
Жиль "ТАК - перестань быть злым"

1

Вы не обязательно выключаете или отключаете ядра.

вы бы использовали процессоры и набор задач

http://man7.org/linux/man-pages/man7/cpuset.7.html

Процессор определяет список процессоров и узлов памяти ...

Файловая система cpuset представляет собой интерфейс псевдофайловой системы к механизму cpuset ядра, который используется для управления размещением процессора и размещения памяти в процессах. Обычно он монтируется в / dev / cpuset.

В системах с ядрами, скомпилированными со встроенной поддержкой процессоров, все процессы подключены к процессору, и процессоры всегда присутствуют. Если система поддерживает cpusets, то она будет иметь запись nodev cpuset в файле / proc / filesystems. Смонтировав файловую систему cpuset (см. Раздел «ПРИМЕР» ниже), администратор может настроить процессорные наборы в системе для управления процессором и размещением процессов в памяти в этой системе. По умолчанию, если конфигурация cpuset в системе не изменена или файловая система cpuset даже не смонтирована, тогда механизм cpuset, хотя и присутствует, не влияет на поведение системы.

Процессоры системы включают в себя все логические процессоры, на которых может выполняться процесс, в том числе, если они имеются, несколько процессорных ядер в пакете и гиперпотоки в ядре процессора. Узлы памяти включают в себя все отдельные банки основной памяти; В малых и SMP-системах обычно имеется только один узел памяти, который содержит всю основную память системы, в то время как системы NUMA (с неоднородным доступом к памяти) имеют несколько узлов памяти.

Короче говоря, если у вас 1 процессор с 6 ядрами, вы сконфигурируете процессоры и запускаете процесс в процессоре , настроенном только на одном ядре, например, на ядре № 3. Если бы это был параллельный процесс, все это было бы ограничено этим одним ядром, так что если вы запустили 4 процесса в данном процессоре, для которого определено только одно ядро, то каждый из 4 процессов получит 25% загрузки процессора на ядре № 3.

Основываясь на этом, обычно происходит то, что процессор настроен так, что

  • в системе с ядром 200+, например, cpusetA - это ядра 0 ... 60, где бы они ни находились, cpusetB - это ядра 61..70; cpusetC - это ядра 71..80; и так далее, однако администратор / архитектор выбирает для настройки.
  • cpusetA выделяется для определенных пользователей и / или определенных программ; cpusetB выделен разным пользователям / программам; и так далее.
  • пользователь запускает задание (процесс), которое запрашивает N ядер ... в данном процессоре, и теперь эти множественные (параллельные) процессы ограничиваются данным процессором. А для тех N параллелей, ограниченных данным процессором, каждый из этих процессов будет / должен использовать привязку процессора или привязку процессора, чтобы эти параллельные процессы не перебрасывались на разных ядрах внутри процессора.

также: https://linux.die.net/man/1/taskset

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.