تخطَّ إلى المحتوى

irqbalance - ضبط توزيع المقاطعات (Cheatsheet)

irqbalance - ضبط توزيع المقاطعات (Cheatsheet)

irqbalance هو خيط معين يوزع المقاطعات الصلبة (IRQs) عبر نوى CPU. قد يوجه Linux معظم المقاطعات من NIC أو وحدة تحكم التخزين المشغول إلى CPU 0، مما يجعل هذه النواة اختناق بينما يخمل الآخرون. يراقب irqbalance حمل المقاطعة وإعادة توازن تقاربية IRQ لنشر العمل. بالمقابل، بالنسبة لأحمال العمل الحساسة للكمون مع وحدات المعالجة المركزية المثبتة باليد، فإنها غالباً ما يتم تعطيلها بقصد حتى لا تستطيع نقل المقاطعات إلى النوى المعزولة.

التثبيت

النظام الأساسيالأمر
Debian/Ubuntusudo apt install irqbalance
Fedora/RHELsudo dnf install irqbalance
Arch Linuxsudo pacman -S irqbalance
الخدمةsudo systemctl enable --now irqbalance
التحققirqbalance --version

فحص المقاطعات أولاً

الأمريعرض
cat /proc/interruptsعد المقاطعات لكل CPU حسب الجهاز
watch -n1 'cat /proc/interrupts'النمو المباشر (اكتشف النواة الساخنة)
mpstat -I SUM -P ALL 1المقاطعات لكل CPU في الثانية
cat /proc/irq/<N>/smp_affinityقناع التقارب للـ IRQ واحد
cat /proc/irq/<N>/smp_affinity_listنفس، كقائمة CPU
# هل نواة واحدة تمتص جميع مقاطعات NIC؟
watch -n1 "grep -E 'eth0|mlx|ens' /proc/interrupts"

تشغيل الخيط

الأمرالوصف
sudo systemctl status irqbalanceتحقق من أنه يعمل
sudo irqbalance --foregroundتشغيل في المقدمة (تصحيح)
sudo irqbalance --oneshotتوازن مرة واحدة، ثم خروج
sudo irqbalance --debugقرارات مطولة

الخيارات الرئيسية / البيئة

الإعدادالتأثير
IRQBALANCE_BANNED_CPUS=<mask>لا تعين IRQs لهذه وحدات المعالجة المركزية
--banirq=Nاستبعد IRQ محدد من التوازن
--policyscript=PATHالسكريبت الذي يقرر السياسة لكل IRQ
--interval=SECONDSفترة إعادة التوازن
`—hintpolicy=exactsubset
--powerthresh=Nعتبة توحيد حفظ الطاقة

التكوين عادة ما يعيش في /etc/default/irqbalance أو /etc/sysconfig/irqbalance.

# احفظ IRQs معزولة تماماً عن الأنوية 8-15 (قناع للـ CPUs 8..15)
echo 'IRQBALANCE_BANNED_CPUS=0000ff00' | sudo tee -a /etc/default/irqbalance
sudo systemctl restart irqbalance

تقاربية IRQ اليدوية (عند تعطيل الخيط)

# دبوس IRQ 42 إلى CPU 2 (bitmask 0x4)
echo 4 | sudo tee /proc/irq/42/smp_affinity

# أو حسب قائمة CPU
echo 2 | sudo tee /proc/irq/42/smp_affinity_list
النهجالاستخدام
irqbalance قيد التشغيلالخوادم العامة، تحميل متغير
irqbalance معطل + تدبيس يدويكمون منخفض، NUMA-pinned، أحمال عمل RT
وحدات المعالجة المركزية المحظورةهجين: توازن، لكن حماية النوى المعزولة

نمط حساس لكمون منخفض

# إعداد كمون منخفض نموذجي: توقف الموازن، دبوس NIC IRQs بالقرب من عقدة NUMA للتطبيق
sudo systemctl stop irqbalance
sudo systemctl disable irqbalance
# ثم اضبط smp_affinity لـ IRQs للـ NIC للنوى على نفس عقدة NUMA

الاقتران مع numactl بحيث يعيش ذاكرة التطبيق ومعالجة المقاطعة على نفس عقدة NUMA — معالجة المقاطعات عبر العقد هي مصدر كمون مخفي كلاسيكي.

التحقق من التغيير

الفحصالأمر
انتشار المقاطعاتmpstat -I SUM -P ALL 1
تحميل softirqtop%si لكل CPU
إنتاجية الشبكةsar -n DEV 1
عدادات IRQwatch 'cat /proc/interrupts'

النجاح يبدو مثل عد المقاطعات التي تنمو بشكل متساوي عبر الأنوية المقصودة (أو مركزة بالضبط على الأنوية التي اخترتها).

irqbalance مقابل ضبط ذي الصلة

الأداةالدور
irqbalanceتوزيع IRQs عبر CPUs
numactlربط العملية CPU/memory إلى عقد NUMA
cpupowerالتحكم في التردد/حالات الخمول
tunedملفات تعريف النظام بالكامل (قد تدير irqbalance)
RPS/RFSتوجيه الحزمة من جانب البرنامج

الموارد