Скрипт для запуска процесса в Linux с минимальным влиянием на работу других процессов:#!/bin/sh
# куда бы еще /usr/bin/nice впихнуть?
/usr/bin/chrt --idle 0 /usr/bin/ionice -c 3 $* &
XPID=$!
/usr/bin/cpulimit -l 1 -c 1 -b -p $XPID
wait $XPIDВ chrt "--idle 0" выставляет режим планировщика SCHED_IDLE с минимальным приоритетом.
В ionice "-c 3" активирует 3 класс (idle) планирования ввода/вывода.
В cpulimit опцией "-l" задаётся допустимый процент использования CPU (в диапазоне от 0 до 100 * на число процессорных ядер), - "-c" ограничивает число ядер CPU, "-b" - запускает процесс cpulimit в фоне, "-p" применяет ограничение для PID уже запущенного процесса. При помощи опции "-i" можно распространить ограничение и на все дочерние процессы.
URL:
Обсуждается: http://www.opennet.me/tips/info/3187.shtml
> # куда бы еще /usr/bin/nice впихнуть?Дык man renice же!
поспешишь - людей насмешишь. вот что стоило мне подождать пару дней.
сейчас у меня есть 1строчник:/usr/bin/cpulimit -l 1 -c 1 -f -q -- /usr/bin/nice -19 /usr/bin/chrt --idle 0 /usr/bin/ionice -c 3 $*
Не $*, а "$@". Иначе проблемы с аргументами, содержащими пробелы.
> совсем-совсем"и таки запомните, дети, шо этот русский язык имеет трёх степеней сравнения: близко, ближе, и уот-уот-уот". (ц)
Самое интересное, что это не поможет. Если IO выставить в SCHED_BATCH, будет разве что быстрее отрабатывать без нагрузки и чуть меньше мешать с ней (лагать всё-равно будет). Всё хочу попробовать ограничить ресурсы через cgroups, но ядро даёт мне отлуп и не хочет без systemd работать, я не знаю что дальше с ним делать. Реалтайм процессы ещё и фризов завозят (всем), к одному ядру прибывать есть смысл только однопоточное приложение с вычислениями на всё это ядро (или с повышенными требованиями к стабильности задержек (т.н. реалтайм)). Реалтайм и нагруженная система понятия несовместимые.
> попробовать ограничить ресурсы через cgroupsнаверняка кто-то это уже делал. осталось найти и адаптировать.
> но ядро даёт мне отлуп и не хочет без systemd работать,
???
> к одному ядру прибывать есть смысл только однопоточное приложение
все очень просто. меньше одного ядра выделить невозможно.
ps: "реалтайм" не интересует.
> Всё хочу попробовать ограничить ресурсы через cgroups, но ядро даёт мне отлупну так и используй cpulimit - он сделает ровно все то же самое, что ты хочешь попробовать руками через cgroups сделать.
про отлупы и тем более systemd не понятно. в ядре есдть документация и там совершенно ясные примеры, по которым никто никаких отлупов не дает, если конечно все делать (и понимать) правильно...
Прав нет (мне не интересно запускать от рута), адекватной документации нет (не говоря про версии, с актуальностью проблемы), при чём тут процессор (ни при чём)?
cpulimit такая же бесполезная утилита, как и BES на винде - просто ставит на паузу приложение на сотни миллисекунд, вместо эмуляции пропуска тактов процессора, как это должно быть реализовано по нормальному. Еще не ясно, синхронизированы ли периоды пауз, т.е. размазываются ли приложения по времени, или одновременно все ставятся на паузу, и одновременно возобновляются - если нет то это катастрофа для системы, когда вся система замирает каждые пол секунды, я уж не говорю про стабильность работы приложений, особенно tcp сессий.
> BES на виндея не знаю что это. на винде есть "start /low", на FreeBSD есть idprio и опять же nice.
> Еще не ясно,
> синхронизированы ли периоды пауз, т.е. размазываются ли приложения по времени, или
> одновременно все ставятся на паузу,man cpulimit
мониторится конкретный PID (где "P" - это не "приложение", а кое-что другое).
Ну да, использовать ionice в 2021 году, когда у всех deadline/mq-deadline/none шедулеры, которым на него глубоко до лампочки, ага.Он работал только с cfq, который актуален только для вращающихся HDD на серверах. Потому что на SSD всегда лучше передавать ему запросы сразу, чем морозить их в очередях, а на десктопе cfq с его стремлением повысить IOPS в ущерб задержкам ощущается не очень комфортно.
окей, ionice вычеркиваем.
можно ещё вычеркнуть nice, он работает только с SCHED_OTHER. В SCHED_BATCH и SCHED_IDLE приоритет всегда 0.
Тоже правда.
В общем, добавили всякой мути побольше для устрашения, про кторую сам автор не понимает, что она делает, типа скомбинировано из каких-то древних howto'шек без осознания, как оно сочетается :) И выдается за истину. Мда....
Ну дык, поделитесь и вам спасибо скажут
1. SCHED_IDLE врубает класс IOPRIO_CLASS_IDLE, которые юзают и BFQ и MQ,
эта отлично работает на ext4 и btrfs.
Если не указано IDLE, то используется best-effort i/o scheduling.2. Не нулевой "приоритет" бывает только у SCHED_FIFO и SCHED_RR
3. Это не системный приоритет, а среди равных шыдулеров!
SCHED_RR = 99 полюбасу ниже, чем SCHED_FIFO = 14. В среднем SCHED_OTHER, SCHED_BATCH и SCHED_IDLE работают так как описано.
Автор не слушай этих чайников.
Для выеб...нов, пусть доказывают, что большинство Linux систем работает так как они мечтают.А по-дефолту везде CFQ/ext4
> cpulimit -l 1 -c 1 -b -pПосле этого всё лишнее.
>> cpulimit -l 1 -c 1 -b -p
> После этого всё лишнее.за время этого 1% злой процесс сможет конкретно нагрузить I/O. или наплодить форков.
так что пусть будет.
Не запускать совсем-совсем?
schedtool -D -n+20 -e XXX
> Скрипт для запуска процесса в Linux с минимальным влиянием на работу других процессов:
while true
do
sleep 31415;
exec myprogramma;
sleep 1;
killall -9 `pidof myprogramma`;
done
> while true
> do
> sleep 31415;
> exec myprogramma;
> sleep 1;
> killall -9 'pidof myprogramma';
>doneСмешно :)
Только вот после
> exec myprogramma;
myprogramma вырвется на свободу и попытка убийства обломится ;)
> myprogramma вырвется на свободу и попытка убийства обломится ;)ОМГ :facepalm:
exec myprogramma &Содержимое myprogramma нужно уточнять?
А то ж вы придумаете что там есть kill -9 `pidof bash`
и опять ничего не получится?
>> myprogramma вырвется на свободу и попытка убийства обломится ;)
> ОМГ :facepalm:
>
> exec myprogramma &
>
> Содержимое myprogramma нужно уточнять?
> А то ж вы придумаете что там есть kill -9 `pidof
> bash`
> и опять ничего не получится?Теперь похоже на смысл, только "exec" вообще не нужен
> Скрипт для запуска процесса в Linux с минимальным влиянием на работу других
> процессов:Вспомнилось: http://packages.altlinux.org/idlewrap
Михаил, а почему вы не дали прямую ссылку на текст скрипта ?
вместо "просто посмотреть" пришлось глюкать по вашему репозиторию,
скачивать srpm, ставить приблуду для распаковки rpm и только после этого
я нашел доп.применение этому глюкалу: копирование .iso на флэшки.
привет секте свидетелей 12309.