مشاكل مع طلبات المقاطعة (IRQs) عند توصيل بطاقتي digium وصندوق النجمة

StackOverflow https://stackoverflow.com/questions/628920

سؤال

لدي اثنين من 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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top