تقارب المعالج
في علوم الحاسوب ، تُمكّن خاصية تقارب المعالج ، والتي تُسمى أيضًا تثبيت وحدة المعالجة المركزية أو تقارب الذاكرة المؤقتة ، من ربط وفك ربط عملية أو خيط معالجة بوحدة معالجة مركزية (CPU) أو مجموعة من وحدات المعالجة المركزية، بحيث تُنفَّذ العملية أو الخيط فقط على وحدة المعالجة المركزية المُحددة أو وحدات المعالجة المركزية المُخصصة، وليس على أي وحدة معالجة مركزية أخرى. [ 1 ] يُمكن اعتبار ذلك تعديلًا لخوارزمية جدولة قائمة الانتظار المركزية الأصلية في نظام تشغيل متعدد المعالجات متناظر . يحتوي كل عنصر في قائمة الانتظار على علامة تُشير إلى معالجه الأقرب . عند تخصيص الموارد، تُخصَّص كل مهمة لمعالجها الأقرب على حساب المهام الأخرى.
تختلف تطبيقات خوارزميات الجدولة في مدى التزامها بتفضيل المعالج. في بعض الحالات، تسمح بعض التطبيقات بانتقال مهمة إلى معالج آخر إذا أدى ذلك إلى زيادة الكفاءة. على سبيل المثال، عندما تكون مهمتان تتطلبان موارد معالجة عالية (أ و ب) مرتبطتين بمعالج واحد بينما يبقى معالج آخر غير مستخدم، فإن العديد من خوارزميات الجدولة تنقل المهمة ب إلى المعالج الثاني لزيادة استخدام المعالج إلى أقصى حد. عندئذٍ، تصبح المهمة ب مرتبطة بالمعالج الثاني، بينما تبقى المهمة أ مرتبطة بالمعالج الأصلي. [ 2 ]
في معظم أنظمة التشغيل، يتم التعبير عن مجموعة المعالجات التي يُسمح (أو يُفضل) أن تعمل عليها عملية أو خيط معالجة كقناع تقارب ، وهو قناع بت يتوافق مع أنوية النظام. [ 3 ]
غاية
هناك عدة أسباب لاستخدام خاصية تقارب المعالج.
موقع ذاكرة التخزين المؤقت والذاكرة الرئيسية
قد يُقاطع مُجدول نظام التشغيل تنفيذَ أحد الخيوط لإفساح المجال لبرامج أو خيوط أخرى أثناء المقاطعة. إذا أُعيد توجيه الخيط لاحقًا إلى المعالج الذي كان يعمل عليه سابقًا، فقد تبقى بعض البيانات في ذاكرة التخزين المؤقت لوحدة المعالجة المركزية (CPU) والتي يُمكن إعادة استخدامها، مما يُقلل من حالات عدم العثور على البيانات في ذاكرة التخزين المؤقت . [ 4 ] يضمن تحديد تقارب المعالج تشغيل الخيط دائمًا على نفس المعالج (المعالجات)، ولكنه في الوقت نفسه يُجبره على الانتظار حتى يصبح المعالج (المعالجات) متاحًا مرة أخرى. تُعد هذه الميزة مفيدة بشكل خاص للعمليات كثيفة الاستخدام لوحدة المعالجة المركزية (CPU) والتي تحتوي على عدد قليل من المقاطعات. قد يؤدي تطبيق نفس الإجراء على برنامج عادي إلى إبطائه، حيث يميل إلى التعرض للمقاطعات بشكل متكرر وينتهي به الأمر بالانتظار لفترة أطول. [ 5 ] من الأمثلة العملية على تقارب المعالج تشغيل نسخ متعددة من تطبيق أحادي الخيط، مثل بعض برامج عرض الرسومات. [ 6 ]
في وحدات المعالجة المركزية التي تدعم تقنية تعدد الخيوط المتزامنة (SMT، والمعروفة أيضًا باسم تقنية تعدد الخيوط الفائقة ، وهي علامة تجارية عامة لشركة إنتل)، تتشارك الخيوط (المعالجات المنطقية، أو النوى الافتراضية) الموجودة على نواة فعلية واحدة في ذاكرتي التخزين المؤقت L1 وL2. وبالنسبة لأهمية التقارب المكاني، فهي متطابقة. [ 7 ]
في أنظمة الوصول غير الموحد للذاكرة (NUMA)، توجد مشكلة مشابهة، إلا أن زمن الاستجابة لا ينجم عن أخطاء ذاكرة التخزين المؤقت L1/L2، بل عن أخطاء ذاكرة التخزين المؤقت L3 والوصول إلى الذاكرة بين العقد. يضمن تقييد جميع خيوط البرنامج على نفس عقدة NUMA (أو على الأقل نفس مقبس وحدة المعالجة المركزية) إمكانية مشاركة ذاكرة التخزين المؤقت L3 الخاصة بها. قد يلزم إجراء تكوين إضافي لضمان تخصيص الذاكرة من عقدة NUMA المحلية. [ 8 ] [ 9 ]
تقسيم الموارد
تُفرض خاصية تقارب المعالج أيضًا تقسيمًا ثابتًا لموارد المعالجة. ونتيجةً لذلك، يُمكن استخدامها للحد من عدد أنوية وحدة المعالجة المركزية التي يستخدمها برنامجٌ مُستهلكٌ لوحدة المعالجة المركزية بكثافة، مما يُتيح استخدام أنوية أخرى للبرامج الأخرى. بالطبع، هذا ليس الأمثل، إذ سيترك موارد غير مُستغلة تمامًا عندما لا تكون هناك برامج أخرى قيد التشغيل، كما سيسمح للبرامج الأخرى بالتنافس مع البرنامج المُستهلك لوحدة المعالجة المركزية بكثافة على الموارد الموجودة على الأنوية القليلة المُخصصة له. تشمل الطرق الأكثر تقدمًا لتقسيم الموارد إعدادات أولوية وحدة المعالجة المركزية، وحصص استخدام وحدة المعالجة المركزية، وحدود النسبة المئوية للاستخدام. [ 10 ] [ 7 ]
مرة أخرى، في وحدات المعالجة المركزية التي تدعم تقنية تعدد المهام المتزامنة (SMT)، قد يقع مُجدوِلو المهام غير المُدركين لهذه التقنية في خطأ جدولة العمل على نواة غير مشغولة مع نواة أخرى مشغولة، في حين أن هناك نوى فعلية غير مشغولة. سيؤدي هذا إلى تنافس غير ضروري على الموارد بين الخيطين. ونتيجة لذلك، غالبًا ما تُعيّن البرامج متعددة الخيوط التي تستهلك موارد وحدة المعالجة المركزية بكثافة يدويًا تقارب خيوطها لضمان عدم تنافسها على نفس النواة الفعلية. [ 11 ] [ 12 ]
أنظمة تشغيل محددة
شبيهة بنظام يونكس
في نظام لينكس ، يمكن تغيير تقارب وحدة المعالجة المركزية لعملية ما باستخدام برنامج taskset(1) [ 13 ] واستدعاء النظام sched_setaffinity(2) [ 14 ] . ويمكن تغيير تقارب الخيط باستخدام إحدى دوال المكتبة: pthread_setaffinity_np(3) أو pthread_attr_setaffinity_np(3).
في أنظمة SGI ، يقوم dplace بربط عملية بمجموعة من وحدات المعالجة المركزية. [ 15 ]
في أنظمة NetBSD 5.0 و FreeBSD 7.2 و DragonFly BSD 4.7 والإصدارات الأحدث ، يمكن pthread_setaffinity_npاستخدام [ 16 ] و [ 17 ] أداة psrset لتعيين تقارب مؤشر ترابط مع مجموعة معالجات مركزية معينة. أما في FreeBSD ، فتُستخدم أداة cpuset لإنشاء مجموعات المعالجات المركزية وتخصيص العمليات لهذه المجموعات.pthread_getaffinity_np
في نظام التشغيل DragonFly BSD 1.9 (2007) والإصدارات اللاحقة، usched_setيمكن استخدام استدعاء النظام للتحكم في تقارب العملية. [ 19 ] [ 20 ] في نظام التشغيل DragonFly BSD 3.1 (2012) والإصدارات اللاحقة، يمكن استخدام أداة usched لتخصيص العمليات لمجموعة معينة من وحدات المعالجة المركزية. [ 21 ]
في نظام سولاريس، يُمكن التحكم في ربط العمليات ووحدات العمل المحلية (LWPs) بالمعالج باستخدام البرنامج pbind(1) [ 22 ] . وللتحكم في التقارب برمجيًا، يُمكن استخدام البرنامج processor_bind(2) [ 23 ] . كما تتوفر واجهات أكثر عمومية، مثل pset_bind(2) [ 24 ] أو lgrp_affinity_get(3LGRP) [ 25 ] ، باستخدام مفاهيم مجموعات المعالجات ومجموعات المواقع.
في نظام AIX، يُمكن التحكم في ربط العمليات باستخدام الأمر bindprocessor [ 26 ] [ 27 ] وواجهة برمجة التطبيقات bindprocessor(). [ 26 ] [ 28 ] يدعم مُجدول AIX تقنية تعدد الخيوط المتزامنة (SMT)، وهو قادر على تغيير حالات SMT لأنوية POWER7/8/9 من خيط واحد إلى 8 خيوط لزيادة الإنتاجية إلى أقصى حد. [ 29 ]
نظام التشغيل macOS
لا يوفر نظام macOS واجهة برمجة تطبيقات (API) لإدارة مجموعة المعالجات المسموح بتشغيل عملية أو مهمة أو خيط معالجة عليها. بدلاً من ذلك، يوفر واجهة برمجة تطبيقات Thread Affinity، التي تُخبر النواة بالخيوط التي يجب جدولتها لمشاركة نفس ذاكرة التخزين المؤقت L2، أي التشغيل على نفس نواة وحدة المعالجة المركزية الفعلية. [ 30 ] تقوم نواة XNU داخليًا بترجمة كل علامة تقارب إلى مجموعة من النوى المنطقية المسموح بها والتي تُقابل نواة فعلية. عند تعيين علامة، يتم إنشاء مساحة اسم Thread Affinity إذا لم تكن موجودة بالفعل. ثم يتم ربطها بالنواة التي تحتوي على أقل عدد من العلامات المرتبطة بها. لا تنتقل العلامات بين النوى في إصدار XNU 8792؛ ونتيجة لذلك، طالما أن عدد العلامات لا يتجاوز عدد النوى الفعلية، فإن كل علامة ستُقابل نواة فعلية واحدة فقط. يتم توريث مساحات الأسماء والعلامات بين العمليات الأصلية والفرعية. [ 31 ]
واجهة برمجة التطبيقات غير متاحة على arm64 (Apple Silicon)، حيث ml_get_max_affinity_setsتم ترميزها بشكل ثابت لإرجاع 0. [ 32 ]
ويندوز إن تي
في نظام التشغيل Windows NT والإصدارات اللاحقة، يمكن ضبط تقارب وحدة المعالجة المركزية للخيوط والعمليات بشكل منفصل باستخدام استدعاءات واجهة برمجة التطبيقات SetThreadAffinityMask [ 33 ] و SetProcessAffinityMask [ 34 ] أو عبر واجهة إدارة المهام (لتقارب العمليات فقط). [ 35 ]
يمكن تحقيق فرض توجيه كل خيط OpenMP إلى نوى منطقية منفصلة في نظام التشغيل Windows عن طريق استخدام كود C التالي ، مع ملف الرأس <Windows.h> :
#include <Windows.h> #include <omp.h>// تعيين تقارب خيط OpenMP void setThreadAffinity ( void ) { #pragma omp parallel default(shared) { DWORD_PTR mask = ( DWORD_PTR ) 1 << omp_get_thread_num (); SetThreadAffinityMask ( GetCurrentThread (), mask ); } }انظر أيضاً
مراجع
- ↑ فاسواني، راج (1991). "آثار تقارب الذاكرة المخبئية على جدولة المعالج للمعالجات المتعددة البرامج ذات الذاكرة المشتركة". وقائع الندوة الثالثة عشرة لجمعية الحوسبة الآلية حول مبادئ أنظمة التشغيل (SOSP '91) . جمعية الحوسبة الآلية. الصفحات 26-40 . doi : 10.1145/121132.121140 .
- ↑ سكويلانتي، مارك س. (1993). "استخدام معلومات تقارب المعالج مع ذاكرة التخزين المؤقت في جدولة المعالجات المتعددة ذات الذاكرة المشتركة". معاملات IEEE في الأنظمة المتوازية والموزعة . 4 (2): 131-143 . doi : 10.1109/71.207589 .
- ↑ "دالة SetThreadAffinityMask (winbase.h) - تطبيقات Win32" . learn.microsoft.com . 27 يناير 2022. تم الاطلاع عليه في 7 أبريل 2023 .
- ↑ توريللاس، جوزيب (1995). "تقييم أداء جدولة تقارب الذاكرة المخبئية في المعالجات المتعددة ذات الذاكرة المشتركة". مجلة الحوسبة المتوازية والموزعة . 24 (2): 139-151 . doi : 10.1006/jpdc.1995.1014 .
- ↑ "تقارب المعالج والربط" . شركة آي بي إم . تم الاسترجاع في 2021-06-08 .
- ↑ مازوز، عبد الحفيظ (2011). "تقييم وتحليل أداء استراتيجيات تثبيت الخيوط على منصات متعددة النوى" (ملف PDF) . وقائع المؤتمر الدولي للحوسبة عالية الأداء والمحاكاة لعام 2011 (HPCS '11) . الصفحات 273-279 . doi : 10.1109/HPCSim.2011.5999834 .
- 1 2 "ورقة بيضاء - تقارب المعالج" - من موقع tmurgent.com . تم الاطلاع عليها بتاريخ 2007-07-06.
- ↑ "الفصل 27. تكوين تقارب وحدة المعالجة المركزية وسياسات NUMA باستخدام systemd" . وثائق Red Hat . تم الاطلاع عليه بتاريخ 27-05-2026 .
- ↑ بلاغودوروف، سيرجي (2011). دراسة حالة لإدارة التنازع الواعية بـ NUMA على الأنظمة متعددة النوى (ملف PDF) . وقائع المؤتمر التقني السنوي لـ USENIX لعام 2011. جمعية USENIX .
- ↑ "الفصل 24. استخدام cgroups-v2 للتحكم في توزيع وقت وحدة المعالجة المركزية للتطبيقات | إدارة ومراقبة وتحديث النواة | Red Hat Enterprise Linux | 8 | وثائق Red Hat" . docs.redhat.com .
- ↑ "واجهة تقارب الخيوط" . إنتل . تم الاسترجاع في 27-05-2026 .
- ↑ زورافليف، سيرجي (2010). "جدولة تراعي التنازع على الأنظمة متعددة النوى". معاملات ACM لأنظمة الحاسوب . 28 (4): 8:1–8:45. doi : 10.1145/1880018.1880019 .
- ↑ – دليل مستخدم لينكس – أوامر المستخدم من Manned.org
- ↑ "sched_setaffinity(2) — صفحة دليل لينكس" . man7.org . تم الاطلاع عليه بتاريخ 27-05-2026 .
- ↑ dplace.1 مؤرشف بتاريخ 2007-07-01 في Wayback Machine - من sgi.com . تم الوصول إليه بتاريخ 2007-07-06.
- ↑
pthread_setaffinity_np(3)–دليل وظائف مكتبة NetBSD و FreeBSD و DragonFly BSD - ↑ – دليل مدير نظام NetBSD
- ↑ – دليل الأوامر العامة لنظام FreeBSD
- ↑ " — إعداد جدولة العمليات" . دليل استدعاءات نظام DragonFly . DragonFly BSD . تم الاسترجاع في 28 يوليو 2019 .
usched_set(2) - ↑ " " . مرجع BSD المتقاطع . DragonFly BSD . تم الاسترجاع في 28-07-2019 .
kern/kern_usched.c § sys_usched_set - ↑ " — تشغيل برنامج باستخدام مُجدول مُحدد لمساحة المستخدم وقناع وحدة المعالجة المركزية" . دليل مدير نظام DragonFly . DragonFly BSD . تم الاطلاع عليه بتاريخ 28 يوليو 2019 .
usched(8) - ↑ pbind(1M) - صفحة دليل سولاريس
- ↑ processor_bind(2) - صفحة دليل Solaris
- ↑ pset_bind(2) - مكتبة معلومات Oracle Solaris 11.1 - قسم صفحات الدليل 2
- ↑ دليل المطور لتحسين استخدام الذاكرة وتوزيع الخيوط في lgrp_affinity_get(3LGRP)
- 1 2 أوميش برابهاكار جايكواد؛ كيلاس س. زادبوك (16 نوفمبر 2006). "تقارب المعالج على نظام التشغيل AIX" . شركة IBM .
- ↑ "أمر bindprocessor" . IBM .
- ↑ "برنامج فرعي لربط المعالج" . شركة IBM .
- ↑ "POWER CPU Memory Affinity 3 - جدولة العمليات على SMT والمعالجات الافتراضية" . www.ibm.com . 13 يونيو 2023.
- ↑ "ملاحظات إصدار واجهة برمجة تطبيقات تقارب الخيوط" . Developer.apple.com .
- ↑ "xnu/osfmk/kern/affinity.c at e3723e1f17661b24996789d8afc084c0c3303b26 · apple-oss-distributions/xnu" . GitHub .
- ↑ شفرة مصدر XNU: xnu/osfmk/arm/cpu_affinity.h
- ↑ SetThreadAffinityMask - مكتبة MSDN
- ↑ SetProcessAffinityMask - مكتبة MSDN
- ↑ "مجموعات المعالجات" . مايكروسوفت ليرن . مايكروسوفت . تم الاسترجاع في 27-05-2026 .
روابط خارجية
- خوارزميات جدولة المعالج
- موازنة الأحمال (الحوسبة)
- جدولة العمل
