LINUX.ORG.RU

xanmod... рвет linux-rt в low-latency аудио задачах???

 , , , ,


3

5

Я в шоке…

Годами, буквально годами пытаюсь получить минимальную задержку при обработке аудио на ноутбуке с jack, а теперь и с pipewire.

Платформа - Sandy Bridge, встроенное аудио Realtek ALC272.

Всегда считал нормой для этого ноутбука буфер 48000 Гц / 256 семплов (5,3 мс задержка) (кто в теме то поймет что это). Тут на ЛОРе мне много раз писали что это совсем не круто. Да я и на слух слышу задержку при игре на гитаре. Это все на обычном ядре, дефолтном в дистрибутивах. При меньшем буфере стабильно не работает.

Периодически я решал озаботиться улучшением, первое что советуют везде - использовать linux_rt вместо обычного ядра. Это немного улучшало ситуацию, можно было получить вдвое меньшую задержку 48000/128 (2,7 мс). Но не очень стабильно. Это - тоже совсем не айс!

И вот, чисто случайно, без объявления войны, я ставлю NixOS и в нем ядро xanmod 5.14. Происходит какая-то мистика!

Я выставляю 48000 / 64 (это уже 1.3 миллисекунды задержки). Все гранитно стабильно!

Выставляю 48000 / 32 (тридцать два, Карл!) - работает! Иногда похрюкивает.

КАК???? Это вообще законно??

Вопрос у меня вот в чем - как именно в xanmod так выходит, какие опции, или модификации, могут повлиять на то что стало вот так?

ИТАК

Пожалуй подведу окончательные итоги.

  1. Практически все широко распространенные в сети рекомендации надо читать навыворот. Почему - отдельный вопрос.

  2. Лучше всего для обеспечения low-latency при работе с аудио подходит обычное, общего назначения ядро. Даже ванильное ядро с kernel.org может обеспечить экстремально низкую задержку на моем музейном железе.

  3. Ядро linux_rt подходит заметно хуже. Я не знаю почему. Видимо оно для совсем других задач, а то что оно работало со звуком лучше - дела давно минувших дней. Современные версии обычного ядра работают лучше.

  4. Рекомендации по настройке ядра, по CONFIG_HZ, PREEMPT - можно выполнять, можно нет. Низкая задержка достижима с любыми вариантами этих настроек.

  5. Желательно собирать ядро с минимальной конфигурацией. по-видимому я столкнулся с тем, что на конфигурации от Arch Linux на моем железе что-то лишнее мешало.

★★★★

Последнее исправление: James_Holden (всего исправлений: 3)
Ответ на: комментарий от James_Holden

Конечно внесёт. Но альтернативные подходы к профилированию с меньшими накладными затратами сложнее, а картинку оно всё равно может дать, точнее 100% даст при правильно подобранной нагрузке и частоте сэмплирования.

pon4ik ★★★★★
()
Ответ на: комментарий от James_Holden

Так приоритеты процессов же разные.

Остальные всё равно планируются и выполняются, по идее, наверно, приоритет, видимо влияет на то, какой квант времени выделяется на процесс, не могут же остальные не выполняться совсем, Где-то у таненбаума была формула, по которой рассчитывалось, сколько процессов может быть выполнено, как rt на процессоре, я точно не знаю, Вообще-то, как работает планировщик, но он не может полностью защимить другие процессы, по идее

IvanR ★★★
()
Последнее исправление: IvanR (всего исправлений: 1)
Ответ на: комментарий от IvanR

приоритет, видимо влияет на то, какой квант времени выделяется на процесс

100% притом относительно количества процессов которые ещё планируются на этом ядре. По-крайней мере, пока политика планирования RT_PREEMPTIVE, с RT_FIFO уже по-другому дела обстоят немного.

pon4ik ★★★★★
()
Ответ на: комментарий от James_Holden

Справедливости для perf даже на высоких частотах может показывать cpu bound проблемы с точностью до единиц микросекунд. Но с вводом выводом всё как всегда сложнее конечно.

pon4ik ★★★★★
()
Ответ на: комментарий от pon4ik

я ж не универсальный ядерщик, я только некоторые вопросы памяти исследовал, в rt теме не разбираюсь

hakavlad ★★★
()
Ответ на: комментарий от hakavlad

Погоди, сейчас все будет. У меня тут затыки, не могу с мобилы файл на линукс скинуть (не связанный с сабжем), бешусь пока.

