Files
reniced/README.md
2023-04-23 17:39:00 +03:00

4.5 KiB

Reniced

Сервис автоматического изменения приоритета исполнения процессов. Работает по принципу периодического вылавливания списка запущенных процессов и изменения приоритета "проклятым" и (если получится) "благословлённым" процессам.

Зачем это нужно?

В некоторых случаях необходимо, чтобы система обладала достаточной интерактивностью, чтобы, например, нормально работала видеосвязь в таких мессенджерах, как VK Teams.

Как это установить и заставить работать?

Для установки нам понадобятся пакеты с перлом и перловым модулем JSON::XS из текущего дистрибутива линукса, например, их можно уставить командами:

Для вуишфт-образных дистрибутивов

apt-get install perl perl-json-xs

Для наследников redhat-а

dnf install perl perl-json-xs

Для всех остальных нужен будет perl, cpanm и переменная окружения PERL5LIB. За подробностями - добро пожаловать в гугл.

Как заставить это работать?

Вначале надо скопировать конфиг из config_example.json в ~/.reniced.json и далее подправить все необходимые значения в нём.

После настройки списка процессов и приоритетов их работы, можно запускать сервис как unix daemon или как обычный процесс. Второй вариант нужен для запуска сервиса через systemd.

Если reniced планируется запускать от рута (uid=0), то конфиг будет находиться не в ~/.reniced.json, а в /etc/reniced.json.

Caveats

Для MacOS

В свежих выпусках Mac OS нет возможности запускать сервисы от пользователя с uid=0, автоматически, при запуске системы. Во всяком случае без танцев с бубнами и отключения "защиты" системных файлов от модификации этого не сделать. Поэтому придётся при запуске системы логиниться и ручками писать

sudo reniced

в каталоге с reniced. Кроме того, под MacOS конфиг всегда ищется в ~/.reniced.json

В линуксах такой проблемы пока нет (но возможно будет, когда придут "атомарные" обДНОвления).

Для Linux

В линуксах есть такая фича, как namespaces. Так вот, без особых приседаний и раскачиваний, нет возможности собрать список процессов не из текущего namespace-а. Так что, скорее всего, в некоторых контейнерных системах изоляции окружений возможны варианты, при которых у изолированных таким образом процессов не будет меняться приоритет исполнения.

Общего характера

По понятным причинам, нет возможности изменять niceness до отрицательных величин, если процесс reniced запущен от обычного пользователя (uid > 0).

При запуске reniced от обычного пользователя, niceness процесса может идти только в плюс. То есть, процесс с nice=11 не получится сделать с nice=9, например (без перезапуска процесса, конечно). Зато от суперпользователя такое работает.

Special thans

Авторам VK Teams. Без их мессенджера, с его "недостатками", не было бы этого костыля.