Уповільнити лише один процес регулювання температури процесора


9
  1. У мене є програма. Під час його роботи температура процесора піднімається з 50 до 80 за Цельсієм, що є моєю основною проблемою.

    Я можу керувати частотою процесора, щоб сповільнити його, але інші процеси будуть сповільнені, а також я не хочу.

    Чи можна сповільнити певний процес, не впливаючи на інші процеси, щоб підтримувати процесор холодною?

    Моя ОС - Ubuntu 10.10.

  2. Я намагався встановити пріоритет процесу nice -n 15 myprogram, і не впевнений, що це спрацює. Центральний процесор - 77 градусів Цельсія.

    Чи niceвстановлюється лише відносний пріоритет процесу для інших процесів? Тобто, якщо інші процеси не запущені, чи швидко цей процес буде протікати? Я хотів би встановити, щоб процес протікав повільно.


1
Що робить цей процес: великий вхід / вихід? Важкі розрахунки на основному процесорі? Важкі розрахунки на графічному процесорі (відеокарта) (як правило, але не обмежуються програмами, що обчислюють зображення)?
Жил 'SO- перестань бути злим'

Програма - pdf2djvu, перетворюючи pdf-файл у djvu. Це важкий IO чи важкий процесор чи важкий GPU? Чи є у вас різні способи для різних випадків?
Тім

4
80º дуже-дуже високий. Я живу в гарячому місці Іспанії, і максимальна температура мого процесора становить ~ 60º. Відкрийте комп'ютер, очистіть усі шматки та поміняйте кулери. Я думаю, що це не використання процесора.
Руфо Ель Магуфо

Спробуйте зробити обидва.
stribika

80 ° насправді високий, але не вважається крайнім залежно від моделі процесора. більшість процесорів підтримують до 90 ° C без проблем
Kiwy

Відповіді:


16

CPULimit - саме те, що вам потрібно. Ви запускаєте програму, потім запускаєте cpulimit проти назви програми або PID, вказуючи, який відсоток ви бажаєте обмежити.

Наступна команда обмежує процес на PID 7777 до 5% використання ЦП.

cpulimit -p 7777 -l 5

Крім того, ви можете використовувати ім'я виконуваного файлу:

cpulimit -e myprogram -l 5

Або абсолютний шлях виконуваного файлу:

cpulimit -P /path/to/myprogram -l 5

Зверніть увагу, відсоток усіх ядер; тому якщо у вас є 4 ядра, ви можете використовувати 400%.


1
Дякую! (1) Чи використовується CPULimit лише для вже запущеного процесу? Не використовується при поданні програми на запуск? (2) чи фіксує він відсоток використання процесора процесом, чи встановлює верхню межу процесу та чи дозволяє його використання коливатися між 0 і цим лімітом відповідно до інших процесів? (3) Я також виявив, що після використання CPULimit в процесі, Ctrl + C не може скасувати запуск, оскільки він незабаром повернеться назад, щоб він автоматично працював. Цікаво, чому?
Тим

2
Невеликий застереження щодо CPULimit: він використовує SIGSTOP / SIGCONT для обмеження кількості часу процесора, використовуваного процесом (процеси, що перевищують цільове використання процесора, зупиняються; коли минуло достатньо часу, процес надсилається SIGCONT і відновлює виконання). Однак бувають рідкісні випадки, коли сигнали можуть перешкоджати системним викликам, детальну інформацію див. У посібнику з бібліотеки GNU C. Оскільки CPULimit надсилає ці сигнали багато разів в секунду, є велика ймовірність перерватися. Не велика проблема для запуску pdftk на робочому столі, тхо.
Ріккардо Муррі

8

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

Таким чином, ви можете спробувати "уповільнити" ваш процес, враховуючи його PID через:

# lower priority of a process
renice +1 "PID"

Кожен раз, коли ви запускаєте це, процес "приємне значення" збільшується на 1; Ви можете використовувати цілі значення, крім +1звичайного.

Команда nice дозволяє запустити процес з коригуванням значення +10 nice (змінити це за допомогою параметра -n). Наприклад:

# start a CPU-intensive task with low priority
nice ./cpu-hog

Однак "приємне значення" впливає лише на те, наскільки планувальник надає перевагу запуску певного процесу над іншими в системі: якщо ваш комп’ютер в основному працює на холостому ході, підвищення "приємного значення" одного єдиного процесу не зупинить цей процес на 100% ЦП. Я цитую зі сторінки manpriority (2) manpage : (наголос додав я.)