James_Holden ★★★★
() автор топика
Ответ на: комментарий от James_Holden

бросается в глаза это

# CONFIG_PREEMPT is not set

не знаю, имеет ли это значение, если ядро и так рт.

BTW, есть ли разница между рт и обычным ядром дистрибутива?

hakavlad ★★★
()
Ответ на: комментарий от hakavlad

бросается в глаза это

Ну так вместо этого ж стоит CONFIG_PREEMPT_RT=y

hakavlad ★★★
()
Ответ на: комментарий от hakavlad

BTW, есть ли разница между рт и обычным ядром дистрибутива?

Есть, на обычном более-менее работает только с задержкой 5,3 мс. Так практически стабильно. 2,6 мс - практически не работает.

James_Holden ★★★★
() автор топика

Предположу, что CPU шедулер решает. Помимо некоторых отличий в конфиге и прочих патчей, в xanmod еще и другой шедулер TT (Task Type).

Ради эксперимента можно попробовать собрать ванильное ядро чисто с TT шедулером и посмотреть, какая задержка будет. Ну и герцовку таймера на 500 Hz поставить тоже.

Kron4ek ★★★★★
()
Последнее исправление: Kron4ek (всего исправлений: 2)

я правльно понимаю, что это на встройке, а не юсб интерфейсе? и какое железо?

kott ★★★★★
()
Ответ на: комментарий от James_Holden

Я бы поэксперементировал ещё с CONFIG_HZ_500/1000.

Ещё интересно как понимать PREEMPT_DYNAMIC.

Ещё, есть подозрение что anmod ядрышко собрано с lto и если бинарь драйвера не блоб, те же 20-30 процентов разницы легко могут оказаться там.

pon4ik ★★★★★
()
Последнее исправление: pon4ik (всего исправлений: 1)
Ответ на: комментарий от pon4ik

Ещё интересно как понимать PREEMPT_DYNAMIC.

Это для переключения режима preemption (между none, voluntary и full) через параметры ядра. То есть раньше можно было только через конфиг во время компиляции менять, а теперь с PREEMPT_DYNAMIC можно через параметры ядра. Например:

preempt=full

Ещё, есть подозрение что anmod ядрышко собрано с lto и если бинарь драйвера не блоб, те же 20-30 процентов разницы легко могут оказаться там.

Точно нет, иначе бы в конфиге была включена одна из опций: LTO_CLANG_FULL или LTO_CLANG_THIN.

Kron4ek ★★★★★
()
Последнее исправление: Kron4ek (всего исправлений: 3)
Ответ на: комментарий от kott

Да, на встройке.

Железо - Realtek ALC272, ноут на SandyBridge. Проц древний core i3.

James_Holden ★★★★
() автор топика
Ответ на: комментарий от James_Holden

Везде DAW монопольно захватывает, ЕМНИП.

Щас запустил Sonar сквозь ASIO на десяточке, ютуба в лисе как гавкала, так и гавкает.

thesis ★★★★★
()
Ответ на: комментарий от James_Holden

Платформа - Sandy Bridge

и дискретка тех же годов. У моего такое же... почтенное всё.

NixOS и в нем ядро xanmod 5.14

glxgears точно работает через шмеля

Ну, что... Попробовал на Ubuntu 20.04 с дровами 390.

~$ uname -r
5.15.11-xanmod1-tt

и немедленно решил проверить не только Шмеля, но и OpenCL, за коим, собственно, Шмель лично моему старикашке и нужен.

~$ optirun darktable -d opencl
[  120.103368] [ERROR]The Bumblebee daemon has not been started yet or the socket path /var/run/bumblebee.socket was incorrect.
[  120.103399] [ERROR]Could not connect to bumblebee daemon - is it running?
~$ systemctl status bumblebeed.service
● bumblebeed.service - Bumblebee C Daemon
     Loaded: loaded (/lib/systemd/system/bumblebeed.service; enabled; vendor preset: enabled)
     Active: activating (auto-restart) (Result: exit-code) since Sat 2021-12-25 20:04:55 +04; 8s ago
    Process: 2064 ExecStart=/usr/sbin/bumblebeed (code=exited, status=1/FAILURE)
   Main PID: 2064 (code=exited, status=1/FAILURE)

Так-то. Жаль, конечно. Но фиг с ним.

~$ uname -r
5.4.0-91-lowlatency

