VIDEOCHAT  ::   FAQ  ::   Поиск  ::   Регистрация  ::   Вход

Failed to get 160 samples from read factory

Проблемы Asterisk без вэб-оболочек и их решения

Модераторы: april22, Zavr2008

dendroid
Сообщения: 19
Зарегистрирован: 08 ноя 2013, 14:34

Re: Failed to get 160 samples from read factory

Сообщение dendroid »

Код: Выделить всё

~# cat /sys/devices/system/clocksource/clocksource0/available_clocksource
tsc hpet acpi_pm
~# cat /sys/devices/system/clocksource/clocksource0/current_clocksource
tsc
~# cat /boot/config-$(uname -r) | grep CONFIG_NO_HZ
CONFIG_NO_HZ=y
Вырезка из статьи ( http://www.ibm.com/developerworks/ru/li ... een-linux/ ):
Одной из ключевых разработок группы Green Linux Workgroup и ее партнеров является ядро, работающее в бестактовом режиме. Как уже говорилось, в состоянии бездействия ядро GNU/Linux непрерывно ищет, чем бы заняться. Обычно ядро выполняет прерывание по таймеру примерно каждые 4 мс, чтобы проверить, не нужно ли планировать новые задачи. Начиная с версии 2.6.21 у ядра появился бестактовый режим, в котором вычисляется, когда нужно будет планировать новые задачи, и таймер устанавливается на это время, что позволяет процессору оставаться в состоянии с наименьшим потреблением в течение гораздо больших периодов времени (несколько секунд), тем самым потребляя меньше энергии.
Хотя бестактовый режим зачастую включен по умолчанию, вы можете проверить, включен ли он, следующей командой:
cat /boot/config-$(uname -r) | grep CONFIG_NO_HZ

Если в выводе будет CONFIG_NO_HZ=y, бестактовый режим включен. CONFIG_NO_HZ=n означает, что он выключен.
ztdummy

Установка ztdummy http://www.voip-info.org/wiki/view/Aste ... er+ztdummy

по итогу: у меня не установлен модуль usb uhci, да и при попытке собрать выбивает:

Код: Выделить всё

/usr/src/zaptel/kernel/zconfig.h:26:28: fatal error: linux/autoconf.h: No such file or directory
compilation terminated.
make[3]: *** [/usr/src/zaptel/kernel/pciradio.o] Error 1
make[2]: *** [_module_/usr/src/zaptel/kernel] Error 2
make[2]: Leaving directory `/usr/src/linux-headers-3.5.0-23-generic'
make[1]: *** [modules] Error 2
make[1]: Leaving directory `/usr/src/zaptel'
make: *** [all] Error 2
на днях буду разбираться, походу дела попробую на других дистрибутивах.
Аватара пользователя
Sfinx
Сообщения: 672
Зарегистрирован: 21 июн 2011, 23:40
Откуда: Odessa
Контактная информация:

Re: Failed to get 160 samples from read factory

Сообщение Sfinx »

угм, NO_HZ=y а должно стоять CONFIG_HZ_PERIODIC=250 или лучше 1000

а в дистре не установлены хедеры ядра
Rus

-----------
SfinxSoft
http://sfinxsoft.com
dendroid
Сообщения: 19
Зарегистрирован: 08 ноя 2013, 14:34

Re: Failed to get 160 samples from read factory

Сообщение dendroid »

Код: Выделить всё

apt-get install linux-headers-`uname -r`
linux-headers-3.5.0-23-generic is already the newest version.
Вот эту проблему:
/usr/src/zaptel/kernel/zconfig.h:26:28: fatal error: linux/autoconf.h: No such file or directory
решило:

Код: Выделить всё

sudo -i
cd /lib/modules/$(uname -r)/build/include/linux 
ln -s ../generated/utsrelease.h 
ln -s ../generated/autoconf.h
теперь выбивает:

Код: Выделить всё

zaptel.c:6433: warning: (near initialization for `zt_fops')
...
/usr/src/zaptel/kernel/zaptel-base.c:7768:2: error: unknown field ‘ioctl’ specified in initializer
гугл подсказывает, что подобные ошибки возникают если пытаешься собрать старый модуль под новое ядро. Буду смотреть дальше..

Код: Выделить всё

~# cat /boot/config-$(uname -r) | grep CONFIG_HZ
# CONFIG_HZ_100 is not set
CONFIG_HZ_250=y
# CONFIG_HZ_300 is not set
# CONFIG_HZ_1000 is not set
CONFIG_HZ=250
Значения CONFIG_HZ, если я правильно понял должны выставляться при компиляции ядра. Собирать ядро очень не хочется.
Вот инфа по значениям параметра CONFIG_HZ http://habrahabr.ru/post/106820/. Если кратко, то есть патч для изменения этого параметра, вот линк: https://github.com/damentz/zen-kernel?.
Аватара пользователя
Sfinx
Сообщения: 672
Зарегистрирован: 21 июн 2011, 23:40
Откуда: Odessa
Контактная информация:

Re: Failed to get 160 samples from read factory

Сообщение Sfinx »

это Вы собираете старый zaptel под новое ядро ;)

качать нужно dahdi прямо с гнезда дижиум :

http://downloads.asterisk.org/pub/telep ... ent.tar.gz

в пересборке ядра ничего страшного нет, я делаю это с 90-стых годов - и ничего, жив ;)

как вариант можно взять ядро с любого телефонного дистра (elastix) - там по идее уже все должно быть заточено. на всякий случай спросите тут на форуме, так как я собираю ядра сам и elastix видел один раз и то на картинке, поэтому точно не уверен. логика подсказывает что вроде там все должно быть ok. еще лучше не юзать старый астер - 1.8.x - это мягко говоря - отстой.
Rus

-----------
SfinxSoft
http://sfinxsoft.com
Аватара пользователя
Sfinx
Сообщения: 672
Зарегистрирован: 21 июн 2011, 23:40
Откуда: Odessa
Контактная информация:

Re: Failed to get 160 samples from read factory

Сообщение Sfinx »

Код: Выделить всё

cat /sys/devices/system/clocksource/clocksource0/current_clocksource
tsc
забыл сказать - это нужно делать после того как случилась незадача с записью, так как tsc может глючить в конкретно взятом железе. Ядро Linux отслеживает стабильность tsc через спец. watchdog механизм - если tsc "поплыл", в dmesg будет что-то типа про "unstable tsc detected, switching to the next available clock source". в любом случае ztdummy - это самый простой путь.
Rus

-----------
SfinxSoft
http://sfinxsoft.com
dendroid
Сообщения: 19
Зарегистрирован: 08 ноя 2013, 14:34

Re: Failed to get 160 samples from read factory

Сообщение dendroid »

сегодня день открытий :D
Historical Note

At the time of Asterisk 1.4's release, Zaptel (now DAHDI) was used to provide timing to Asterisk, either by utilizing telephony hardware installed in the computer or via ztdummy (a kernel module) when no hardware was available.
When DAHDI was first released, the ztdummy kernel module was renamed to dahdi_dummy. As of DAHDI Linux 2.3.0 the dahdi_dummy module has been removed and its functionality moved into the main dahdi kernel module. As long as the dahdi module is loaded, it will provide timing to Asterisk either through installed telephony hardware or utilizing the kernel timing facilities when separate hardware is not available.
Вот ссылка про модули времени в asterisk: https://wiki.asterisk.org/wiki/display/ ... Interfaces
У меня был установлен dahdi, вот только я отключил dahdi_dummy. Добавил через /etc/dahdi/modules прописав dahdi_dummy. Проверил работу:

Код: Выделить всё

~# dahdi_test -c 4
Opened pseudo dahdi interface, measuring accuracy...
99.998% 99.994% 99.998% 100.000%
--- Results after 4 passes ---
Best: 100.000% -- Worst: 99.994% -- Average: 99.997438%
Cummulative Accuracy (not per pass): 99.998
Убрал из загрузки стандартный модуль времени в /etc/asterisk/modules.conf прописав noload => res_timing_timerfd.so и явно указал загрузку load => res_timing_dahdi.so
Теперь при тесте в asterisk выдает (еще не нашел почему не больше 1001 "тика"):

Код: Выделить всё

*CLI> timing test 100
Attempting to test a timer with 100 ticks per second.
Using the 'DAHDI' timing module for this test.
It has been 1009 milliseconds, and we got 101 timer ticks
Однако запрос modprobe --list | grep dahdi показывает что dahdi_dummy не загружен. И при запросе в asterisk:

Код: Выделить всё

*CLI> dahdi show status
Description            Alarms  IRQ    bpviol CRC4   Fra Codi Options   LBO
Wildcard TDM410P               OK          0      0      0          CAS Unk    0 db (CSU)/0-133 feet (DSX-1)
DAHDI_DUMMY/1 (source: HRtimer) 1       UNCONFI 0      0      0          CAS Unk    0 db (CSU)/0-133 feet (DSX-1)
Как я понимаю, asterisk сообщает что я не сконфигурировал модуль DAHDI_DUMMY.

В данный момент ошибки остались. Все больше думаю в сторону Debian и Asterisk 11 cert. Но хотел бы разобраться. Не совсем (точнее даже совсем) не понимаю как связано время в tsc и dahdi_dummy.
Dahdi_dummy берет данные из tsc и "поставляет" их asterisk ? И не уверен что все правильно сделал для использования dahdi_dummy астериском.
ded
Сообщения: 15627
Зарегистрирован: 26 авг 2010, 19:00

Re: Failed to get 160 samples from read factory

Сообщение ded »

Если в машине есть Wildcard TDM410P, то DAHDI_DUMMY не нужен.
dendroid
Сообщения: 19
Зарегистрирован: 08 ноя 2013, 14:34

Re: Failed to get 160 samples from read factory

Сообщение dendroid »

видел инфу об этом, спасибо, что подтвердили. Ну в любом случае не помешало ознакомится, так как на тестовой машине карточка не установлена.
dendroid
Сообщения: 19
Зарегистрирован: 08 ноя 2013, 14:34

Re: Failed to get 160 samples from read factory

Сообщение dendroid »

еще заметил пару моментов:

Код: Выделить всё

Read factory 0x7fe0d0007c70 was pretty quick last time, waiting for them.
вот это сообщение постоянно крутится при звонках через шлюз (sip транк до сервера asterisk, кодек alaw, при входящем звонке включается Playback)

Код: Выделить всё

[2013-11-12 00:23:31] DEBUG[3694]: audiohook.c:239 audiohook_read_frame_both: Read factory 0x7fe0d0006980 was pretty quick last time, waiting for them.
[2013-11-12 00:23:31] DEBUG[3694]: audiohook.c:227 audiohook_read_frame_both: Read factory 0x7fe0d0006980 and write factory 0x7fe0d00073c0 both fail to provide 160 samples
а вот такие сообщения идут при внутренних звонках или звонках через chan_dongle.

UPD (вдруг кто-то (как я) не знал):
Однако, для полноценной работы Asterisk требуется таймер с частотой 1kHz. К сожалению,
подавляющее большинство современных компьютеров не имеет таймера с подобной
частотой. Например, RTC обычно используется с частотой 1024Hz. Для работы IP-
телефонии, такое отклонение в точности таймера (~2%) является неприемлемым.
Все PCI-карты Digium имеют собственный таймер, который и используется Asterisk для
синхронизации.
Если же вы не собираетесь применять подобные платы, необходимо установить модуль ядра
dahdi_dummy, который входит в набор DAHDI-модулей от Digium.
(нашел на http://mithraen.ru/files/Asterisk.pdf)
Аватара пользователя
Sfinx
Сообщения: 672
Зарегистрирован: 21 июн 2011, 23:40
Откуда: Odessa
Контактная информация:

Re: Failed to get 160 samples from read factory

Сообщение Sfinx »

Не совсем (точнее даже совсем) не понимаю как связано время в tsc и dahdi_dummy.
Dahdi_dummy берет данные из tsc и "поставляет" их asterisk ? И не уверен что все правильно сделал для использования dahdi_dummy астериском.
никак не связано. tsc - это один из таймеров Linux (самый предпочтительный) - из него формируются все временные интервалы в системе (шчедулер, timer_fd, pthread таймеры, libc таймеры, etc.). dahdi_dummy (ztdummy) - это таймер asterisk, который генерит 1kHz из доступного в каждой системе hardware (rtc или usb). Asterisk в случае проблем/отсутствия ztdummy будет вынужден юзать системный таймер Linux. Когерентность последнего в свою очередь зависит от опций ядра (power management, config_hz, preempt, hr timers, etc.). Поэтому выбор у связистов следующий (по мере сложности) :

- юзать ztdummy/dahdi_dummy
- юзать специально сконфигурированное под стабильные и быстрые таймеры ядро
- собрать такое ядро
Rus

-----------
SfinxSoft
http://sfinxsoft.com
Ответить
© 2008 — 2025 Asterisk.ru
Digium, Asterisk and AsteriskNOW are registered trademarks of Digium, Inc.
Design and development by PostMet-Netzwerk GmbH