/التحكم في تردد المعالج من خلال نظام التشغيل

التحكم في تردد المعالج من خلال نظام التشغيل

هل فكرت يوماً في التعديل على سرعة المعالج يدوياً من خلال نظام التشغيل ؟ هل فكرت في زيادة تردد المعالج لتسريعه يدوياً او تقليل التردد لحفظ الطاقة ؟

من خلال هذا المقال سنتعرف على كيفية التحكم في تردد المعالج يدوياً من داخل نظام التشغيل.

نستخدم في هذا المقال توزيعة ubuntu الشهيرة لنظام Linux. قبل ان نتعرف على كيفية القيام بذلك يجب اولاً ان نعرف ما هو ال device driver.

يمكن تعريف  الdevice driver على أنه برنامج يمكن نظام التشغيل من التعامل مع hardware معين و التحكم فيه. تحتوي نواة كل نظام تشغيل على مجموعة من الـ drivers التي يمكنها التعامل مع مختلف انواع الhardware المعروفة. بالنسبة لنظام linux فإن الdriver المسئول عن التحكم في تردد المعالج يسمى “cpufreq”.

يعتبر cpufreq تطبيقاً تنفيذياً لتقنية DVFS (Dynamic Voltage and Frequency Scaling). تم اقتراح تلك التقنية بهدف تقليل الطاقة الديناميكية المستهلكة في المعالجات عن طريق تخفيض كل من فرق الجهد الداعم للمعالج و تردد المعالج و الذي أثبت كفاءة كبيرة في تقليل الطاقة على مدى العقدين الماضيين. قامت شركات تصنيع المعالجات بتبني تلك التقنية و دعمها في جميع معالجاتها تحت أسماء مختلفة. تم تطوير cpufreq driver ليكون واجهة تطبيقية لتنفيذ تلك التقنية من خلال نظام تشغيل linux على المعالجات الداعمة لها.

يوجد لـ cpufreq عدة متحكمات أو governors ، كل governor يعمل بأسلوب مختلف وهم :

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

2- performance governor : يعمل دائماً على أقصى تردد ممكن.

3- powersave governor: يعمل دائما على اقل تردد ممكن لحفظ الطاقة.

4- conservative governor: يشبه أول نوع و لكنه لا يزيد التردد مرة واحدة إلى أقصى قيمة و انما يزيد التردد تدريجياً.

5- userspace governor: يمكن المستخدم من تغيير التردد يدوياً حسب الحاجة.

و اﻵن نلقي نظرة على كيفية استخدام cpufreq driver في ubuntu.

توجد الملفات التي يمكن من خلالها التحكم في cpufreq في المسار :

/sys/devices/system/cpu/cpu*/cpufreq1

حيث * تعبر عن رقم الـ core في المعالج ، بمعنى اذا كان معالجك ذو 4أنوية فإنك ستجد 4 directories بالاسم cpu0-cpu3.

نفترض اننا نريد التعامل مع اول core وهي core0 ، لنلقى نظرة على الملفات التي يمكن التعامل معها.

نقوم بعرض محتويات ملف scaling_governor و الذي يوضح ال governor المستخدم حالياً نجد انه يشير إلى ondemand governor و هو الgovernor الافتراضي للـ cpufreq.

cat scaling_governor

2

لمعرفة أقصى تردد يمكن الوصول إليه و أقل تردد و الترددات التي يمكن التحويل إليها :

cat scaling_max_freq

cat scaling_min_freq

cat scaling_available_freq

3

لاحظ أن كل الترددات الموجودة تقاس بالـ kHz.

يمكنك قراءة محتويات باقي الملفات و التعرف عليها.

اﻵن لتغيير الـ governor المستخدم من ondemand لـ user space نكتب الامر التالي :

echo userspace > scaling_governor

4

اﻵن يمكنك ضبط تردد المعالج على أحد الترددات الموجودة في scaling_available_frequencies و ذلك عن طريق كتابة التردد المطلوب إلى ملف scaling_setspeed.

scaling_setspeed

5

بالطبع هناك الكثير من الاحصائيات التي يمكن الحصول عليها عن طريق قراءة محتويات الملفات و الكثير من الاعدادت التي يمكن ضبطها عن طريق الكتابة في ملفات أخرى و التي يمكنك تجربتها و التعامل معها ، كما يمكن ظبط اعدادات الـ ondemand governor مثل sampling rate و غيرها ، فالهدف من هذا المقال هو توفير فكرة مبسطة عن طريقة التعامل مع cpufreq في أنظمة linux.

Demonstrator at Computers & Systems Engineering Department, former CEO & Hardware Design Engineer at BLINK.