The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Запуск процесса с совсем-совсем IDLE приоритетом в Linux
Скрипт для запуска процесса в 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" можно распространить
ограничение и на все дочерние процессы.

Вариант в форме однострочника:

   /usr/bin/cpulimit -l 1 -c 1 -f -q -- /usr/bin/nice -19 /usr/bin/chrt --idle 0 /usr/bin/ionice -c 3 $* 
 
19.06.2021 , Автор: СеменСемныч777
Ключи: idle, cpulimit, limit, process, scheduler, linux / Лицензия: CC-BY
Раздел:    Корень / Администратору / Система / Linux специфика / Оптимизация и тюнинг в Linux

Обсуждение [ Линейный режим | Показать все | RSS ]
  • 1.1, s (?), 08:32, 21/06/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > # куда бы еще /usr/bin/nice впихнуть?

    Дык man renice же!

     
  • 1.3, СеменСеменыч777 (?), 14:20, 21/06/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    поспешишь - людей насмешишь. вот что стоило мне подождать пару дней.
    сейчас у меня есть 1строчник:

    /usr/bin/cpulimit -l 1 -c 1 -f -q -- /usr/bin/nice -19 /usr/bin/chrt --idle 0 /usr/bin/ionice -c 3 $*

     
  • 1.4, Аноним (4), 19:01, 21/06/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    Не $*, а "$@". Иначе проблемы с аргументами, содержащими пробелы.
     
  • 1.5, йо ж (?), 21:04, 24/06/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > совсем-совсем

    "и таки запомните, дети, шо этот русский язык имеет трёх степеней сравнения: близко, ближе, и уот-уот-уот". (ц)

     
  • 1.6, Аноним (6), 17:21, 25/06/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Самое интересное, что это не поможет. Если IO выставить в SCHED_BATCH, будет разве что быстрее отрабатывать без нагрузки и чуть меньше мешать с ней (лагать всё-равно будет). Всё хочу попробовать ограничить ресурсы через cgroups, но ядро даёт мне отлуп и не хочет без systemd работать, я не знаю что дальше с ним делать. Реалтайм процессы ещё и фризов завозят (всем), к одному ядру прибывать есть смысл только однопоточное приложение с вычислениями на всё это ядро (или с повышенными требованиями к стабильности задержек (т.н. реалтайм)). Реалтайм и нагруженная система понятия несовместимые.
     
     
  • 2.8, СеменСеменыч777 (?), 21:45, 28/06/2021 [^] [^^] [^^^] [ответить]  
  • +/
    > попробовать ограничить ресурсы через cgroups

    наверняка кто-то это уже делал. осталось найти и адаптировать.

    > но ядро даёт мне отлуп и не хочет без systemd работать,

    ???

    > к одному ядру прибывать есть смысл только однопоточное приложение

    все очень просто. меньше одного ядра выделить невозможно.

    ps: "реалтайм" не интересует.

     
  • 2.15, Алеша (?), 02:29, 22/07/2021 [^] [^^] [^^^] [ответить]  
  • +/
    > Всё хочу попробовать ограничить ресурсы через cgroups, но ядро даёт мне отлуп

    ну так и используй cpulimit - он сделает ровно все то же самое, что ты хочешь попробовать руками через cgroups сделать.
    про отлупы и тем более systemd не понятно. в ядре есдть документация и там совершенно ясные примеры, по которым никто никаких отлупов не дает, если конечно все делать (и понимать) правильно...

     
     
  • 3.16, Аноним (6), 09:05, 22/07/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Прав нет (мне не интересно запускать от рута), адекватной документации нет (не говоря про версии, с актуальностью проблемы), при чём тут процессор (ни при чём)?
     

  • 1.7, Oe (?), 13:17, 28/06/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    cpulimit такая же бесполезная утилита, как и BES на винде - просто ставит на паузу приложение на сотни миллисекунд, вместо эмуляции пропуска тактов процессора, как это должно быть реализовано по нормальному. Еще не ясно, синхронизированы ли периоды пауз, т.е. размазываются ли приложения по времени, или одновременно все ставятся на паузу, и одновременно возобновляются - если нет то это катастрофа для системы, когда вся система замирает каждые пол секунды, я уж не говорю про стабильность работы приложений, особенно tcp сессий.
     
     
  • 2.9, СеменСеменыч777 (?), 21:54, 28/06/2021 [^] [^^] [^^^] [ответить]  
  • +/
    > BES на винде

    я не знаю что это. на винде есть "start /low", на FreeBSD есть idprio и опять же nice.

    > Еще не ясно,
    > синхронизированы ли периоды пауз, т.е. размазываются ли приложения по времени, или
    > одновременно все ставятся на паузу,

    man cpulimit
    мониторится конкретный PID (где "P" - это не "приложение", а кое-что другое).

     

  • 1.10, Stax (ok), 16:04, 29/06/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Ну да, использовать ionice в 2021 году, когда у всех deadline/mq-deadline/none шедулеры, которым на него глубоко до лампочки, ага.

    Он работал только с cfq, который актуален только для вращающихся HDD на серверах. Потому что на SSD всегда лучше передавать ему запросы сразу, чем морозить их в очередях, а на десктопе cfq с его стремлением повысить IOPS в ущерб задержкам ощущается не очень комфортно.

     
     
  • 2.11, СеменСеменыч777 (?), 18:07, 29/06/2021 [^] [^^] [^^^] [ответить]  
  • +/
    окей, ionice вычеркиваем.
     
     
  • 3.13, проходил (?), 22:12, 10/07/2021 [^] [^^] [^^^] [ответить]  
  • +/
    можно ещё вычеркнуть nice, он работает только с SCHED_OTHER. В SCHED_BATCH и SCHED_IDLE приоритет всегда 0.
     
     
  • 4.17, Stax (ok), 15:00, 27/07/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Тоже правда.
    В общем, добавили всякой мути побольше для устрашения, про кторую сам автор не понимает, что она делает, типа скомбинировано из каких-то древних howto'шек без осознания, как оно сочетается :) И выдается за истину. Мда....
     
     
  • 5.21, XXX (??), 00:04, 03/08/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Ну дык, поделитесь и вам спасибо скажут
     
  • 4.23, pavlinux (ok), 14:10, 07/09/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    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 = 1

    4. В среднем SCHED_OTHER, SCHED_BATCH и SCHED_IDLE работают так как описано.
       Автор не слушай этих чайников.


    Для выеб...нов, пусть доказывают, что большинство Linux систем работает так как они мечтают.

    А по-дефолту везде CFQ/ext4

     

  • 1.12, Аноним (12), 23:14, 30/06/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    > cpulimit -l 1 -c 1 -b -p

    После этого всё лишнее.

     
     
  • 2.14, СеменСеменыч777 (?), 10:48, 11/07/2021 [^] [^^] [^^^] [ответить]  
  • +/
    >> cpulimit -l 1 -c 1 -b -p
    > После этого всё лишнее.

    за время этого 1% злой процесс сможет конкретно нагрузить I/O. или наплодить форков.
    так что пусть будет.

     

  • 1.20, pashev.me (?), 12:15, 02/08/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Не запускать совсем-совсем?
     
  • 1.22, Sylvia (ok), 22:41, 12/08/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    schedtool -D -n+20 -e XXX

     
  • 1.24, pavlinux (ok), 14:40, 07/09/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > Скрипт для запуска процесса в Linux с минимальным влиянием на работу других процессов:




    while true
       do
          sleep 31415;
          exec myprogramma;
          sleep 1;
          killall -9 'pidof myprogramma';
    done

        

     
  • 1.25, Michael Shigorin (ok), 21:19, 08/10/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > Скрипт для запуска процесса в Linux с минимальным влиянием на работу других
    > процессов:

    Вспомнилось: http://packages.altlinux.org/idlewrap

     
     
  • 2.26, jack_erohin (?), 15:02, 19/10/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Михаил, а почему вы не дали прямую ссылку на текст скрипта ?
    вместо "просто посмотреть" пришлось глюкать по вашему репозиторию,
    скачивать srpm, ставить приблуду для распаковки rpm и только после этого
     


     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:




    Спонсоры:
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2021 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру