ماذا تفعل عندما لا يكون لدى المعالج ما يفعله؟

سيكون من المعقول أن نفترض أنه بالنسبة للنواة سيكون من السهل جدًا ألا تفعل شيئًا - لكنها ليست كذلك. في مؤتمر Kernel Recipes 2018 ، تحدث رافائيل فيسوتسكي عن ما تفعله المعالجات ، عندما لا يكون لديهم ما يفعلونه ، وكيف تعالجه النواة ، وما هي استراتيجيتها الحالية ، وكيف أن عملها الأخير في دورة الخمول قد حسّن حالة الطاقة للأنظمة التي لا تفعل شيئًا. .

تتحكم دورة عدم النشاط ، وهي أحد أنظمة kernel الفرعية التي يدعمها Vysotsky ، في ما تفعله وحدة المعالجة المركزية عندما لا تحتاج إلى تنفيذ أي عمليات. أعطى Vysotsky بدقة جميع التعريفات: وحدة المعالجة المركزية هي كيان يمكنه تلقي تعليمات من الذاكرة وتنفيذها في وقت واحد مع كيانات أخرى في نفس النظام الذي يتعامل مع نفس الشيء. على أبسط نظام معالج أحادي النواة ، هذا النواة هو وحدة المعالجة المركزية. إذا كان المعالج يحتوي على عدة نوى ، فإن كل من هذه النوى هو وحدة معالجة مركزية. إذا كان لكل من النوى واجهات متعددة لتنفيذ التعليمات في وقت واحد - تطلق Intel مثل هذا النظام على " hyperthreading " - عندئذٍ سيكون كل من هذه السلاسل وحدة المعالجة المركزية.

تكون وحدة المعالجة المركزية في وضع الخمول عندما لا يكون لديها مهام للقيام بها. أو ، بشكل أدق ، نواة لينكس لديها عدة فئات داخلية للإرسال ، أحدها فئة خاملة خاصة. إذا لم تكن هناك مهام على وحدة المعالجة المركزية هذه في أي من الفئات ، باستثناء فئة عدم النشاط ، فإن وحدة المعالجة المركزية تعتبر غير نشطة. إذا كانت المعدات لا تسمح بذلك ، فسيتعين على وحدة المعالجة المركزية تنفيذ تعليمات غير مجدية حتى يظهر العمل الحقيقي. ومع ذلك ، يعد هذا استخدامًا غير فعال للغاية للكهرباء ، وهذا هو السبب في أن معظم المعالجات تدعم العديد من حالات الطاقة المنخفضة التي يقوم النواة بتحويلها إليها حتى تكون هناك حاجة للقيام بعمل مفيد.

لا يمكنك فقط الدخول أو الخروج من حالة التقاعس. يستغرق الأمر وقتًا للدخول والخروج ، بالإضافة إلى ذلك ، عندما تدخل هذه الحالة ، يزداد استهلاك الطاقة في الحالة الحالية قليلاً ، وعند الخروج منها ، تستهلك الحالة التي يدخل فيها المعالج. وعلى الرغم من أنه كلما كانت حالة الخمول أعمق ، كلما قل استهلاك الطاقة من المعالج ، تزداد تكلفة الدخول والخروج إلى هذه الحالات. وهذا يعني أنه في حالة فترات عدم النشاط القصيرة ، فإن أفضل استخدام لموارد الكمبيوتر سيكون تقاعسًا ضحلًا ؛ لفترات أطول ، سيتم تبرير تكلفة الانتقال إلى حالة عدم ترابط أعمق بزيادة في كمية الطاقة الموفرة. لذلك ، من مصلحة النواة أن تتنبأ بمدى بقاء المعالج خاملاً قبل تحديد مدى عمق حالة عدم النشاط التي يحتاجها. هذه هي مهمة دورة التقاعس.

