Проблемы с IRQ при подключении двух карт digium и asterisk box
Вопрос
У меня есть два Digium Wildcard TDM800P с 8 портами FXO каждый.Когда я подключаю оба одновременно, начинают появляться промахи IRQ, из-за чего мой компьютер не отвечает и становится непригодным для использования.
Одна карта работает нормально, но мне нужно, чтобы все 16 портов FXO работали, чтобы принимать звонки от моей телекоммуникационной компании.Есть ли способ, чтобы карты могли взаимодействовать друг с другом, чтобы они не создавали столько прерываний?Или способ настроить Linux так, чтобы он выделял отдельные IRQ для каждой карты.
Я пробовал отключить порты Audio, ACPI и USB.По-прежнему слишком много промахов IRQ.
Решение
Этот вопрос лучше задать на странице serverfault, так как это чисто аппаратная проблема.
Проблема, с которой вы столкнулись, типична для карт PCI с высоким уровнем прерываний в целом и для телефонных карт Digium в частности.Имейте в виду, что проблема возникает из-за того, что обе карты находятся в такой же PCI, ваша цель — не допускать совместного использования прерываний IRQ.
Есть несколько вещей, которые вы можете попробовать, чтобы решить вашу проблему:
1) Обновите драйверы DAHDI..У них лучше конкуренция по IRQ.
2) Переставьте одну из карт в другой слот PCI..Некоторые слоты PCI на материнской плате используют общие линии.Вы хотите этого избежать.Проверьте руководство к вашей материнской плате.Кроме того, вы можете выполнить следующее
cat /proc/interrupts
Вы должны получить такой вывод
CPU0 CPU1 CPU2 CPU3
0: 37 2 5 8 IO-APIC-edge timer
1: 1 1 0 0 IO-APIC-edge i8042
8: 0 0 1 0 IO-APIC-edge rtc0
9: 0 0 0 0 IO-APIC-fasteoi acpi
12: 1 0 0 3 IO-APIC-edge i8042
14: 33 35 31 30 IO-APIC-edge ide0
20: 0 0 0 0 IO-APIC-fasteoi uhci_hcd:usb2
21: 37 37 41 38 IO-APIC-fasteoi uhci_hcd:usb1, uhci_hcd:usb3, ehci_hcd:usb4
1269: 14357 14387 14387 14372 PCI-MSI-edge eth0
1270: 2523 2490 2489 2503 PCI-MSI-edge ioc0
NMI: 0 0 0 0 Non-maskable interrupts
LOC: 487635 236288 376032 88504 Local timer interrupts
RES: 507 516 571 701 Rescheduling interrupts
CAL: 205 281 237 201 function call interrupts
TLB: 2835 2190 2221 1737 TLB shootdowns
TRM: 0 0 0 0 Thermal event interrupts
THR: 0 0 0 0 Threshold APIC interrupts
SPU: 0 0 0 0 Spurious interrupts
ERR: 0
Посмотрите, как прерывание 21 используется совместно USB1, USB3 и USB4?Вы не хотите, чтобы это случилось с вашими картами Digium.Кстати, карты Digium обычно отображаются как TDPXXX.
3) Прерывания баланса нагрузки между процессорами - Если ваш компьютер имеет более одного процессора, а ваше ядро и материнская плата поддерживают IO-APIC, вы можете нагружать балансировку прерываний между разными процессорами.Это также значительно облегчит нагрузку прерываний на ваш процессор.Если вы проверите мой ранее опубликованный код, вы увидите, что прерывания локального таймера равномерно распределяются между процессорами.Если ваши карты Digium забивают только один процессор (такое случается), вы можете распределить нагрузку, попробовав следующее.Допустим, мы хотим изменить IRQ 21 (вышеупомянутые USB-устройства).
cat /proc/irq/21/smp_affinity
ffffffff
Все эти буквы «f» говорят нам, что нагрузка по прерыванию от IRQ 21 сбалансирована между всеми процессорами.Если вы хотите назначить его определенному процессору, добавьте это число справа в шестнадцатеричном формате.Например, предположим, что я хочу, чтобы USB прерывал только CPU0.
echo 1 > /proc/irq/21/smp_affinity
cat /proc/irq/21/smp_affinity
00000001
Таким образом, теперь только первый процессор (CPU0) может получать эти прерывания.
Удачи!
Другие советы
Карты PCI Digium не работают должным образом, когда вы пытаетесь иметь более одного на одном компьютере. У меня была похожая проблема с 2 картами TE405 на одном компьютере, и мне пришлось переключиться на карту Sangoma (мне нужна была только 1 Sangoma, потому что они поддерживают до 8 E1 на одной карте, и это то, что мне было нужно). Или вы можете попробовать AEX800, который похож на TDM800, но это PCI-X вместо простого старого PCI. IIRC проблема связана с PCI.
JorgeO: Похоже, вам нужно обновить драйверы. Последние версии zaptel и DAHDI включают драйверы для TDM800P, которые настраивают плату таким образом, чтобы система была более терпимой к задержкам прерываний хост-системы.
У меня Debian, и он не работает, измените irq eth0 - > процессор0 процессор2 cat / proc / irq / xxx / smp_affinity 00000003, но не работает, процесс продолжается cpu0