~$ systemctl status bumblebeed.service
● bumblebeed.service - Bumblebee C Daemon
     Loaded: loaded (/lib/systemd/system/bumblebeed.service; enabled; vendor preset: enabled)
     Active: active (running) since Sat 2021-12-25 20:23:49 +04; 28s ago
   Main PID: 742 (bumblebeed)
      Tasks: 1 (limit: 14207)
     Memory: 1.4M
     CGroup: /system.slice/bumblebeed.service
             └─742 /usr/sbin/bumblebeed

дек 25 20:23:49 RockseR systemd[1]: Started Bumblebee C Daemon.
дек 25 20:23:49 RockseR bumblebeed[742]: [    5.675049] [INFO]/usr/sbin/bumblebeed 3.2.1 started
Dementy ★★★
()
Последнее исправление: Dementy (всего исправлений: 1)
Ответ на: комментарий от Dementy

Попробовал на Ubuntu 20.04 с дровами 390

А ты уверен вообще что у тебя дрова 390 установлены корректно и собраны под xanmod ядро? Откуда в Ubuntu 20.04 патч на nvidia-390 под ядро 5.15? На 99% у тебя тупо модуль ядра nvidia не собирается через dkms. Исходники nvidia драйвера нужно патчить под новые ядра.

James_Holden ★★★★
() автор топика
Ответ на: комментарий от James_Holden

ы уверен вообще что у тебя дрова 390 установлены корректно

Да, насколько это вообще возможно.

и собраны под xanmod ядро?

Абсолютно уверен, что собраны они не под XanMod, а под 5.4 те ядра, что есть в репах, которые подпатчены по соображениям Каноникл, и под которые собрано всё, из чего сделана Убунта.

На 99% у тебя тупо модуль ядра nvidia не собирается через dkms.

Не на 99, а на 100. :D

Однако,

В Ubuntu 20.04 ядро 5.4. С XanMod 5.4 работает всё, включая OpenCL на дискретной карте.

С XanMod 5.10 и 5.13 работает всё, исключая OpenCL.

Драйвер nvidia-390, Ubuntu 20.04, ядра 5.10, 5.13, OpenCL

так что, сдается мне, дело не в наборе патчей (XanMod-фиганмод, Каноникл-фигоникл), а в том, с какими версиями ядер работают 390 из каноникловских реп. А с какими не работают. А с какими одно работает, а другое - нет.

ЗЫ. Вкорячивал как-то в Убунту дрова с сайта nvidia. Теперь боязно, ну его, у меня сейчас всего один ноутбук.

Dementy ★★★
()
Последнее исправление: Dementy (всего исправлений: 2)
Ответ на: комментарий от Dementy

с какими версиями ядер работают 390 из каноникловских реп. А с какими не работают

Конечно. И не будет работать - надо патчить драйвер nvidia. С сайта nvidia тоже работать не будет - все равно патчить надо.

В нормальных дистрибутивах типа Arch есть патчи под последние ядра, там все работает.

На NixOS сейчас я брал патч от Арча (благо пропатчить пакет на NixOS тривиально).

James_Holden ★★★★
() автор топика

А я вчера компилял-компилял, да не выкомпилял. Свап съёло, память съело, всё зависло... Да и вообще, что-то полюбил мой комп утекать непойми куда. Смотрю по показателям памяти, все программы в пределах разумного, вроде есть свободная память (всего 8гигов) но свап забит (всего один гиг) и комп люто тормозит. От чего это? Новые сособы работы с видеопамятью в ядре дают о себе знать? Или новые движки файрфокса? Как узнать кто сидит в свопе и почему?

R_He_Po6oT ★★★★★
()
Ответ на: комментарий от R_He_Po6oT

Ну здрасьте, приехали. Сто раз обсуждали ж уже.

  1. swap on zram only, disksize=1.5*MemTotal (то есть можно 12 гиг)
  2. nohang или earlyoom демон
  3. oom-sort из пакета nohang - проверять кто сидит в свопе.
  4. высокий swappiness или le9 patch на ядро.

всего 8гигов

С такими объемами можно хром собирать без тормозов.

см также Просто оставлю это здесь: Игра в supertux2 с множественными `tail /dev/zero` в фоне без зависаний

см также https://notes.valdikss.org.ru/linux-for-old-pc-from-2007/

hakavlad ★★★
()
Ответ на: комментарий от hakavlad

