Linux: відключення ядра процесора замість стану сну


10

В Linux ви можете вимкнути ядра CPU (або фізичні процесори) за допомогою echo 0> / sys / devices / system / cpu / cpu1 / online Припускаючи, що апаратне забезпечення повністю відключить процесор і зменшує живлення для нього, не було б краще його відключити ядра цілком замість того, щоб покладатися на різні стани сну процесора?

Щоб проілюструвати принцип, я щось міркував у цьому напрямку (псевдокод) для системи з чотирма процесорами:

if(loadavg > 3.00) echo 1 > /sys/devices/system/cpu/cpu3/online
if(loadavg < 3.00) echo 0 > /sys/devices/system/cpu/cpu3/online

if(loadavg > 2.00) echo 1 > /sys/devices/system/cpu/cpu2/online
if(loadavg < 2.00) echo 0 > /sys/devices/system/cpu/cpu2/online

if(loadavg > 1.00) echo 1 > /sys/devices/system/cpu/cpu1/online
if(loadavg < 1.00) echo 0 > /sys/devices/system/cpu/cpu1/online

Відповіді:


6

Встановлення статусу ядра CPU в Інтернеті просто повідомляє планувальнику процесів не використовувати це ядро для жодних процесів. На апаратному рівні ядро ​​просто сидить у режимі очікування (робить це NOP), але все ще працює. Хоча це заощадить енергію, це не заощадить майже стільки ж енергії, як увімкнення комп'ютера в режим сну. Чому?

Ну, ваша материнська плата, процесор та графічний процесор все ще працюють ! Коли ви перекладаєте комп'ютер у режим сну, всі ці компоненти буквально не працюють, і використовується лише достатня потужність, щоб зберегти оперативну пам’ять живою (на замовлення на пару ватт).

Знову ж таки, хоча я згоден, це заощадить енергію, навіть відключення половини ваших процесорних ядер може зменшити вдвічі енергоспоживання процесора (хоча насправді ви можете заощадити лише 30-40%, оскільки ці ядра все ще повинні сидіти в режимі очікування), але це далеко не єдиний компонент у системі, що використовує живлення. Навіть якщо ви економите 50 Вт, зробивши це, весь комп'ютер у режимі сну все ще забирає набагато більше енергії, ніж прості вати.


Заключні думки: Хоча я згоден, це прекрасна ідея на практиці, саме тому багато виробників процесорів включають динамічне масштабування частоти (Intel «Швидкість кроку») з підтримкою Linux. Ви можете досягти кращої загальної продуктивності, а також енергоефективності, встановивши ці частоти відповідно до своїх потреб. Це можна зробити як в апаратному забезпеченні (налаштування BIOS), так і в програмному забезпеченні (ядро Linux дозволяє змінювати деякі параметри процесора, див. Посилання, яке я розмістив вище або на цьому веб-сайті ).

Це спрацьовує, оскільки наступним є загальне рівняння споживання енергії схеми CMOS:

P = CV 2 f, де C = ємність (припустимо фіксовану), V = напруга і f = частота.

Таким чином, ділення частоти на 2 зменшить наполовину початкове споживання електроенергії. Поділ напруги на 2 зменшить споживання електроенергії до 1/4 оригіналу.


Принаймні, на процесорах, сумісних з x86 / amd64, я вважаю, що, якщо можливо, інструкція HLT буде простішою для процесора, ніж NOP. Я також мав на увазі різні стани сну (або коректно стани процесора C0-C3 (ACPI)). Крім того, я більше думав про системи, які працюють завжди там, де всю систему не можна заснути. У цьому випадку мені цікаво, чи апаратне забезпечення фактично відключить живлення на процесор, і якщо це взагалі реалізовано в деяких конфігураціях. Дякую за вашу відповідь, але я дозволю, щоб питання залишалося відкритим трохи довше.
Waxhead

@Waxhead після того, як ви вимкнете живлення на процесор, весь комп'ютер логічно "вимкнений" (і його можна ввімкнути лише за допомогою зовнішнього переривання), навіть якщо інше обладнання все ще працює. Крім того, ви можете мати рацію щодо використання HLTзамість цього NOP, але це пов'язане з використанням переривань (це як вивести процесор із зупиненого стану). Замість того, щоб зменшити потужність, більшість процесорів динамічно змінюють тактову частоту та напругу (додане рівняння до моєї відповіді).
Прорив

Я зробив ще кілька досліджень з цього приводу. Виявляється, Linux насправді підтримує гарячу підключення центрального процесора. У такому випадку, якщо BIOS / материнська плата підтримує її, ви можете фактично вимкнути процесор (и) та замінити їх, наприклад, вирвати ЦП із його розетки під час роботи системи та замінити її. Ref: cyberciti.biz/faq/debian-rhel-centos-redhat-suse-hotplug-cpu, якщо я не помиляюся, це перерве живлення на процесор, якщо BIOS / материнська плата підтримує його.
Waxhead

@Breakthrough Дякую за гарний пост Чи можете ви надати деякі довідкові документи про детальну інформацію про те, як ми можемо поставити процесор у стан малої потужності (із системою перезавантаження) та чи зможемо отримати його назад, коли потрібно
iDebD_gh,

@Breakthrough "ядро просто сидить у режимі очікування (робить NOP)," Коли ми працюємо в режимі офлайн на певному ядрі процесора, воно відхиляється від "/ proc / перериває". Як ви можете сказати, що Core обробляє операцію NOP?
iDebD_gh
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.