두 개의 digium 카드를 연결할 때 IRQ에 문제가 있고 별표 상자
문제
각각 8 개의 FXO 포트가있는 2 개의 Digium Wildcard TDM800p가 있습니다. 둘 다 연결하면 동시에 IRQ Misses가 내 컴퓨터를 응답하지 않고 사용할 수 없게 만들기 시작합니다.
하나의 카드는 잘 작동하지만 통신사로부터 전화를 받으려면 16 개의 FXO 포트가 필요합니다. 카드가 서로 통신 할 수있는 방법이 있습니까? 또는 각 카드에 대해 별도의 IRQ를 전용하기 위해 Linux를 조정하는 방법.
오디오, ACPI 및 USB 포트를 비활성화하려고 시도했습니다. 여전히 너무 많은 IRQ가 그리워요.
해결책
이 질문은 순수한 하드웨어 문제이므로 ServerFault에 더 잘 게시 될 것입니다.
당신이 겪고있는 문제는 일반적으로 높은 인터럽트 PCI 카드, 특히 Digium Telephony 카드의 전형적인 것입니다. 문제는 같은 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 Cards 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를 16 진수로 오른쪽에 추가하십시오. 예를 들어 USB가 CPU0 만 방해하기를 원한다고 가정 해 봅시다.
echo 1 > /proc/irq/21/smp_affinity
cat /proc/irq/21/smp_affinity
00000001
따라서 이제 첫 번째 CPU (CPU0)만이 인터럽트를 수신 할 수 있습니다.
행운을 빕니다!
다른 팁
PCI Digium 카드는 동일한 컴퓨터에 둘 이상을 사용하려고 할 때 잘 작동하지 않습니다. 같은 컴퓨터에서 2 개의 TE405 카드와 비슷한 문제가 있었고 Sangoma 카드로 전환해야했습니다 (같은 카드에서 최대 8 E1을 지원하기 때문에 1 Sangoma 만 필요했습니다). 또는 TDM800과 같은 AEX800을 사용해 볼 수 있지만 일반 구식 PCI 대신 PCI-X입니다. IIRC 문제는 PCI 관련입니다.
Jorgeo : 드라이버를 업데이트 해야하는 것처럼 들립니다. 최신 Zaptel 및 Dahdi 릴리스에는 시스템이 호스트 시스템 인터럽트 대기 시간을보다 허용 할 수있는 방식으로 보드를 구성하는 TDM800P의 드라이버가 포함되어 있습니다.
나는 데비안이 있고 작동하지 않고 IRQ ETH0-> CPU0 CPU2 CAT/PROC/IRQ/XXX/SMP_AFFINITY 00000003을 변경하지만 프로세스는 계속 CPU0을 작동하지 않습니다.