حل لغز استهلاك الطاقة في نواة لينكس

نشره زايد في

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

كانت البداية مع تقرير بعلة تسبب انهيار النظام في أواخر شهر فبراير الماضي ،  وبعد البحث والتقصي تم اكتشاف أنه في بعض الحالات أن نظام بيوس BIOS  يبلغ النظام بأن ASPM  (وهي اختصار (Active State Power Management) إدارة حالة الطاقة النشطة ) غير  مدعوم من قبل العتاد ، ولكن في نفس الوقت يترك ASPM مفعل على الجهاز  ، مما يجعل نظام التقرير الأخطاء المتقدم AER يصدر رسائل أخطاء لا يمكن للنواة أن تتعامل معها.

إذا كان البيوس BIOS يعلن بأن ASPM غير مدعوم من قبل العتاد ، فلماذا لا نقوم بتعطيل ASPM بشكل يدوي كخطوة احترازية ونرتاح من مشاكل الأخطاء غير المنطقية؟  وهذا ما تم .

المفاجأة كانت أن هناك عدد لا بأس به من الأجهزة (خصوصا المعتمدة على منصة انتل) البيوس يقول أن ASPM غير موجود ، ولكن في الحقيقة أنه موجود ، مما أدى إلى زيادة استهلاك الطاقة عما كان عليه الأمر في الإصدارات السابقة لـ 2.6.38 ، إنه أمر مزعج للمستخدمين .

وجد مطورو لينكس أنفسهم بين أمرين: إما الثبات أو توفير الطاقة  ، و بالطبع اختاروا الثبات على توفير الطاقة ، وأتاحوا طريقة لتفعيل ASPM بشكل إجباري لمن يريد توفير الطاقة  ، هذا الحل ليس الأمثل بطبيعة الحال للمستخدم النهائي.

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

إذا نظام تشغيل ويندوز يقوم بشيء غير معروف ، الأمر تطلب بحثا وتنقيبا لحل هذا اللغز ، ابتسم الحظ لـ Matthew Garrett بعد اطلاعه على  عرض بعنوان  "PCI Express In Depth for Windows Vista and Beyond" ، واكتشف الطريقة التي يتعامل الويندوز بها مع العتاد خصوصا خصائص PCI   ؛ فالويندوز لن يمس أي خاصية لـ PCI ما لم يعطى صلاحية التحكم لفعل ذلك عن طريق دالة باسم  ACPI _OSC   ، لذا كان العبث بخاصية ASPM بدون الحصول على تصريح من العتاد لفعل ذلك مجرد خطأ صريح.

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

واصل Matthew Garrett رحلة استكشاف كيف يتعامل ويندوز مع ASPM ، واكتشف أن بعض التعريفات تقوم بالإيعاز إلى ويندوز بأن يعطل خاصية ASPM عن طريق ملف  INF ، لذا قام بفحص تعاريف عدة أجهزة ووجد أنها تصرح للويندز بأن يعطل ASPM ، لذا قام بتعطيل هذه الخاصية في نواة لينكس أيضا.

هل ترون صعوبة كتابة تعاريف لنواة لينكس في غياب التوثيق؟