مشاكل مع طلبات المقاطعة (IRQs) عند توصيل بطاقتي digium وصندوق النجمة
سؤال
لدي اثنين من Digium Wildcard TDM800P مع 8 منافذ FXO لكل منهما.عندما أقوم بالاتصال بكليهما في نفس الوقت، تبدأ أخطاء IRQ في الظهور مما يجعل جهاز الكمبيوتر الخاص بي غير مستجيب وغير قابل للاستخدام.
تعمل بطاقة واحدة بشكل جيد ولكني بحاجة إلى تشغيل جميع منافذ FXO الستة عشر لتلقي المكالمات من شركة الاتصالات الخاصة بي.هل هناك طريقة لتواصل البطاقات مع بعضها البعض حتى لا تولد العديد من المقاطعات؟أو طريقة لتعديل Linux لتخصيص طلبات مقاطعة (IRQ) منفصلة لكل بطاقة.
لقد حاولت تعطيل منافذ الصوت وACPI وUSB.لا يزال هناك عدد كبير جدًا من أخطاء IRQ.
المحلول
من الأفضل نشر هذا السؤال على خطأ الخادم، حيث أن هذه مشكلة في الأجهزة فقط.
المشكلة التي تواجهها هي مشكلة نموذجية بالنسبة لبطاقات 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) مقاطعة توازن التحميل بين وحدات المعالجة المركزية - إذا كان جهاز الكمبيوتر الخاص بك يحتوي على أكثر من وحدة معالجة مركزية واحدة وكانت النواة واللوحة الأم لديك تدعمان IO-APIC، فيمكنك تحميل مقاطعات التوازن بين وحدات المعالجة المركزية المختلفة.سيؤدي هذا أيضًا إلى تخفيف حمل المقاطعة على وحدة المعالجة المركزية الخاصة بك بشكل كبير.إذا قمت بفحص الكود الذي قمت بنشره مسبقًا، يمكنك أن ترى أن مقاطعات المؤقت المحلي منتشرة بالتساوي بين وحدات المعالجة المركزية (CPU).إذا كانت بطاقات Digium الخاصة بك تدق وحدة معالجة مركزية واحدة فقط (يحدث هذا)، فيمكنك توزيع الحمل عن طريق تجربة ما يلي.لنفترض أننا أردنا تغيير IRQ 21 (أجهزة USB المذكورة أعلاه)
cat /proc/irq/21/smp_affinity
ffffffff
تخبرنا كل هذه الأحرف "f" أن تحميل المقاطعة من IRQ 21 هو تحميل متوازن بين جميع وحدات المعالجة المركزية (CPU).إذا كنت تريد تخصيصه لوحدة معالجة مركزية معينة، أضف هذا الرقم إلى اليمين بالنظام الست عشري.على سبيل المثال، لنفترض أنني أريد أن يقوم USB بمقاطعة وحدة المعالجة المركزية (CPU0) فقط.
echo 1 > /proc/irq/21/smp_affinity
cat /proc/irq/21/smp_affinity
00000001
والآن تم تمكين وحدة المعالجة المركزية الأولى (CPU0) فقط لاستقبال هذه المقاطعات.
حظ سعيد!
نصائح أخرى
وبطاقات PCI نفسها نجمة لا تعمل بشكل جيد عندما حاولت أن يكون أكثر من واحد في نفس الكمبيوتر. كان لي مشكلة مماثلة مع 2 TE405 بطاقات في نفس الكمبيوتر وكان للتبديل إلى بطاقة Sangoma (كنت بحاجة فقط 1 Sangoma لأنها تدعم ما يصل إلى 8 E1 في نفس البطاقة، وهذا ما أنا في حاجة). أو يمكنك محاولة AEX800 الذي هو مثل TDM800 لكنه PCI-X بدلا من PCI القديم عادي. IIRC المشكلة هي ذات الصلة PCI.
وJorgeO: يبدو لي ان كنت بحاجة إلى تحديث برامج التشغيل الخاصة بك. وتشمل أحدث zaptel وDAHDI إصدارات برامج تشغيل TDM800P أن تكوين المجلس بطريقة تسمح للنظام لتكون أكثر تسامحا من الإختفاء النظام المضيف المقاطعة.
ولدي ديبيان ولا تعمل، تغيير IRQ ETH0 -> cpu0 على cpu2 القط / إجراءات / IRQ / XXX / smp_affinity 00000003 ولكن لا تعمل على procees تستمر cpu0