Этот вопрос будет лучше размещен в 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 ususaly появляются как TDPXXX.
3) Прерывания балансировки нагрузки между CPU. Если на вашем ПК установлено более одного процессора, а ваше ядро и материнская плата поддерживают IO-APIC, вы можете загружать прерывания баланса между различными CPU. Это также значительно облегчит загрузку прерываний на вашем процессоре. Если вы проверите мой ранее опубликованный код, вы увидите, что прерывания локального таймера распределяются равномерно между CPU. Если ваши карты Digium забивают только один процессор (это происходит), вы можете разложить нагрузку, попробовав следующее. Скажем, мы хотим изменить IRQ 21 (вышеупомянутый Укрсоцбанка)
cat /proc/irq/21/smp_affinity
ffffffff
Все те «е» говорят нам, что нагрузка прерывания от IRQ 21 является балансировка нагрузки между всеми процессора.Если вы хотите назначить его определенному процессору, добавьте этот нубер вправо в шестнадцатеричном формате. Например, скажем, я хочу, чтобы USB только прерывал CPU0.
echo 1 > /proc/irq/21/smp_affinity
cat /proc/irq/21/smp_affinity
00000001
Итак, теперь для приема этих прерываний разрешен только первый CPU (CPU0).
Удачи вам!
В то время я не знал serverfault. Но все-таки, отличный ответ, обновление dahdi на самом деле решило проблему, но прекрасно знает, что вы можете определить прерывания для конкретного процессора. – JorgeO