[Comm] JACK, /proc/sys/kernel/sched_rt_runtime_us, CONFIG_RT_GROUP_SCHED

Yuriy Al. Shirokov yuriy.shirokov на gmail.com
Пт Май 8 21:35:42 MSK 2020


пт, 8 мая 2020 г. в 20:53, Michael Shigorin <mike на altlinux.org>:
>> Это лечится командой
>> sudo sysctl -w kernel.sched_rt_runtime_us=-1
>> но вряд ли это штатный способ заставить jackd работать.
> Насколько понимаю, это попросту отключает RT:
...
> this will limit time reserved to realtime
> processes.
...
>   * A run time of -1 specifies runtime == period, ie. no limit.
> --- http://www.kernel.org/doc/Documentation/scheduler/sched-rt-group.txt

Хм, я понял процитированное (и прочую документацию на RT-возможности
ядра, а также код цепочки вызовов jackd → pthreads → ядро, см. то, что
я пересказываю в теме на форуме) с точностью до наборот — при значении
sched_rt_runtime_us, равном -1 RT-процессы могут отхватить себе любую
долю периода планирования, хоть весь — полностью прекратив исполнение
не-RT процессов.

> Я бы почитал документацию jack -- насколько помню,
> конфигурирование RT всегда было делом барским (root).

Конфигурируется-то понятно от рута. Вопрос и заключается в том, как
конфигурировать.

Я читал документацию jack ещё до того, как создать тему на форуме и
понял её так:
 - если ядро сконфигурировано _без_ CONFIG_RT_GROUP_SCHED=y,
RT-возможности настраиваются через параметр rtprio в
/etc/security/limits.d/ — в нашем джеке это есть «из коробки»;
 - если ядро сконфигурировано _с_ CONFIG_RT_GROUP_SCHED=y (для
текущего std-def это так), RT-возможности делегируются
непривилегированным пользователям через механизм cgroups:
«By default all bandwidth is assigned to the root group and new groups
get the period from /proc/sys/kernel/sched_rt_period_us and a run time
of 0. If you want to assign bandwidth to another group, reduce the
root group's bandwidth and assign some or all of the difference to
another group.

Realtime group scheduling means you have to assign a portion of total
CPU bandwidth to the group before it will accept realtime tasks.
Therefore you will not be able to run realtime tasks as any user other
than root until you have done that, even if the user has the rights to
run processes with realtime priority!»
(из того же https://www.kernel.org/doc/Documentation/scheduler/sched-rt-group.txt).

В документации на jack даже приведён пример конфигурирования через
cgroups! Вот здесь:
https://github.com/jackaudio/jackaudio.github.com/wiki/Cgroups

Есть только одна проблема — в Альте нет ни /etc/cgconfig.conf, ни
/etc/cgrules.conf, ни сервиса cgconfig в systemd. И вообще
документации по рулению cgroups в Альте я ни на вики, ни где-либо ещё
не нашёл.


Подробная информация о списке рассылки community