Problemas com IRQs quando ligam dois cartões Digium e caixa asterisco
Pergunta
Eu tenho dois Digium Wildcard TDM800P com 8 portas FXO cada. Quando eu ligar as duas coisas ao mesmo tempo IRQ erros começam a aparecer fazendo meu computador não responde e inutilizável.
Um cartão funciona bem, mas eu preciso de todos os 16 FXO portas ao trabalho de receber chamadas de meu Telco. Existe uma maneira para os cartões para se comunicar uns com os outros para que eles não gerar tantas interrupções. Ou uma maneira de ajustar Linux para dedicar IRQ da separado para cada cartão.
Eu tentei desabilitar portas USB Áudio, ACPI e. Ainda muitos erros de IRQ.
Solução
Esta questão seria melhor postado em serverfault, como este é um problema de hardware puro.
O problema que você está enfrentando é típica de altas placas PCI de interrupção em geral, e cartões de telefonia Digium em particular. Tenha em mente que o problema decorre de ter dois cartões na mesma bus PCI, seu objetivo é não tê-los interrupções share de IRQ.
Há um par de coisas que você pode tentar que pode resolver o seu problema:
1) Upgrade para DAHDI motoristas . Eles têm melhor contenção IRQ.
2) Mudança de um dos cartões para outro slot PCI . Alguns slots PCI sobre as pistas de acções da placa-mãe. Você quer evitar isso. Verifique o manual suas placas-mãe. Além disso, você pode executar o seguinte
cat /proc/interrupts
Você deve receber uma saída como esta ??p>
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
Veja como na interrupção 21 é compartilhado por usb1, usb3 e usb4? Você não quer que isso aconteça com seus Digium cartões. By the way, Digium cartões ususaly aparecer como TDPXXX.
3) Load Balance interrupções entre CPU - Se o seu PC tiver mais de uma CPU e seu kernel e apoio motherboard IO-APIC, você pode carregar interrupções equilíbrio entre os diferentes CPUs. Isso também irá facilitar bastante a carga de interrupção em seus da CPU. Se você verificar o meu código postado anteriormente, você pode ver que interrupções do timer locais são distribuídos igualmente entre a CPU do. Se seus Digium cartões martelo apenas uma CPU (isso acontece) você pode espalhar a carga por tentar o seguinte. Dizer que queria mudar IRQ 21 (do USB acima mencionado)
cat /proc/irq/21/smp_affinity
ffffffff
Todos os 'f' nos dizem que a carga de interrupção de IRQ 21 é balanceamento de carga entre todos os CPU de. Se você quiser atribuí-la a uma determinada CPU, acrescentar que nuber para a direita em hexadecimal. Por exemplo, digamos que eu quero que o USB é a única CPU0 interrupção.
echo 1 > /proc/irq/21/smp_affinity
cat /proc/irq/21/smp_affinity
00000001
Então, agora apenas o primeiro CPU (CPU0) está habilitado para receber essas interrupções.
Boa sorte!
Outras dicas
PCI Digium cartões não funcionam bem quando você tenta ter mais de uma no mesmo computador. Eu tive um problema semelhante com 2 TE405 cartões no mesmo computador e tive que mudar para um cartão Sangoma (eu só precisava de um Sangoma porque suportam até 8 E1 está no mesmo cartão e é isso que eu precisava). Ou você pode tentar o AEX800 que é como o TDM800 mas é PCI-X, em vez de simples PCI idade. IIRC o problema está relacionado com o PCI.
JorgeO: Parece-me que você precisa atualizar seus drivers. Os últimos zaptel e DAHDI lançamentos incluem drivers para a TDM800P que configure a placa de uma forma que permite que o sistema seja mais tolerante do sistema host de interrupção latências.
Eu tenho Debian e não trabalho, eth0 mudança irq -> cpu0 um CPU2 cat / proc / IRQ / xxx / smp_affinity 00000003, mas não o trabalho dos procees continuar cpu0