The OpenNET Project / Index page

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

Разбираемся с "треском" в PulseAudio
Теория

При воспроизведении звука часть потока буферизируется перед отправкой в
устройство. Существует два подхода к наполнению буфера: условно "старый" -
статический буфер, состоящий из нескольких фрагментов, вставка каждого
следующего фрагмента по прерыванию (IRQ). Его плюс в предсказуемости - он
работает всегда, и всегда одинаково. Но есть у него и минусы - 50 прерываний в
секунду не дают процессору заснуть и энергосберегать. Не дают они ему и шанса
считать что-то тяжёлое - прерывания всё время "отвлекают" ядро на очень
простую, но "зудливую" задачу. Элементарная задача воспроизведения звука
становится неоправданно затратной. Вишенка на торте - постоянная задержка при
захвате звука: даже тогда, когда мы хотим минимальную задержку, она будет >=
нашему статическому буферу (обычно ~100 ms).

Второй подход (glitch free на языке маркетологов) подразумевает динамический
буфер и вставку фрагмента по таймеру, без использования прерываний. Он лишён
недостатков первого, но требует поддержки железом, приличных драйверов,
"сознательности" приложения, которое должно запросить себе комфортный буфер
(минимальный для программ захвата - 0-20ms, и большой для плееров - 200-2000ms).

Dropout - ситуация, в которой фрагмента не оказалось в буфере в момент его
воспроизведения. Одновременно является самой частой причиной звуковых
артефактов. Чем больше буфер, тем меньше шансов на dropout (но и задержка выше).

ALSA реализует и поддерживает только первый способ буферизации. PulseAudio
реализует оба, по умолчанию использует второй.

Что делать? Кто виноват?

Если вы слышите артефакты при воспроизведении звука через PulseAudio, первым
делом стоит перевести демон в "режим ALSA" и убедиться, что проблема в таймере:

/etc/pulse/default.pa:

   --- load-module module-udev-detect
   +++ load-module module-udev-detect tsched=0

   pulseaudio -k; pulseaudio --start (от пользователя)

Нагрузку на CPU можно уменьшить, увеличив размер фрагмента 

/etc/pulse/daemon.conf:

   --- #default-fragments 4
   +++ default-fragments = 2
   --- #default-fragment-size-msec 25
   +++ default-fragment-size-msec 125

но это увеличит задержку. Задержку можно уменьшить (но это увеличит нагрузку на CPU)

/etc/pulse/daemon.conf:

   --- #default-fragments 4
   +++ default-fragments = 8
   --- #default-fragment-size-msec 25
   +++ default-fragment-size-msec 5

Параметры default-fragments и default-fragment-size-msec имеют силу только если
вы выключили таймер (прописали tsched=0), или если он не поддерживается аппаратно.

Есть и менее радикальный вариант: принудительная буферизация на стороне таймера:

/etc/pulse/default.pa:

   --- load-module module-udev-detect
   +++ load-module module-udev-detect tsched_buffer_size=60000

На современных системах 60000 (это микросекунды) можно заменить на 30000 (или
даже меньшее число, я использую 23000)
 
07.04.2017 , Автор: leap42
Ключи: pulseaudio, sound, audio, linux / Лицензия: CC-BY
Раздел:    Корень / Пользователю / Запись и обработка звука