في هذه الدورة ، يلاحظ المجدول أن وحدة المعالجة المركزية خاملة ، حيث لا تحتوي على أي مهام يمكن تعيينها لها. ثم يتصل المجدول بالمنظم ، الذي يحاول إعطاء أفضل تنبؤ عن حالة التقاعس المناسبة ، والتي يمكنك إدخالها. يوجد الآن في النواة عنصران للتحكم ، قائمة وسلم. يتم استخدامها في حالات مختلفة ، لكن كلاهما يحاولان القيام بنفس الشيء تقريبًا: لمراقبة حالة النظام عندما تدخل وحدة المعالجة المركزية في حالة خاملة والوقت الذي تقضيه في وضع الخمول. يتم ذلك من أجل التنبؤ بالمدى الذي ستستمر فيه وحدة المعالجة المركزية في حالة خمول فيه ، وبالتالي ، الحالة الأكثر ملاءمة لهذا الموقف.

هذا العمل معقد بشكل خاص بواسطة مؤقت جدولة وحدة المعالجة المركزية. يبدأ المجدول هذا المؤقت لتقسيم وقت الوصول إلى وحدة المعالجة المركزية: إذا كانت هناك حاجة إلى تنفيذ العديد من المهام على معالج واحد ، فلا يمكن تنفيذ كل منها إلا قليلاً ، ثم يتم تأجيلها دوريًا لصالح مهمة أخرى. لا يلزم تنفيذ هذا المؤقت على وحدة المعالجة المركزية الخاملة ، حيث لا توجد مهام يجب تقسيم وحدة المعالجة المركزية بينها. علاوة على ذلك ، إذا تم السماح للمؤقت بالعمل على وحدة معالجة مركزية خاملة ، فهذا سيمنع وحدة التحكم من تحديد حالات التباطؤ العميق ، مما يحد من الفترات الزمنية التي تكون وحدة المعالجة المركزية خاملة خلالها. لذلك ، في النواة حتى 4.16 ، أوقف المجدول المؤقت قبل استدعاء المنظم. عندما استيقظت وحدة المعالجة المركزية عند المقاطعة ، قرر المجدول ما إذا كانت هناك أي مهام ضرورية للتنفيذ ، وإذا كانت هناك أي مهام ، أعاد تشغيل المؤقت.

إذا توقعت وحدة التحكم فترة طويلة من الخمول ، وتبين أن هذه الفترة طويلة بالفعل ، فإن وحدة التحكم "تفوز": تدخل وحدة المعالجة المركزية في حالة من عدم النشاط العميق ، ويتم توفير الطاقة. ولكن إذا توقع المنظم فترة طويلة من الخمول ، وتبين أن هذه الفترة قصيرة ، فإن "المنظم" يخسر ، لأن تكلفة الدخول في حالة عدم نشاط عميق لا تؤتي ثمارها عن طريق توفير الطاقة لفترة قصيرة من الخمول. والأسوأ من ذلك ، عندما تنبأ المنظم بوقت تعطل قصير ، فإنه "يفقد" بغض النظر عن فترة التوقف: إذا اتضح أن الفترة طويلة ، فاته فرصة التوفير ، وإذا كانت قصيرة ، فقد تم إهدار تكاليف التوقف وإعادة تشغيل المؤقت. أو بعبارة أخرى ، بما أن الموارد تُنفق على إيقاف وبدء المؤقت ، فلا معنى لإيقافه عندما تتنبأ وحدة التحكم بوقت تعطل قصير.

قرر Vysotsky محاولة تغيير تشغيل المنظم ، لكنه توصل إلى استنتاج مفاده أن المشكلة الرئيسية هي إيقاف المؤقت قبل استدعاء المنظم ، أي قبل أن تصبح حالة الخمول الموصى بها معروفة. أعاد دورة خاملة في kernel 4.17 بحيث تم اتخاذ قرار إيقاف المؤقت بعد أن قدم المنظم توصيته. إذا تنبأ بوقت توقف طويل ، يتوقف المؤقت حتى لا يوقظ وحدة المعالجة المركزية مسبقًا. إذا تم افتراض أن فترة التوقف عن العمل قصيرة ، يتم ترك المؤقت حتى لا تضيع الموارد عند إيقاف التشغيل. هذا يعني أن المؤقت يقوم أيضًا بوظيفة الأمان ، ويوقظ وحدة المعالجة المركزية ، إذا تبين أن فترة التوقف أطول من المتوقع ، ومنح المنظم فرصة ثانية لاتخاذ القرار الصحيح.

