Pregunta

Tengo dos Digium Wildcard TDM800P con 8 puertos FXO cada uno. Cuando conecto ambos al mismo tiempo, las fallas de IRQ comienzan a aparecer haciendo que mi computadora no responda e inutilizable.

Una tarjeta funciona bien, pero necesito que funcionen los 16 puertos FXO para recibir llamadas de mi Telco. ¿Hay alguna manera de que las tarjetas se comuniquen entre sí para que no generen tantas interrupciones? O una forma de ajustar Linux para dedicar IRQ por separado para cada tarjeta.

He intentado deshabilitar los puertos de audio, ACPI y USB. Todavía faltan demasiados IRQ.

¿Fue útil?

Solución

Esta pregunta se publicaría mejor en serverfault, ya que es un problema de hardware puro.

El problema que está experimentando es típico de las tarjetas PCI de alta interrupción en general y de las tarjetas de telefonía Digium en particular. Tenga en cuenta que el problema se debe a que ambas tarjetas están en el mismo bus PCI, su objetivo es que no compartan las interrupciones de IRQ.

Hay un par de cosas que puede probar que pueden resolver su problema:

1) Actualice a los controladores DAHDI . Tienen una mejor contención IRQ.

2) Cambie una de las tarjetas a otra ranura PCI . Algunas ranuras PCI en la placa base comparten carriles. Quieres evitar esto. Consulte el manual de su placa base. Además, puede ejecutar lo siguiente

cat /proc/interrupts

Debería recibir una salida como esta

               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

¿Ves cómo usb1, usb3 y usb4 comparten la interrupción 21? No quiere que eso le pase a sus tarjetas Digium. Por cierto, las tarjetas Digium usualmente aparecen como TDPXXX.

3) Interrupciones de equilibrio de carga entre CPU : si su PC tiene más de una CPU y su núcleo y placa base admiten IO-APIC, puede interrumpir el equilibrio de carga entre diferentes CPU. Esto también facilitará en gran medida la carga de interrupción en su CPU. Si verifica mi código publicado anteriormente, puede ver que las interrupciones del temporizador local se distribuyen de manera uniforme entre las CPU. Si sus tarjetas Digium martillan solo una CPU (esto sucede), puede distribuir la carga intentando lo siguiente. Digamos que queríamos cambiar IRQ 21 (los USB mencionados anteriormente)

cat /proc/irq/21/smp_affinity
ffffffff

Todas esas 'f' nos dicen que la carga de interrupción de IRQ 21 está balanceada entre todas las CPU. Si desea asignarlo a una determinada CPU, agregue ese nuber a la derecha en hexadecimal. Por ejemplo, supongamos que quiero que los USB solo interrumpan la CPU0.

echo 1 > /proc/irq/21/smp_affinity 
cat /proc/irq/21/smp_affinity 
00000001

Entonces ahora solo la primera CPU (CPU0) está habilitada para recibir estas interrupciones.

¡Buena suerte!

Otros consejos

Las tarjetas PCI Digium no funcionan bien cuando intenta tener más de una en la misma computadora. Tuve un problema similar con 2 tarjetas TE405 en la misma computadora y tuve que cambiar a una tarjeta Sangoma (solo necesitaba 1 Sangoma porque admiten hasta 8 E1 en la misma tarjeta y eso es lo que necesitaba). O puede probar el AEX800, que es como el TDM800 pero es PCI-X en lugar de un PCI antiguo. IIRC el problema está relacionado con PCI.

JorgeO: Me parece que necesitas actualizar tus controladores. Las últimas versiones de zaptel y DAHDI incluyen controladores para el TDM800P que configuran la placa de una manera que permite que el sistema sea más tolerante con las latencias de interrupción del sistema host.

Tengo Debian y no funciona, cambie irq eth0 - > cpu0 a cpu2 cat / proc / irq / xxx / smp_affinity 00000003 pero no funciona, el proceso continúa cpu0

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top