2016-12-20 12 views
3

Я хочу ограничить использование процессора процессом на сервере GPU. Я нахожу несколько способов: «nice» или «cpulimit». Но они не совсем то, что я хочу.
cpulimit Позволяет процессу работать так быстро, как он хочет, пока не превысит процент, после чего он получит SIGSTOP, а затем сон и SIGCONT.
Но я не хочу, чтобы процесс, который превышал процент, чтобы спать. Я просто надеюсь, что он не превысит определенного процента. И продолжайте работать нормально.
Как ограничить использование процессора процессом?

Например, когда я бегу cpulimit -p 1111 -l 30, терминал будет
[1]+ Stopped
Это не то, что я хочу.

ответ

2

Не думаю, что это возможно, не отправив спать в вашу программу. Но я не думаю, что вас беспокоит спать, потому что это то, что делает UNIX, когда другой поток запрашивает доступ к CPU.

Если вы видите, что программа использует 50% ядра процессора, это 50% времени, так как ядро ​​процессора может сделать только один или два потока, в то время (в зависимости от конфигурации, lscpu, чтобы увидеть на linux).

Если вы создаете приложение, которое потребляет всегда 100% ядра и никогда не позволит другому процессу войти, возможно, но вы никогда не знаете, сможет ли ваше ядро ​​один раз разрешить некоторым процессорам другую программу аварийной ситуации ,

Так что я советую учитывать тот факт, что ваше приложение может быть приостановлено, потому что это может произойти, и это то, что вам нужно, очевидно.

Надеюсь, что я помогу вам :) См. Ya!

+0

Возможно, именно по этой причине я не могу найти лучшего решения. –

0

Возможный способ может быть разработать собственную программу «подобная раковину», которая проходит другой процесса (или группу процессов) и отправить его в качестве альтернативы сигналов на SIGSTOP и SIGCONT (см signal(7) для более). Например, если вы хотите, чтобы какая-либо программа использовала не более 50% времени процессора, вы можете запустить ее, позволить ей работать в течение 10 миллисекунд, отправить ее SIGSTOP, спать в течение 10 миллисекунд, отправить ее SIGCONT, спать на 10 миллисекунды, отправьте его SIGSTOP и так далее.

Доказательством концепции такой управляющей программы является моя утилита half.c (лицензия GPLv2 +). BTW он не показывает Stopped на терминале (сообщение, показанное вашей оболочкой), потому что программа half не останавливается сама (только некоторые ребенок процесс).

FWIW, я разработал эту программу более чем десять лет назад, чтобы иметь возможность компилировать ядро ​​Linux на некотором перегреве MSI S270 ноутбук

(фактическая история немного сложнее, а также участвует слишком дешево RAM модули, которые при слишком большом нагревании работали неправильно, мне понадобилось больше года, чтобы понять, что изменение модулей ОЗУ позволило решить общую проблему с аппаратным обеспечением).