عندما تستيقظ وحدة المعالجة المركزية الخاملة من خلال مقاطعة ، سواء أكان جهاز توقيت لا يمكن إيقافه أو حدث آخر ، يقرر المجدول على الفور ما إذا كان هناك عمل. إذا كان هناك عمل ، يتم إعادة تشغيل المؤقت حسب الضرورة. إذا لم يكن الأمر كذلك ، يتم استدعاء وحدة التحكم. نظرًا لأن هذا يعني أنه يمكن الآن استدعاء المنظم عندما يعمل المؤقت وعندما لا يعمل ، يجب استدعاء المنظم لأخذ ذلك في الاعتبار.

بعد أن درس جدول المكاسب والخسائر ، يعتقد فيسوتسكي أن تغييراته ستحسن الصورة. في حالة التنبؤ لفترة طويلة من الخمول ، لا يزال الموقت يتوقف ، لذلك لا شيء يتغير هنا ؛ نفوز إذا كانت فترة التوقف طويلة ، ونخسر إذا كانت قصيرة. ولكن إذا تم توقع فترة زمنية قصيرة من التوقف ، فسنفوز: إذا تبين أن الفترة قصيرة حقًا ، فسوف نوفر التوقف وبدء المؤقت ، وإذا كان الوقت طويلًا ، فسيوقظنا مؤقت غير متوقف ويتيح لنا الفرصة لعمل توقع آخر.


نظرًا لأن نظرية اللعبة لا يمكن أن تعمل كبديل كامل للوضع الحقيقي ، اختبر Vysotsky هذا النهج على العديد من الأنظمة. الرسم البياني أعلاه نموذجي لجميع الأنظمة المختبرة ؛ ويبين الاعتماد على استهلاك الوقت لنظام خامل. الخط الأخضر هو دورة التقاعس القديمة ، الخط الأحمر هو الخط الجديد. وفقًا للمخطط الجديد ، يتم استهلاك طاقة أقل ، بالإضافة إلى أنه يمكن التنبؤ به أكثر. لم تحصل جميع وحدات المعالجة المركزية التي تم اختبارها على مثل هذه الفجوة الكبيرة بين السطور ، إلا أنها أظهرت جميعًا خطًا أحمر مسطحًا تحت اللون الأخضر غير المستوي. كما قال Vysotsky ، فإن هذا المخطط الجديد أقل احتمالًا للتنبؤ بفترات قصيرة من الخمول ، ولكن في كثير من الأحيان يتبين أنه صحيح حول مدتها القصيرة.

قال Vysotsky ردا على سؤال من الجمهور ، أن هذا العمل يعتمد على الهندسة المعمارية. على وجه الخصوص ، ستستفيد معالجات Intel منه ، نظرًا لأن لديهم مجموعة كبيرة إلى حد ما من حالات عدم النشاط التي يمكن للمنظم من خلالها اختيار الحالة التي ستمنحه أفضل فرصة للنجاح إذا كان التنبؤ صحيحًا ؛ لكن معالجات ARM ستستفيد أيضًا من الدوائر الجديدة.


انخفاض بنسبة 20٪ في استهلاك الطاقة عندما يبدو الخمول إنجازًا ضئيلاً ، ولكنه في الواقع ليس كذلك. يجب أن يكون لدى أي نظام يرغب في التعامل بشكل جيد مع أحمال الذروة احتياطي طاقة في الوضع العادي ، والذي سيظهر نفسه أثناء عدم النشاط. يوضح الرسم البياني أعلاه استخدام المعالج للسنة على الخادم الخاص بي ، والذي يتعامل مع البريد ، ونقل الملفات ، VPN ، NTP ، إلخ. الأصفر يعني وقت بسيط. سيحب موفر الخدمة توفير 20٪ من هذه الطاقة ، وسيكون أفضل بالنسبة لكوكب الأرض.

Source: https://habr.com/ru/post/ar427419/


All Articles