Это здорово, конечно, я помню наши разговоры, но ломать систему и сильно кастомизировать её не хочется, потому что сиди потом, вспоминай. Не так давно появился systemd-swap, теперь он уже устаревший. Завтра zswap отвалится и опять начинай сначала. Сейчас временами мне это совершенно не мешает заниматься ни чем, тритыщимильён приложений и всё работает, а временами прям невозможно, запустил браузер, всё зависло.

Кстати, отключил сегодня свап, уже несколько раз упал браузер. Похоже я нашёл виновника. Поставил сейчас собирать ядро, может получится?

R_He_Po6oT ★★★★★
()
Ответ на: комментарий от R_He_Po6oT

но ломать систему

Так она сейчас сломана, а вы ее как раз вылечите.

Поставил сейчас собирать ядро

Какое ядро? С какими патчами?

hakavlad ★★★
()
Ответ на: комментарий от R_He_Po6oT

не забудьте проверить или поправить значения ручек: vm.anon_min_kbytes, vm.clean_min_kbytes, vm.clean_low_kbytes.

zram+xanmod способны дать хорошую отзывчивость при нехватке памяти при правильных настройках.

hakavlad ★★★
()
Последнее исправление: hakavlad (всего исправлений: 1)
Ответ на: комментарий от James_Holden

А в других ОС типа как-то иначе? Везде DAW монопольно захватывает, ЕМНИП. В линуксе как раз с этим лучше.

Час назад играл через конвольвер в cakewalk, параллельно слушал ютуб в браузере.
Если два ASIO-приложения запустить, думаю, тоже работать будет, если каждому свои каналы отдать. Но надо пробовать. Венда.

ist76 ★★★★★
()

@hakavlad @Kron4ek @pon4ik

Чудеса ещё чудесатее!

Эффект есть только при работе через pipewire!

Если запустить Ardour на голой alsa, то все сыпется, на 48000/64 вообще не работает!

Это странно само по себе, обычно на чистой alsa стабильнее с более низкой задержкой.

А может как-то это xanmod ядро знает про pioewire и специально его как-то приоритетные шедулит?

Пробовал запускать pipewire и с rtkit модулем и без. Эффект есть в обоих случаях.

James_Holden ★★★★
() автор топика
Последнее исправление: James_Holden (всего исправлений: 1)

performance

реальное время и производительность - разные вещи, когда вы необучаемые уже поймёте

anonymous
()
Ответ на: комментарий от anonymous

Посмотрел, вроде и влияние есть, но как-то не до конца понятное.

У pipewire высокий приоритет, но не максимальный. Снижение приводит к xrun’ам, но все равно не таким сильным как у ardour на голой alsa. Повышение до максимума и выбор FIFO планировщика чуть-чуть улучшает работу на 96000/64, но не делает идеальной.

James_Holden ★★★★
() автор топика
Ответ на: комментарий от James_Holden

@R_He_Po6oT скажи что я не схожу с ума…

АААААААААааааааа!!!!

Обычное ядро от NixOS, вообще не PREEMPT, версии 5.15 - работает еще лучше! С такой же низкой задержкой как xanmod, но еще стабильнее! Что вообще происходит???

linux-rt 5.10 от NixOS работает намного хуже.

Одно из двух - либо в последних ядрах что-то подкрутили и они теперь low latency, либо в NixOS что-то подкрутили.

Сейчас проверю в своем LFS на ванильном 5.14 (скачано с kernel.org и только le9 патч наложен).

Проверил - вообще все плохо… Конфиг ядра от Арча взят. Я нихрена не понимаю…

Получается в арче как-то не так ядро собирают???

James_Holden ★★★★
() автор топика
Последнее исправление: James_Holden (всего исправлений: 1)
Ответ на: комментарий от James_Holden

Сейчас проверю в своем LFS

Ты используешь LFS в качестве рабочей системы? Однако...

hateWin ★☆
()
Ответ на: комментарий от James_Holden

Обычное ядро от NixOS, вообще не PREEMPT, версии 5.15 - работает еще лучше!

Там же вроде PREEMPT_VOLUNTARY включен, или я ошибаюсь? А в Арчевском конфиге полный PREEMPT. Можешь попробовать на своем ванильном 5.14 тоже на voluntary переключиться, добавив в параметры запуска ядра:

preempt=voluntary

Возможно еще, что в 5.15 что-то наулучшали, так что стоит попробовать 5.15 с Арчевским конфигом.

Kron4ek ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.