Ступінь, в якій їх відносне приємне значення впливає на планування процесів, залежить від систем Unix, а в Linux - для версій ядра. Починаючи з ядра 2.6.23, Linux прийняв алгоритм, який спричиняє набагато сильніший вплив відносних відмінностей в хороших значеннях. Це призводить до дуже низьких приємних значень (+19), щоб по-справжньому забезпечити мало процесора процесу, коли в системі є будь-яке інше пріоритетне навантаження._

Причина цього полягає в тому, як процеси запускаються на ядрі, схожому на UNIX: кожен раз, коли ядро ​​вирішує запустити процес, цей процес має повний контроль над ядром процесора протягом певного (фіксованого та короткого) проміжку часу. "Приємне значення" може впливати на те, як часто планувальник ядра готовий надати часовий проміжок часу, але ви не можете змінити той факт, що після запланованого процесу процес триває безперешкодно протягом певного часу.

Тому, якщо уповільнити процесор, немає способу зробити процес повільніше, якщо в системі немає інших процесів, які можуть претендувати на доступ до процесора.


Дякую! Чи можна зробити процес повільним від початку до кінця, незалежно від інших процесів?
Тім

@Tim, я не думаю, що те, що ви просите, можливо; Я оновив відповідь більш детально. Сподіваюся, що це стане більш зрозумілим.
Ріккардо Муррі

1
Інша відповідь запропонувала CPULimit, який, здається, робить неможливе.
Тім

Ах, я не знав про CPULimit - це безумовно заповнює прогалину в моєму наборі інструментів UNIX.
Ріккардо Муррі

niceнічого не зробить, щоб ваш процесор був прохолодним. Він не призначений для роботи так.
Кен Шарп

4

групи були створені саме з цієї причини.

http://www.kernel.org/doc/Documentation/cgroups/ http://www.serverwatch.com/tutorials/article.php/3921001/Setting-Up-Linux-Cgroups.htm

Потрібно трохи часу, щоб ознайомитись з ними, і я вважаю, що вам потрібен кореневий доступ, щоб налаштувати їх, але все це можна прописати. У новішому Ubuntus є файл .conf, так що вам не доведеться писати власний сценарій. Я не впевнений про 10.10.

Приємне місце для початку - у цій відповіді: https://askubuntu.com/a/94743/170177

Зауважте, що групи все ще знаходяться в активному розвитку, тому деякі функції можуть бути недоступні у вашому поточному ядрі.

Використання cpu.shares cgroups не робить нічого, що приємне значення не робило б. Здається, ви хочете насправді придушити процеси, що, безумовно, можна зробити.

Вам потрібно буде використовувати сценарій або два та / або редагувати /etc/cgconfig.conf, щоб визначити потрібні параметри.

Зокрема, ви хочете відредагувати значення cpu.cfs_period_us та cpu.cfs_quota_us . Процес буде дозволено працювати в протягом cpu.cfs_quota_us мікросекунд на cpu.cfs_period_us мікросекунд.

Наприклад:

Якщо cpu.cfs_period_us = 50000 і cpu.cfs_quota_us = 10000, то процес отримає 20% максимального часу процесора, незалежно від того, що ще відбувається.

У цьому скріншоті я дав процесу 2% часу процесора:

2% часу процесора

Що стосується процесу, то він працює на 100%.

Параметри cpu.shares, з іншого боку, можуть і все ще використовуватимуть 100% простою процесорного часу.

У цьому подібному прикладі я дав процес cpu.shares = 100 (з 1024):

cpu.shares

Як ви бачите, процес все ще забирає весь час простою процесора.

Список літератури:

http://manpages.ubuntu.com/manpages/precise/man5/cgconfig.conf.5.html http://kennystechtalk.blogspot.co.uk/2015/04/throttling-cpu-usage-with-linux-cgroups .html


Примітка: systemdчи справи дещо інакше. Наприклад, Ubuntu Trusty, здається, має два сервіси для управління групами. Я оновлю, коли дізнаюсь більше.
Кен Шарп

Але ви можете змінити max cpu%, коли процес вже запущений, як renice?
Марко Сулла

reniceне змінює обсяг використовуваного процесора, він просто змінює пріоритет процесу в планувальнику. cgroups можуть змінити ліміт процесора в будь-який час. Оскільки ця відповідь була розміщена, у групових групах були додані всілякі налаштування і вона дуже потужна.
Кен Шарп

renice does not change the amount of CPU usesЯ це знаю;) Я щойно розмістив як приклад програми, яка змінює речі під час виконання. Дякую за вашу відповідь, я спробую групи.
Марко Сулла
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.