我有两个Digium Wildcard TDM800P,每个都有8个FXO端口。当我同时连接两者时,IRQ未命中开始显示使我的计算机无响应且无法使用。
一张卡工作正常,但我需要所有16个FXO端口才能接收来自我的Telco的电话。卡有没有办法相互通信,因此它们不会产生尽可能多的中断。或者一种调整Linux的方法,为每张卡分配单独的IRQ。
我尝试禁用音频,ACPI和USB端口。还有太多的IRQ未命中。
答案 0 :(得分:2)
这个问题最好在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)被启用才能接收这些中断。
祝你好运!答案 1 :(得分:0)
答案 2 :(得分:0)
JorgeO:听起来像你需要更新你的司机。最新的zaptel和DAHDI版本包括TDM800P的驱动程序,它们以一种允许系统更容忍主机系统中断延迟的方式配置电路板。
答案 3 :(得分:0)
我有Debian而不工作,改变irq eth0 - > cpu0一个cpu2 cat / proc / irq / xxx / smp_affinity 00000003但是没有工作的程序继续cpu0