Question

J'ai deux Digium Wildcard TDM800P avec 8 ports FXO chacun. Lorsque je connecte les deux en même temps, les erreurs IRQ commencent à apparaître, rendant l'ordinateur inactif et inutilisable.

Une carte fonctionne bien, mais les 16 ports FXO doivent fonctionner avec tous les 16 ports FXO pour recevoir les appels de mon opérateur téléphonique. Existe-t-il un moyen pour les cartes de communiquer entre elles afin qu'elles ne génèrent pas autant d'interruptions. Ou un moyen de modifier Linux pour dédier des IRQ distinctes pour chaque carte.

J'ai essayé de désactiver les ports audio, ACPI et USB. Encore trop d'IRQ.

Était-ce utile?

La solution

Cette question serait mieux posée à serverfault, car il s'agit d'un problème purement matériel.

Le problème que vous rencontrez est typique des cartes PCI à hautes interruptions en général, et des cartes de téléphonie Digium en particulier. N'oubliez pas que le problème provient du fait que les deux cartes se trouvent dans le même bus PCI . Votre objectif est de ne pas les faire partager les interruptions IRQ.

Vous pouvez essayer plusieurs solutions pour résoudre votre problème:

1) Mettez à niveau les pilotes DAHDI . Ils ont une meilleure contention IRQ.

2) Remplacez l'une des cartes par un autre emplacement PCI . Certains emplacements PCI de la carte mère partagent des voies. Vous voulez éviter cela. Vérifiez le manuel de votre carte mère. En outre, vous pouvez exécuter le

suivant
cat /proc/interrupts

Vous devriez recevoir une sortie comme ceci

               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

Vous voyez comment l'interruption 21 est partagée par usb1, usb3 et usb4? Vous ne voulez pas que cela arrive à vos cartes Digium. À propos, les cartes Digium apparaissent généralement sous le nom de TDPXXX.

3) Interruptions d'équilibrage de la charge entre les processeurs : si votre ordinateur dispose de plusieurs processeurs et que le noyau et la carte mère prennent en charge IO-APIC, vous pouvez effectuer des interruptions d'équilibrage de la charge entre différents processeurs. Cela allégera également grandement la charge d'interruption sur votre processeur. Si vous vérifiez mon code précédemment posté, vous pouvez voir que les interruptions de la minuterie locale sont réparties uniformément entre les CPU. Si vos cartes Digium ne martèlent qu'un seul processeur (cela se produit), vous pouvez répartir la charge en essayant ce qui suit. Supposons que nous voulions changer l'IRQ 21 (les clés USB susmentionnées)

cat /proc/irq/21/smp_affinity
ffffffff

Tous ces "f" nous disent que la charge d'interruption provenant de l'IRQ 21 est équilibrée entre tous les processeurs. Si vous souhaitez l’affecter à une certaine CPU, ajoutez ce nombre à la droite en hexadécimal. Par exemple, disons que je veux que les clés USB n'interrompent que CPU0.

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

Donc maintenant, seul le premier CPU (CPU0) est activé pour recevoir ces interruptions.

Bonne chance!

Autres conseils

Les cartes PCI Digium ne fonctionnent pas bien lorsque vous essayez d’en avoir plusieurs sur le même ordinateur. J'ai eu un problème similaire avec 2 cartes TE405 dans le même ordinateur et je devais passer à une carte Sangoma (je n'avais besoin que de 1 Sangoma car ils prennent en charge jusqu'à 8 E1 dans la même carte et c'est ce dont j'avais besoin). Vous pouvez aussi essayer l’AEX800, qui ressemble au TDM800, mais il s’agit du PCI-X au lieu du vieux PCI ordinaire. IIRC, le problème est lié au PCI.

JorgeO: Il me semble que vous devez mettre à jour vos pilotes. Les dernières versions de zaptel et DAHDI incluent des pilotes pour le TDM800P qui configurent la carte de manière à ce que le système soit plus tolérant vis-à-vis des latences d’interruption du système hôte.

J'ai Debian et ne travaille pas, changez irq eth0 - > cpu0 a cpu2 cat / proc / irq / xxx / smp_affinity 00000003 mais ne fonctionne pas, le processus continue cpu0

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top