我有两个Digium Wildcard TDM800P,每个都有8个FXO端口。当我同时连接两者时,IRQ未命中开始显示使我的计算机无响应且无法使用。

一张卡工作正常,但我需要所有16个FXO端口才能接收来自我的Telco的电话。卡有没有办法相互通信,因此它们不会产生尽可能多的中断。或者一种调整Linux的方法,为每张卡分配单独的IRQ。

我尝试禁用音频,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

看看usb1,usb3和usb4如何共享中断21?你不希望这种情况发生在你的Digium卡上。顺便说一句,Digium卡ususaly显示为TDPXXX。

3)CPU之间的负载平衡中断 - 如果您的PC有多个CPU且内核和主板支持IO-APIC,则可以在不同CPU之间进行负载平衡。这也将大大减轻CPU的中断负载。如果检查我之前发布的代码,可以看到本地定时器中断在CPU之间均匀分布。如果您的Digium卡只敲击一个CPU(这种情况),您可以通过尝试以下方式分散负载。假设我们想要更改IRQ 21(前面提到的USB)

cat /proc/irq/21/smp_affinity
ffffffff

所有那些'f'告诉我们来自IRQ 21的中断负载在所有CPU之间进行负载平衡。如果要将其分配给某个CPU,请以十六进制的形式将该nuber添加到右侧。例如,假设我希望USB只能中断CPU0。

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

所以现在只有第一个CPU(CPU0)被启用才能接收这些中断。

祝你好运!

其他提示

当您尝试在同一台计算机上安装多个PCI卡时,PCI Digium卡无法正常工作。我在同一台计算机上遇到了类似的问题,有2张TE405卡,不得不切换到Sangoma卡(我只需要1个Sangoma,因为它们在同一张卡中支持多达8个E1,这就是我需要的)。 或者您可以尝试像TDM800一样的AEX800,但它是PCI-X而不是普通的旧PCI。 IIRC问题与PCI有关。

JorgeO:听起来像你需要更新你的司机。最新的zaptel和DAHDI版本包括TDM800P的驱动程序,它们以一种允许系统更容忍主机系统中断延迟的方式配置电路板。

我有Debian而不工作,改变irq eth0 - > cpu0一个cpu2 cat / proc / irq / xxx / smp_affinity 00000003但是没有工作的程序继续cpu0

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top