3

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

一张卡可以正常工作,但我需要所有 16 个 FXO 端口才能接听来自电信公司的电话。有没有办法让卡片相互通信,这样它们就不会产生尽可能多的中断。或者一种调整 Linux 为每张卡专用单独的 IRQ 的方法。

我尝试禁用音频、ACPI 和 USB 端口。仍然有太多的 IRQ 未命中。

4

4 回答 4

3

这个问题最好在 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

看看中断 21 是如何被 usb1、usb3 和 usb4 共享的?您不希望这种情况发生在您的 Digium 卡上。顺便说一句,Digium 卡通常显示为 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) 可以接收这些中断。

祝你好运!

于 2009-09-30T19:20:04.017 回答
0

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

于 2009-03-10T16:17:05.923 回答
0

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

于 2009-03-27T16:37:32.253 回答
0

我有 Debian 但不工作,更改 irq eth0 -> cpu0 a cpu2 cat /proc/irq/xxx/smp_affinity 00000003 但不工作进程继续 cpu0

于 2009-10-08T04:01:42.963 回答