відключення процесорних ядер на чотирьохядерному процесорі під 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 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).


Дякую за пропозиції. Він працював із запропонованою вами
командою

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

@Gilles - Чи є спосіб дізнатися, скільки часу потрібно вмикати coreі вимикати?
Chetan Arvind Patil

@ChetanArvindPatil Час це. Я думаю, що час домінуватиме в доступі до оперативної пам’яті, якщо включений код ще не знаходиться в кеш-пам'яті L2 і до моменту відключення ядра в іншому випадку, але це дуже залежить від процесора та ОС.
перестань бути злим"

1
@Xofo Коли ядро ​​вимикає серцевину, це ядро ​​працює з кодом ядра, тому жоден потік не призначений для цього ядра на той момент. Після того, як ядро ​​вимкнено, нитки більше не плануються на цьому ядрі. Я не знаю, що станеться, якщо спорідненість нитки обмежує її набором ядер, які відключені.
перестань бути злим"

1

не обов’язково вимикати або вимикати ядра.

Ви б використовували cpusets та набір завдань

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

Комп'ютер визначає список процесорів і вузлів пам'яті ...

Файлова система cpuset - це інтерфейс псевдофайлової системи до механізму cpuset ядра, який використовується для управління розміщенням процесора та розміщенням пам'яті процесів. Він зазвичай монтується в / dev / cpuset.

У системах з ядрами, складеними з вбудованою підтримкою cpusets, всі процеси приєднані до cpuset, а cpusets завжди присутні. Якщо система підтримує cpusets, то вона матиме cpuset nodev cpuset у файлі / proc / fileystems. Встановивши файлову систему cpuset (див. Розділ ПРИКЛАД нижче), адміністратор може налаштувати cpusets в системі для управління процесором і розміщенням пам'яті процесів у цій системі. За замовчуванням, якщо конфігурація cpuset у системі не змінена або якщо файлова система cpuset навіть не змонтована, механізм cpuset, хоч і присутній, не впливає на поведінку системи.

Процесорні процесори системи включають усі логічні блоки обробки, на яких може виконувати процес, включаючи, якщо вони є, кілька ядер процесора в пакеті та Hyper-Threads в ядрі процесора. Вузли пам'яті містять усі окремі банки основної пам'яті; малі та SMP системи зазвичай мають лише один вузол пам'яті, який містить всю основну пам'ять системи, тоді як системи NUMA (нерівномірний доступ до пам'яті) мають кілька вузлів пам'яті.

Якщо коротко, якщо у вас 1 процесор, що має 6 ядер, ви налаштували б cpusets і запустили процес у cpuset, який налаштований лише на одному ядрі, скажімо, наприклад, core # 3. Якби це був паралельний процес, все було б обмежене одним ядром, таким чином, якщо ви запустили 4 процеси в заданому процесорі, який визначав лише одне ядро, то кожен з 4 процесів отримав би 25% використання процесора на ядрі №3.

Здійснюючи це, що, як правило, відбувається, процесор налаштований таким чином, що

  • Наприклад, в базовій системі 200+, cpusetA є ядрами 0..60, де б вони не знаходилися, cpusetB є ядрами 61..70; cpusetC становить ядра 71..80; і так далі, проте адміністратор / архітектор вирішує налаштувати.
  • cpusetA виділяється певним користувачам та / або конкретним програмним програмам; cpusetB розподіляється для різних користувачів / програм; і так далі.
  • користувач запускає завдання (процес), який вимагає N ядер ... в межах заданого cpuset, і тепер ці декілька (паралельних) процесів обмежені цим заданим cpuset. І для тих N паралелей, обмежених даним процесором, кожен з цих процесів повинен / повинен використовувати афінність процесора або спорідненість процесора, щоб ці паралельні процеси не розминалися на різних ядрах в межах cpuset.

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.