У меня есть программа. Когда он работает, температура процессора повышается с 50 до 80 градусов Цельсия, что является моей главной заботой.
Я могу контролировать частоту процессора, чтобы замедлить его, но замедляются и другие процессы, чего я не хочу.
Можно ли замедлить определенный процесс, не влияя на другие процессы, чтобы охлаждать процессор?
Моя ОС - Ubuntu 10.10.
Я попытался установить приоритет процесса
nice -n 15 myprogram
, и не уверен, что это будет работать. Процессор 77 градусов по Цельсию.nice
Устанавливает ли только относительный приоритет процесса относительно других процессов? Т.е., если другие процессы не работают, будет ли этот запущенный процесс работать быстро? Я бы хотел, чтобы процесс работал медленно.
9
Ответы:
CPULimit это именно то, что вам нужно. Вы запускаете программу, затем запускаете cpulimit для имени программы или PID, указывая, какой процент вы хотите ограничить.
Следующая команда ограничивает процесс с PID 7777 до 5% загрузки процессора.
В качестве альтернативы вы можете использовать имя исполняемого файла:
Или абсолютный путь к исполняемому файлу:
Обратите внимание на процент от всех ядер; так что если у вас есть 4 ядра, вы можете использовать 400%.
источник
Вы можете арендовать запущенный процесс, чтобы придать ему более или менее приоритетный характер (так называемое «хорошее значение»). Обратите внимание, что шкала приоритетов UNIX несколько нелогична: отрицательные значения означают, что процесс предпочтительнее параллельных процессов, т. Е. Имеет приоритет «больше».
Таким образом, вы можете попытаться «замедлить» ваш процесс, используя его PID через:
Каждый раз, когда вы запускаете это, процесс "nice value" увеличивается на 1; Вы можете использовать целочисленные значения, кроме,
+1
конечно.Команда nice позволяет запустить процесс с корректировкой значения +10 nice (измените это с помощью опции
-n
). Например:Однако «хорошее значение» влияет только на то, насколько планировщик предпочитает запускать определенный процесс над другими в системе: если ваш компьютер в основном работает на холостом ходу, повышение «хорошего значения» одного отдельного процесса не остановит этот процесс от принятия 100%. ЦПУ. Я цитирую на man-странице getpriority (2) : (Акцент сделан мной)
Причина этого кроется в том, как процессы запускаются в ядре, подобном UNIX: каждый раз, когда ядро решает запустить процесс, этот процесс полностью контролирует ядро процессора в течение определенного (фиксированного и короткого) промежутка времени. «Хорошее значение» может влиять на то, как часто планировщик ядра желает выделить временной интервал для процесса, но вы не можете изменить тот факт, что после планирования процесс будет работать без перерыва в течение фиксированного периода времени.
Следовательно, если не замедлять работу процессора, невозможно замедлить процесс, если в системе нет других процессов, которые могут бороться за доступ к процессору.
источник
nice
не сделаю ничего, чтобы ваш процессор остыл. Он не предназначен для такой работы.cgroups были созданы именно по этой причине.
http://www.kernel.org/doc/Documentation/cgroups/ http://www.serverwatch.com/tutorials/article.php/3921001/Setting-Up-Linux-Cgroups.htm
Чтобы ознакомиться с ними, требуется некоторое время, и я считаю, что для их настройки вам нужен root-доступ, но все это можно записать в сценарии. Более новые Ubuntus имеют файл .conf, так что вам не нужно писать свой собственный скрипт. Я не уверен насчет 10.10.
Хорошее место для начала в этом ответе: https://askubuntu.com/a/94743/170177
Обратите внимание, что cgroups все еще находится в активной разработке, поэтому некоторые функции могут быть недоступны в вашем текущем ядре.
Использование cgroups cpu.shares не делает ничего, что не подойдет хорошее значение. Звучит так, будто вы действительно хотите задушить процессы, что определенно можно сделать.
Вам нужно будет использовать один или два сценария и / или отредактировать /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% процессорного времени:
Что касается процесса, он работает на 100%.
Настройки cpu.shares, с другой стороны, могут и будут использовать 100% времени простоя ЦП.
В этом похожем примере я дал процесс cpu.shares = 100 (из 1024):
Как вы можете видеть, процесс все еще занимает все время простоя процессора.
Ссылки:
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, похоже, есть две службы для управления cgroups. Я обновлю, когда узнаю больше.renice
?renice
не меняет объем используемого процессора, он просто меняет приоритет процесса в планировщике. cgroups может изменить ограничение ЦП в любое время. С тех пор как этот ответ был опубликован, в cgroups были добавлены всевозможные настройки, и он очень мощныйrenice does not change the amount of CPU uses
Я знаю это;) Я только что опубликовал в качестве примера программы, которая меняет вещи во время выполнения. Спасибо за ваш ответ, я попробую cgroups.