Мне нужен exe-файл, который я могу запустить на своем компьютере с Linux, который может загрузить процессор до указанного процента. Например, если я запускаю exe с аргументом командной строки 50, тогда мой процессор должен быть загружен на 50 процентов. Пожалуйста, предоставьте ваши предложения / решения.
1 ответ
Короткая версия: процесс, который занимает только 50% ЦП, невозможен (альтернативное решение см. Ниже).
Длинная версия: все инструкции, которые хочет выполнить процесс, выполняются как можно быстрее. Единственный способ остановить процесс - это когда:
- Процесс превысил выделенный интервал времени
- Другой процесс получает более высокий приоритет благодаря алгоритму упреждающего планирования, таким образом отсекая исходный процесс от ЦП. (это также происходит с прерываниями)
- Процесс блокируется (в основном из-за ожидания ввода-вывода)
Процент CPU, который вы видите в top
или в Диспетчере задач Windows, представляет собой среднее значение загрузки CPU за последний раз. Тем не менее, процессор всегда работает на полной скорости, поэтому 50% использования в течение 1 секунды означает, что для 500 мс он выполнял код, а для 500 мс он спал.
Решение
В Linux есть инструмент cpulimit
. Вы можете использовать это так:
cpulimit -p 1313 -l 30
Это ограничит PID 1313 до 30% использования процессора. По данным сайта, это работает так:
Работа cpulimit выполняется в пользовательском пространстве, поэтому она не мешает планировщику Linux. По сути, целевой процесс, который можно указать с помощью pid, имени или командной строки, непрерывно приостанавливается и возобновляется путем отправки ему сигналов SIGSTOP и SIGCONT. Сигналы отправляются cpulimit в соответствующие моменты, в зависимости от лимита, указанного пользователем, и статистики процесса, считанной из /proc.