Domanda

Ho due Digium Wildcard TDM800P con 8 porte FXO ciascuna. Quando collego entrambi contemporaneamente, gli IRQ mancano iniziano a comparire rendendo il mio computer non rispondente e inutilizzabile.

Una scheda funziona bene ma ho bisogno di tutte e 16 le porte FXO per funzionare per ricevere chiamate dal mio Telco. C'è un modo per le carte di comunicare tra loro in modo che non generino così tanti interrupt. O un modo per modificare Linux per dedicare IRQ separati per ogni scheda.

Ho provato a disabilitare le porte Audio, ACPI e USB. Ancora troppi mancati IRQ.

È stato utile?

Soluzione

Questa domanda sarebbe meglio pubblicata su serverfault, poiché si tratta di un puro problema hardware.

Il problema riscontrato è tipico delle schede PCI ad alto interruzione in generale e delle schede telefoniche Digium in particolare. Tieni presente che il problema deriva dall'avere entrambe le schede nello stesso bus PCI, il tuo obiettivo è non farle condividere gli interrupt IRQ.

Ci sono un paio di cose che puoi provare per risolvere il tuo problema:

1) Esegui l'upgrade ai driver DAHDI . Hanno una migliore contesa IRQ.

2) Cambia una delle carte in un altro slot PCI . Alcuni slot PCI sulla scheda madre condividono corsie. Vuoi evitare questo. Controlla il manuale della scheda madre. Inoltre, puoi eseguire quanto segue

cat /proc/interrupts

Dovresti ricevere un output in questo modo

               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

Vedi come nell'interrupt 21 è condiviso da usb1, usb3 e usb4? Non vuoi che ciò accada alle tue carte Digium. A proposito, le carte Digium di solito appaiono come TDPXXX.

3) Interruzioni del bilanciamento del carico tra CPU - Se il PC ha più di una CPU e il kernel e la scheda madre supportano IO-APIC, è possibile caricare le interruzioni del bilanciamento tra CPU diverse. Ciò faciliterà anche notevolmente il carico di interrupt sulla CPU. Se controlli il mio codice precedentemente pubblicato, puoi vedere che gli interrupt del timer locale sono distribuiti uniformemente tra le CPU. Se le tue carte Digium martellano solo una CPU (questo accade) puoi distribuire il carico provando quanto segue. Supponiamo di voler cambiare IRQ 21 (i suddetti USB)

cat /proc/irq/21/smp_affinity
ffffffff

Tutte quelle 'f' ci dicono che il carico di interrupt da IRQ 21 è bilanciato tra tutte le CPU. Se si desidera assegnarlo a una determinata CPU, aggiungere quel nuber a destra in esadecimale. Ad esempio, diciamo che voglio che l'USB interrompa solo CPU0.

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

Quindi ora solo la prima CPU (CPU0) è abilitata a ricevere questi interrupt.

Buona fortuna!

Altri suggerimenti

Le schede PCI Digium non funzionano bene quando si tenta di avere più di una nello stesso computer. Ho avuto un problema simile con 2 schede TE405 nello stesso computer e ho dovuto passare a una scheda Sangoma (avevo solo bisogno di 1 Sangoma perché supportano fino a 8 E1 nella stessa scheda ed è quello di cui avevo bisogno). Oppure puoi provare AEX800 che è come il TDM800 ma è PCI-X invece del semplice vecchio PCI. IIRC il problema è legato al PCI.

JorgeO: Mi sembra che tu abbia bisogno di aggiornare i tuoi driver. Le ultime versioni di zaptel e DAHDI includono driver per TDM800P che configurano la scheda in un modo che consente al sistema di essere più tollerante rispetto alle latenze di interruzione del sistema host.

Ho Debian e non funziona, cambia irq eth0 - > cpu0 a cpu2 cat / proc / irq / xxx / smp_affinity 00000003 ma non funziona i processi continuano cpu0

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top