Проблемы с IRQ при подключении двух карт digium и asterisk box

StackOverflow https://stackoverflow.com/questions/628920

Вопрос

У меня есть два 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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top