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

numactl - ربط الذاكرة والمعالج NUMA

numactl - ربط الذاكرة والمعالج NUMA

numactl تحكم سياسة NUMA (الوصول غير الموحد للذاكرة) للعمليات. على خوادم متعددة المقابس، الذاكرة المرفقة بمقبس وحدة المعالجة المركزية الواحدة (عقدة) أسرع لتلك المقابس للوصول من الذاكرة على عقدة أخرى؛ عملية ترتد بين العقد تدفع عقوبة زمن انتظار. يسمح لك numactl بـ ربط عملية بعقد NUMA محددة — تثبيت وحدات المعالجة المركزية والذاكرة إلى نفس العقدة — والذي يمكن أن يحسن بشكل كبير الأداء لأحمال العمل المرتبطة بالذاكرة مثل قواعس البيانات وأعمال HPC.

التثبيت

النظام الأساسيالأمر
Debian/Ubuntusudo apt install numactl
Fedora/RHELsudo dnf install numactl
Arch Linuxsudo pacman -S numactl
التحققnumactl --version

فحص الطوبولوجيا

الأمريظهر
numactl --hardware (-H)عقد NUMA وحدات المعالجة المركزية لكل عقدة والذاكرة والمسافات
numactl --show (-s)سياسة NUMA للعملية الحالية
numastatإحصائيات تخصيص الذاكرة لكل عقدة Hit/miss
lscpuتعيين CPU إلى عقدة (وحدات معالج NUMA)
# اعرض عدد عقد NUMA ووحدات المعالجة المركزية/الذاكرة المتعلقة بكل واحد
numactl --hardware

ربط العملية

الأمرالتأثير
numactl --cpunodebind=0 --membind=0 ./appتشغيل على وحدات المعالجة المركزية والذاكرة بالعقدة 0
numactl -N 1 -m 1 ./appشكل قصير: وحدات المعالجة المركزية + الذاكرة للعقدة 1
numactl --physcpubind=0-7 ./appالربط بنوى CPU محددة
numactl --membind=0,1 ./appالسماح بالذاكرة من العقد 0 و 1
numactl --interleave=all ./appانشر الذاكرة عبر جميع العقد (round-robin)

سياسات الذاكرة

السياسةالعلمالمعنى
الربط--membind=NODESتخصيص فقط من هذه العقد (فشل إذا كان ممتلئاً)
المفضل--preferred=NODEتفضيل عقدة والعودة إذا لزم الأمر
بين--interleave=NODESRound-robin عبر العقد (النطاق الترددي)
محلي--localallocتخصيص على العقدة التي تعمل عليها الخيط

متى تستخدم أيهما

الهدفالسياسة
حساس الكمون وملاءم في عقدة واحدة--cpunodebind=N --membind=N (co-locate)
مرتبط بالنطاق الترددي وبصمة كبيرة--interleave=all
في الغالب عقدة واحدة ، انسكاب عرضي--preferred=N
دع النواة تقرر محلياً--localalloc

سير العمل العام

# دبوس قاعدة البيانات إلى العقدة 0 لتجنب زمن انتظار الذاكرة عبر العقد
numactl --cpunodebind=0 --membind=0 postgres -D /data

# عملية تحليلات ثقيلة النطاق الترددي: بين الذاكرة عبر جميع العقد
numactl --interleave=all ./analytics-job

# احتياطي نوى محددة لعملية الوقت الفعلي
numactl --physcpubind=8-15 --membind=1 ./rt-app

# تحقق من سياسة الإعداد التشغيل
numactl --show

أدوات الضبط ذات الصلة

الأداةالدور
numactlتعيين سياسة NUMA CPU/الذاكرة لكل عملية
numastatمراقبة كفاءة تخصيص لكل عقدة
tasksetتقاربة CPU (بدون سياسة ذاكرة NUMA)
cpupowerضبط تردد المعالج/المحافظ
نواة numa_balancingموازنة NUMA التلقائية (/proc/sys/kernel)

زوج numactl مع cpupower للتحكم في التردد؛ استخدم numastat للتأكد من أن الربط الخاص بك قلل بالفعل الأخطاء عبر العقد.

التحقق من الفوز

# قبل/بعد: مشاهدة numa_miss / numa_foreign انخفاض بعد الربط
numastat -p $(pgrep -n app)

ارتفاع numa_miss / numa_foreign يعني أن الذاكرة يتم تقديمها من عقدة بعيدة — بالضبط ما يصلحه الربط.

الموارد