Программа cpulimit
на линуксе отлично. Вы можете указать ему ограничить процесс, чтобы он не использовал более X% ЦП. Например, я знаю человека, у которого ноутбук перегревается, если процессор слишком долго работает слишком горячим. При кодировании видео они используют cpulimit для предотвращения полной загрузки ЦП и, следовательно, перегрева. Вы не можете использовать nice
чтобы остановить это.
Есть ли что-то подобное для грузить?
В идеале я бы хотел уметь делать loadlimit 4 my-command-here
и это начнется my-command-here
и каждые X секунд loadlimit
проверит (1 минуту) загрузку машины, и если она выше 4, то my-command-here
будет приостановлено. Когда нагрузка упадет ниже 4, команда будет приостановлена. Это именно то, что cpulimit
кстати.
Такой инструмент существует?
С учетом того, что вы описываете в комментариях, может показаться, что ваша настоящая проблема может быть решена с помощью ionice
.
ionice -c 3 -p <pid>
где -p <pid>
это pid процесса, который вы хотите перенести, и -c 3
помещает это в idle
class, поэтому он получает дисковое время только в том случае, если его никто не хочет. В загруженной системе это может замедлить рассматриваемый процесс, поэтому вы можете поэкспериментировать с разными значениями приоритета в более высоком классе, например
ionice -c 2 -n 6 -p <pid>
Читать man ionice
Больше подробностей.
Проблема с предложенным вами loadlimit
будет то, что высокая нагрузка может быть вызвана самыми разными вещами, и замедление одного процесса не обязательно повлияет на нагрузку.