Сообщение создано: 22. 06. 2013 [23:07]
|
coderator
vitaly koubarev
Создатель темы
Зарегистрирован(а) с: 20.03.2013
Сообщения: 3
|
Стоит версия 0.8.0.6-1 для ubuntu. Создал в чистом проекте контроллер звуковой карты как по мануалу.
Данные идут. Но также растет количество Потерянных_кадров. Подключаю архивацию значений с канала - график строится, но постоянно идут периодические разрывы в нем, это и есть потерянные_кадры, как я понимаю.
Хотя по мануалу на скриншотах идет всё гладенько (но там явно более старая версия скады).
Пробовал на двух разных машинах - результат тот же.
Шестым чувством понимаю, что где-то что-то с приоритетами, но для меня это лес густой.
Хотя бы скажите, это не только у меня? Или может так и должно теперь? Спасибо!
|
Сообщение создано: 24. 06. 2013 [09:58]
|
roman
Roman Savochenko
Moderator Contributor Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3750
|
"coderator" wrote:
Стоит версия 0.8.0.6-1 для ubuntu. Создал в чистом проекте контроллер звуковой карты как по мануалу.
Данные идут. Но также растет количество Потерянных_кадров. Подключаю архивацию значений с канала - график строится, но постоянно идут периодические разрывы в нем, это и есть потерянные_кадры, как я понимаю.
Это проблема библиотеки portaudio и/или ALSA, поскольку API предусматривает вызов callback функции из потока этих библиотек и уже просто уведомление меня о факте потери. Т.е. этот поток не успевает вызываться достаточно, что-бы все кадры захватывать. В самой библиотеке это определяется параметром iParam.suggestedLatency, что фактически период этой задачи проверки данных в буфере звуковой карты, и который поставить более 0.2 секунд нельзя.
У меня заметная потеря кадров начинается с частот 96000, а на 44100 очень редко.
Поднятием приоритета через /etc/security/limits.conf решить эту проблему мне не удавалось, может конечно потому-что он берёт приоритет из вызывающего потока, который у меня всегда низкоприоритетен. В самом API возможности указать приоритет я не увидел.
Learn, learn and learn better than work, work and work.
|
Сообщение создано: 25. 06. 2013 [08:32]
|
roman
Roman Savochenko
Moderator Contributor Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3750
|
"roman" wrote:
Это проблема библиотеки portaudio и/или ALSA, поскольку API предусматривает вызов callback функции из потока этих библиотек и уже просто уведомление меня о факте потери. Т.е. этот поток не успевает вызываться достаточно, что-бы все кадры захватывать. В самой библиотеке это определяется параметром iParam.suggestedLatency, что фактически период этой задачи проверки данных в буфере звуковой карты, и который поставить более 0.2 секунд нельзя.
Точнее вообще 20мс. Из-за чего шанс выхода за этот цикл при записи в буфер увеличиваются.
Собственно поднять приоритет для потока библиотеки, через функцию callback удалось. Теперь потери стали очень редкими.
Планирую ещё оптимизировать процедуру записи в буфер до записи целыми блоками, что позволит ресурс захватывать только на блок и в целом, при правильных условиях, копировать блок целиком. Делаю это сейчас для DiamondBoards.
P.S. Если до конца месяца сделаю то попадёт в 0.8.0.7 LTS
Learn, learn and learn better than work, work and work.
|
Сообщение создано: 27. 06. 2013 [12:22]
|
roman
Roman Savochenko
Moderator Contributor Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3750
|
"roman" wrote:
P.S. Если до конца месяца сделаю то попадёт в 0.8.0.7 LTS
В рабочей версии устанавливать приоритет уже можно и у меня на 96000 потерь кадров нет.
Learn, learn and learn better than work, work and work.
|