문제

각각 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을 작동하지 않습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top