Автор Тема: РЕШЕНО jackd: Cannot use real-time scheduling (RR/20)(1: Operation not permitted  (Прочитано 10361 раз)

Оффлайн yushi

  • Участник
  • *
  • Сообщений: 72
Оно на месте:
https://packages.altlinux.org/ru/p9/srpms/kernel-image-rt/rpms

Версия 4.19. Даже если сейчас с ним заработает моя видеокарта (что не факт), стратегически это тупик.

Цитировать
С ядром rt должно работать без костылей (не проверял пока).

Необходимость перезагружаться каждый раз, когда надо что-то записать в Ardour, это, может быть, и не костыль, но неудобство, обессмысливающее всю затею.

Собственно, у меня всё работает. Мне просто хочется узнать, какой штатный способ заставить работать JACK предлагает человек, включивший CONFIG_RT_GROUP_SCHED=y в альтовом std-def. Или хотя бы узнать больше об этих механизмах от тех, кто их реально использует. Потому что внятной документации, как это часто бывает с поттерингоподелиями, мне найти не удалось.

Оффлайн Антон Мидюков

  • alt linux team
  • ***
  • Сообщений: 5 182
  • antohami@
Собственно, у меня всё работает. Мне просто хочется узнать, какой штатный способ заставить работать JACK предлагает человек, включивший CONFIG_RT_GROUP_SCHED=y в альтовом std-def.

В багзиллу на ядро std-def.

Оффлайн Антон Мидюков

  • alt linux team
  • ***
  • Сообщений: 5 182
  • antohami@
С ядром rt должно работать без костылей (не проверял пока).

Работает.

Оффлайн yushi

  • Участник
  • *
  • Сообщений: 72
Собственно, у меня всё работает. Мне просто хочется узнать, какой штатный способ заставить работать JACK предлагает человек, включивший CONFIG_RT_GROUP_SCHED=y в альтовом std-def.

В багзиллу на ядро std-def.

Не согласен. Чтобы вешать баг на ядро, надо хорошо понимать происходящее.

Я себя достаточно компетентным в вопросе RT-фичей планировщика не считаю (собственно, всё, что я знаю по теме, изложено выше по треду). Я прошу объяснить мне, что происходит, а не требую вносить в конфиг стандартного ядра изменения, суть которых я понимаю не до конца.

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
Люди, принимающие такие решения, вообще заглядывают на этот форум?

:-) Парафраз на одесский анекдот:
"Мойша, ви таки думаете шо они сюда заходят? Ну таки ви ошибаетесь."

И вот теперь у меня вопросы.
  • Зачем в std-def включена опция CONFIG_RT_GROUP_SCHED?
  • Как включивший эту опцию человек предлагает запускать от непривилегированного пользователя приложения, нуждающиеся в режиме реального времени (например, jackd)?
  • Можно ли, не меняя конфиг ядра std-def, сделать jackd работоспособным «из коробки»?

Скажем так, с таким я пошёл бы сразу в рассылку комьюнити. Но более вероятно даже и в сизифную.

У меня была серьёзная проблема ядерного уровня, но разгребать её в альтах, от начала до конца, мне всё пришлось самому. Как финал той эпопеи, после глубокого и длительного дайвинга, самому пришлось подсказать решение для фикса альтового ядра. Это к тому, что форум вопросы такого уровня не решает. Альтовый форум, это не тот уровень.

Оффлайн yushi

  • Участник
  • *
  • Сообщений: 72
Скажем так, с таким я пошёл бы сразу в рассылку комьюнити. Но более вероятно даже и в сизифную.

Написал. Мне там помочь не смогли, но я тем времем разобрался сам.

Ключевой момент: сервис cgconfig в Альте на самом деле есть, в пакете cgroup — просто этот пакет не ставится по умолчанию установщиком P9. После его установки получилось сделать всё почти так, как описано в документации на jackd: https://github.com/jackaudio/jackaudio.github.com/wiki/Cgroups#method-2

В /etc/cgconfig.conf надо дописать
group rtaudio {
        perm {
                task {
                        uid = root;
                        gid = audio;
                }
                admin {
                        uid = root;
                        gid = root;
                }
        }
        cpu {
                cpu.rt_runtime_us = 950000;
        }
}
а в /etc/cgrules.conf:
@audio   cpu    rtaudio/

После чего сделать сервисы cgred и cgconfig стартующими при запуске системы и перезагрузиться:
$ sudo systemctl enable cgred
$ sudo systemctl enable cgconfig
$ systemctl reboot

Проверяем. Было:
$ chrt -f 80 echo "I'm chrt'ed!"
chrt: failed to set pid 0's policy: Операция не позволена
Стало:
$ chrt -f 80 echo "I'm chrt'ed!"
I'm chrt'ed!

Ну и JACK, понятно, запускается в RT-режиме без бубна и костылей.

Тему помечаю как решённую, однако неплохо бы что-то с этим сделать на уровне дистрибутива.
Я вижу два выхода:
  • оторвать нафиг CONFIG_RT_GROUP_SCHED=y — если уж сам Поттеринг признал, что его поделие не работает и попросил отключить эту настройку в ядре Fedora;
  • сделать jack-audio-connection-kit  зависимым от cgroup и включить в его состав вышеприведённые или похожие конфиги.

Решение, как мне кажется, должны принимать создатели дистрибутива и зависеть оно должно от того, пользуется ли кто-то на самом деле ограничением доступа к RT-возможностям планировщика через cgroups.

Оффлайн yushi

  • Участник
  • *
  • Сообщений: 72
Вот теперь и правда решено.

Начиная с 5.4.41, настройка CONFIG_RT_GROUP_SCHED в std-def отключена и jackd запускается и работает без бубна.