Обсуждение [ Линейный режим | Показать все | RSS ]
 
  • 1.1, EuPhobos, 07:25, 08/04/2017 [ответить] [смотреть все]
  • +/
    Может тут кто подскажет.
    Программа, в данном случае игра, расчитана на ALSA, у PulseAudio поднимается sink с надписью alsa-plugin, но этот sink очень быстро падает и снова поднимается.
    https://youtu.be/r9gEsDj1KRg (на видео артефакты OGL можно не смотреть)
    И так несколько минут, потом всё отлично, через несколько минут опять повторяется, после чего когда прекращается этот флап могут остаться характерные для PA хрипы, и т.д.
     
  • 1.2, die_russofobs, 09:56, 08/04/2017 [ответить] [смотреть все]
  • +/
    "[i]Но есть у него и минусы - 50 прерываний в секунду не дают процессору заснуть и энергосберегать. Не дают они ему и шанса считать что-то тяжёлое - прерывания всё время "отвлекают" ядро на очень простую, но "зудливую" задачу. Элементарная задача воспроизведения звука становится неоправданно затратной[/i]"
        - В винде ядро в играх отвлекается до 1000 раз в секунду только по таймеру  и  всёравно ...быстрее *NIX - судя по играм же в WINE.
    Вывод: у Торвальдса&WINE&co - руки из Ж. :(
    А, судя по современным минимальным системным запросам ядра и GUI, не уступающим тормозу Vist'е, за то всё Intel им всем - хорошо приплачивает...
     
     
  • 2.3, leap42, 14:09, 08/04/2017 [^] [ответить] [смотреть все] [показать ветку]
  • +/
    виндовые игрушечки, идущее на винде быстрее, чем не на винде - это ожидаемый эффект. в wine нормально работает только то, за что платят бабки разработчикам wine, а всё остальное - побочный эффект. у Торвальдса всё в порядке с руками, поищите его код и поймёте. что сказать то хотели?
     
     
  • 3.24, PnDx, 11:23, 28/04/2017 [^] [ответить] [смотреть все]
  • +/
    Особенно у Линуса commit 4ceb5db9757a удался. Хе-хе. 11 лет как бараны смотрели (по крайней мере, кому это по должности положено).
     
  • 2.4, Аноним, 17:32, 08/04/2017 [^] [ответить] [смотреть все] [показать ветку]
  • +/
    Вендовое ядро быстрее NIX А что Венда не кластерах из Top500 Да и в датацентр... весь текст скрыт [показать] [показать ветку]
     
     
  • 3.5, Stax, 19:09, 08/04/2017 [^] [ответить] [смотреть все]  
  • +/
    Ну, очевидно, у винды есть как минимум 3 очень неприятных проблемы - при которых... весь текст скрыт [показать]
     
     
  • 4.10, Аноним, 12:13, 11/04/2017 [^] [ответить] [смотреть все]  
  • +/
    Кластер тоже стоит денег MS лучше получить что-то за воздух, чем вылететь с рын... весь текст скрыт [показать]
     
  • 1.6, Аноним, 12:41, 10/04/2017 [ответить] [смотреть все]  
  • +/
    Интересно, насколько актуальна статья на wiki https www freedesktop org wiki ... весь текст скрыт [показать]
     
  • 1.7, iPony, 17:58, 10/04/2017 [ответить] [смотреть все]  
  • +1 +/
    Шёл 2017 год...
     
     
  • 2.12, Аноним, 11:38, 14/04/2017 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    Пони, хоть ты и дикое необузданное животное, каких поискать ещё, но тут я с тобо... весь текст скрыт [показать] [показать ветку]
     
  • 1.8, Crazy Alex, 21:38, 10/04/2017 [ответить] [смотреть все]  
  • +/
    1) 50 прерываний в секунду - это много и сильно нагружает систему? Really?

    2) у пульса появились свои драйверы? Насколько я знаю - нет, и он всё равно звук в итоге гонит через альсу. Каким чудом тогда получается режим "без прерываний"?

     
     
  • 2.9, leap42, 02:06, 11/04/2017 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    >> 50 прерываний в секунду - это много и сильно нагружает систему?
    > прерывания всё время "отвлекают" ядро на очень простую ... задачу.
    > элементарная задача
    >> у пульса появились свои драйверы?

    нет, приличные драйвера требуются именно от ALSA

    >> Каким чудом тогда получается режим "без прерываний"?

    монотонный таймер и высокий (отрицательный) приоритет

     
     
  • 3.11, Mihail Zenkov, 09:44, 14/04/2017 [^] [ответить] [смотреть все]  
  • +/
    Думаю Алекс хотел сказать, что из alsa прерывания никуда не делись, а PA добавляет еще свои прерывания/таймер для заполнения собственного буфера.

    Про нагрузку от прерываний вы сильно преувеличили: я занимаюсь оптимизацией энергопотребления в rockbox - даже на древнем arm (при частоте 38.4 MHz) вызов ~394 прерываний в секунду для отсылки данных в ЦАП дает практически нулевую нагрузку, если данные лежат в кэше. Только при обращении к памяти возникает потребление, но это неизбежно.

    Да и не понятно: почему вызов по таймеру должен потреблять меньше, чем прерывание? С прерыванием мы имеем гарантированное время отклика и можем вызывать его когда в буфере остался последний десяток байт. С таймером разброс время отклика будет большим: для предотвращения полного опустошения буфера, придется вызывать таймер в два раза чаще, чем прерывание.

     
     
  • 4.13, leap42, 11:58, 14/04/2017 [^] [ответить] [смотреть все]  
  • –1 +/
    может, я не прав, да, но powertop говорит однозначно: процессор сбрасывает частоту при работе по таймеру и не сбрасывает без него

    почитайте Лёнину статью, может, она что-то прояснит:
    http://0pointer.de/blog/projects/pulse-glitch-free.html

     
     
  • 5.14, Mihail Zenkov, 18:37, 14/04/2017 [^] [ответить] [смотреть все]  
  • +/
    CPU не сбрасывает частоту не от количества прерываний к примеру сейчас у меня ... весь текст скрыт [показать]
     
     
  • 6.15, Главные Редакторы. Избранное, 11:17, 16/04/2017 [^] [ответить] [смотреть все]  
  • +1 +/
    Подтверждаю. Был лпыт с Убунтой12 устанвленной на нетбук с слабеньким процессором Атом. Запускаю просмотр Ютюб на Фаерфоксе: видео тормозит, заметен пропуск кадров, процессор загружается на 100%. Скачиваю это же видео в файл на диске. Включаю просмотр через VLC. Наблюдаю ту же картину: видео тормозит, заметен пропуск кадров, процессор загружается на 100%. В настройках VLC выбираю вывод звука через Аппаратный интерфейс Интел, после чего получаю такой расклад: видео отображается плавно и процессор загружается на 2-5%. Для меня с тех пор вопрос - что такое ПульсАудио, закрыт окончательно.
     
     
  • 7.16, Mihail Zenkov, 19:22, 16/04/2017 [^] [ответить] [смотреть все]  
  • +/
    Для сравнения глянул нагрузку от jack на старом ноутбуке (2 x 1.66 MHz) с задержкой 11 ms (у PA она 25 ms по-умолчанию) - получил 0.4 - 0.5%.
     
     
  • 8.20, anonymous, 10:54, 18/04/2017 [^] [ответить] [смотреть все]  
  • +/
    > Для сравнения глянул нагрузку от jack на старом ноутбуке (2 x 1.66
    > MHz) с задержкой 11 ms (у PA она 25 ms по-умолчанию)
    > - получил 0.4 - 0.5%.

    Я так понял из документации на jack, что он полезен при realtime потребностях (запись звука, например). На обычном ноутбуке/десктопе он даёт какие-то преимущества в сравнии с просто использованием alsa с dmix?

     
     
  • 9.21, Mihail Zenkov, 13:05, 18/04/2017 [^] [ответить] [смотреть все]  
  • +/
    > На обычном ноутбуке/десктопе он даёт какие-то преимущества
    > в сравнии с просто использованием alsa с dmix?

    Нет. Он нужен для малой задержки (realtime) и для очень гибкого перенаправления звука между приложениями - реально нужен только тем, кто работает со звуком. Да и ресурсов он потребляет существенно больше (особенно памяти), чем alsa с dmix.

     
  • 7.17, Аноним, 14:08, 17/04/2017 [^] [ответить] [смотреть все]  
  • +/
    это прекрасно все, вот только как жить без него ну т е если его снести на у... весь текст скрыт [показать]
     
  • 7.22, Павел Самсонов, 09:21, 20/04/2017 [^] [ответить] [смотреть все]  
  • +/
    > Подтверждаю. Был лпыт с Убунтой12 устанвленной на нетбук с слабеньким процессором Атом.
    > Запускаю просмотр Ютюб на Фаерфоксе: видео тормозит, заметен пропуск кадров, процессор
    > загружается на 100%. Скачиваю это же видео в файл на диске.
    > Включаю просмотр через VLC. Наблюдаю ту же картину: видео тормозит, заметен
    > пропуск кадров, процессор загружается на 100%. В настройках VLC выбираю вывод
    > звука через Аппаратный интерфейс Интел, после чего получаю такой расклад: видео
    > отображается плавно и процессор загружается на 2-5%. Для меня с тех
    > пор вопрос - что такое ПульсАудио, закрыт окончательно.

    Pulse audio в моём представлении это как X сервер только для звука. Полезно при перенаправлении звука на другой комп.
    У меня есть стандартный Debian jessie на Asus EE PC. Из коробки никаких проблем с Ютубом не было. Вроде через пульсаудио, я даже не знаю если честно.

     
  • 6.18, Аноним, 14:10, 17/04/2017 [^] [ответить] [смотреть все]  
  • +/
    gt оверквотинг удален опять таки спрашиваю, как жить на убунте без пульсы тогд... весь текст скрыт [показать]
     
     
  • 7.19, Mihail Zenkov, 09:37, 18/04/2017 [^] [ответить] [смотреть все]  
  • +/
    > опять таки спрашиваю, как жить на убунте без пульсы тогда?

    Нет у меня ни пульсы, ни убунты :)
    В интернете есть куча статей про отключение/удаление PA.

     
  • 1.23, pavlinux, 15:42, 21/04/2017 [ответить] [смотреть все]  
  • +/
    Долб... Ламповый усилок, SACD, loseless вас спасут.
     

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




      Закладки на сайте
      Проследить за страницей
    Created 1996-2017 by Maxim Chirkov  
    ДобавитьРекламаВебмастеруГИД  
    Hosting by Ihor TopList