CPU frequency scaling (العربية)
cpufreq تعني بنية النواة التحتية التي تقوم بتغيير تردد وحدة المعالجة المركزية، تسمح هذه التقنية لنظام التشغيل من أن يقوم بتغيير تردد المعالج زيادةً أو نقصاناً من أجل توفير استهلاك الطاقة، من الممكن أن يتم تغيير التردد تلقائياً automatically بحسب احتياجات النظام واستجابةً لأحداث ACPI (واجهة التهيئة المتقدمة للطاقة Advanced Configuration Power Interface) أو يدوياً عن طريق البرامج.
منذ إصدار النواة رقم 3.4 فإن الوحدات modules الضرورية يتم تحميلها تلقائياً بالإضافة إلى تفعيل مخطط الطاقة ondemand governor (العمل عند الطلب) الذي ينصح بالعمل عليه بشكل افتراضي. غير أن برامج مثل cpupower[broken link: invalid section], acpid, laptop-mode-tools أو بعض الأدوات ذات الواجهة الرسومية GUI ما زالت تُستخدم للتهيئة المتقدمة.
أدوات(cpupower)
حزمة cpupower هي عبارة عن أدوات صممت لتساعد في تغيير تردد المعالج، مع العلم أنك تستطيع تغيير التردد من دون وجود هذه الحزمة ولكن من المستحسن وجودها لأنها تحتوي على أدوات مفيدة تعمل في سطر الأوامر وخدمة لتغيير مخطط الطاقة governor عند الإقلاع، يتواجد ملف تهيئة الحزمة cpupower في المسار /etc/default/cpupower
، يتم قراءة هذا الملف من قبل سكربت bash في /usr/lib/systemd/scripts/cpupower
والذي يتم تفعيله من قبل مدير النظام systemd
مع cpupower.service
، لتفعيل cpupower عند الإقلاع باستعمال systemd قم بتنفيذ:
# systemctl enable cpupower.service
تستطيع الحصول على واجهة لـ gnome-shell من CPU Freq.
تعاريف المعالج الخاصة بالتردد
pstate
الخاص بإدارة الطاقة في معالجات إنتل الحديثة والاستغناء عن التعاريف الظاهرة في الأسفل، هذا التعريف له الأفضلية على التعاريف الأخرى كما أنه بُني بحيث لا يكون كوحدة module، يتم استخدام هذا التعريف حالياً بشكل تلقائي في المعالجات من النوع Sandy Bridge و Ivy Bridge، إذا كنت تواجه مشكلة أثناء استخدام هذا التعريف قم بإضافة intel_pstate=disable
إلى سطر النواة، يمكنك استعمال نفس أدوات المُستخدِم مع هذا التعريف لكن لا تستطيع أن تتحكم فيه.أداة cpupower تحتاج إلى وحدات لمعرفة حدود المعالج المحلي (انظر إلى الجدول في الأسفل)، للاطلاع على قائمة بكل الوحدات المتوفرة قم بتنفيذ:
$ ls /lib/modules/$(uname -r)/kernel/drivers/cpufreq/
# echo <module> >/etc/modules-load.d/<module>.conf
قم بتحميل الوحدة المناسبة عن طريق:
# modprobe <module>
الوحدة | الوصف |
---|---|
acpi-cpufreq | تعريف CPUFreq الذي يستخدم ACPI Processor Performance States، هذا التعريف يدعم تقنية Intel Enhanced SpeedStep (سابقاً كانت هذه التقنية مدعومة من وحدة speedstep-centrino التي تم إهمالها) |
speedstep-lib | تعريف CPUFreq لمعالجات Intel speedstep enabled (خاصة المعالجات من فئة atoms و معالجات pentium القديمة (أقدم من 3)) |
powernow-k8 | تعريف CPUFreq لمعالجات K8/K10 Athlon64/Opteron/Phenom. تم إهمال هذا التعريف منذ إصدار النواة رقم 3.7، استعمل acpi_cpufreq |
pcc-cpufreq | هذا التعريف يدعم واجهة Processor Clocking Control المصممة من قبل شركتا Hewlett-Packard و Microsoft التي تفيد في بعض مُخدمات Proliant |
p4_clockmod | تعريف CPUFreq لمعالجات Intel Pentium 4 / Xeon / Celeron ، عند تفعيل التعريف سيقوم بتخفيض حرارة المعالج عن طريق تخطي دورات الساعة skipping clocks، من الأرجح أنك ستقوم باستخدام تعريف Speedstep بدلاً من هذا |
عند تحميل التعريف المناسب فإنك تستطيع عرض معلومات مفصلة عن المعالج (أو المعالجات) بتنفيذ:
$ cpupower frequency-info
Scaling governors
الـ governors هي مخططات الطاقة للمعالج (انظر إلى الجدول في الأسفل)، ولا يمكن تفعيل أكثر من مخطط واحد في نفس اللحظة، لتفاصيل أكثر قم بالاطلاع على الوثائق الرسمية official documentation في مصادر النواة.
on_demand
بشكل افتراضيالوحدة | الوصف |
---|---|
cpufreq_ondemand | تقوم بالتبديل بين الترددات ديناميكياً عند وصول نسبة الحِمل على المعالج إلى 95% |
cpufreq_performance | تجعل المعالج يعمل بأعلى تردد |
cpufreq_conservative | تقوم بالتبديل بين الترددات ديناميكياً عند وصول نسبة الحِمل على المعالج إلى 75% |
cpufreq_powersave | تجعل المعالج يعمل بأدنى تردد |
cpufreq_userspace | تجعل المعالج يعمل بالترددات التي يحددها المستخدم |
$ watch grep \"cpu MHz\" /proc/cpuinfo
عند استخدام cpupower
لتحميل وتفعيل مخطط معين يجب عليك تنفيذ:
# cpupower frequency-set -g <governor_without cpufreq_>
عند عدم استخدام cpupower
# echo <module> > /etc/modules-load.d/<module>
لتحميل مخطط معين نفذ:
# modprobe <governor>
ضبط مخططات الطاقة (باستخدام cpupower)
/etc/default/cpupower
، <percent> هي النسبة المئوية للحِمل على المعالج cpu load، <governor> هي مخطط cpupower.لوضع عتبة (نقطة بداية) للصعود إلى تردد آخر:
# echo -n <percent> > /sys/devices/system/cpu/cpufreq/<governor>/up_threshold
لوضع عتبة (نقطة بداية) للنزول إلى تردد آخر:
# echo -n <percent> > /sys/devices/system/cpu/cpufreq/<governor>/down_threshold
معدل أخد العينات
يقوم مخطط الطاقة بتفحص إعدادات المعالج لضبطها من فترة لأخرى، والذي يقوم بتحديد تكرار هذه العملية هو معدل أخد العينات sampling rate، عامل sampling_down_factor
الأكبر من 1 يحسن من الأداء وذلك بتخفيض السقف الأعلى للحِمل على المعالج وتركه يعمل بأعلى تردد ساعة نظراً للحِمل الكبير عليه، هذه العملية ليس لها تأثير على الأداء في حالة الترددات المنخفضة أو الحمولة المنخفضة.
لقراءة قيمة معدل أخذ العينات (افتراضياً =1) قم بتنفيذ:
$ cat /sys/devices/system/cpu/cpufreq/ondemand/sampling_down_factor
لتغيير القيمة نفذ:
# echo -n <value> > /sys/devices/system/cpu/cpufreq/ondemand/sampling_down_factor
تعيين الحد الأعلى والحد الأدنى للتردد
/etc/default/cpupower
، للتعيين لنواة معالج واحدة فقط: -c <core #>
حيث <clock_freq> هو تردد ساعة المعالج بالواحدات GHz أو MHz.لضبط الحد الأعلى لتردد المعالج:
# cpupower frequency-set -u <clock_freq>
لضبط الحد الأدنى:
# cpupower frequency-set -d <clock_freq>
لتحديد تردد معين للمعالج:
# cpupower frequency-set -f <clock_freq>
التفاعل مع حالات ACPI
قد يُعِد بعض المستخدمين مخططات تتبدل تلقائياً بحسب حالات ACPI المختلفة مثل توصيل شاحن الكهرباء أو غلق شاشة الحاسب المحمول laptop lid، سنعطي مثالاً سريعاً في الأسفل لكن من الجيد قراءة مقال كامل عن acpid.
إذا كانت حزمة acpid مثبتة لديك فإنك ستجد قائمة بالحالات أو الوضعيات مسجلة في الملف /etc/acpi/handler.sh
، على سبيل المثال لتبديل مخطط أداء المعالج من performance
إلى conservative
عند فصل شاحن الكهرباء وإعادة تبديل المخطط عند إعادة وصل الشاحن:
/etc/acpi/handler.sh
[...] ac_adapter) case "$2" in AC*) case "$4" in 00000000) echo "conservative" >/sys/devices/system/cpu/cpu0/cpufreq/scaling_governor echo -n $minspeed >$setspeed #/etc/laptop-mode/laptop-mode start ;; 00000001) echo "performance" >/sys/devices/system/cpu/cpu0/cpufreq/scaling_governor echo -n $maxspeed >$setspeed #/etc/laptop-mode/laptop-mode stop ;; esac ;; *) logger "ACPI action undefined: $2" ;; esac ;; [...]
Privilege Granting Under GNOME
واجهة GNOME لديها أداة جميلة لتبديل مخطط الطاقة governor بشكل سريع، لاستخدامها دون الحاجة لإدخال كلمة مرور الجذر root قم بإنشاء /var/lib/polkit-1/localauthority/50-local.d/org.gnome.cpufreqselector.pkla
ومن ثم قم بإضافة الأسطر التالية فيه:
[org.gnome.cpufreqselector] Identity=unix-user:USER Action=org.gnome.cpufreqselector ResultAny=no ResultInactive=no ResultActive=yes
قم بتغيير كلمة USER
إلى اسم المستخدم لديك.
تشتمل حزمة desktop-privilegesAUR المتوفرة في مستودعات AUR على ملف .pkla
مشابه للملف السابق ولكن وظيفة هذا الملف هي السماح لكل المستخدمين في المجموعة power
بتبديل المخططات.
أدوات وضعية الحاسب المحمول
إذا كنت تستخدم Laptop Mode Tools لحلول توفير الطاقة الأخرى فبإمكانك تركها لتُدير لك تردد المعالج، لعمل هذا الأمر يجب عليك إضافة التعريف المناسب إلى المجلد /etc/modules.d/
(انظر إلى #CPU frequency driver[broken link: invalid section] في الأعلى) ومن ثم قم بالذهاب إلى الملف /etc/laptop-mode/conf.d/cpufreq.conf
لتعيين مخططات الطاقة والتردد والسياسات أو الخطط، لن تحتاج إلى تحميل وحدات أو خدمات أخرى لضبط مخططات الطاقة أو لكيفية التعامل مع حالات ACPI، يرجى الاطلاع على Laptop Mode Tools لمزيد من التفاصيل.
استكشاف الأخطاء وإصلاحها
الدقة الفعلية لهذه المقالة أو هذا القسم ما زالت قيد النقاش. السبب: الرجاء الاطلاع على أول مناقشة في القالب لرؤية شرح مختصر.
- بعض التطبيقات مثل ntop لا تستجيب بشكل جيد لتغيير التردد التلقائي، وفي هذه الحالة يمكن لـ ntop أن يسبب مشاكل في التجزئة وضياع الكثير من المعلومات والبيانات، كما أن مخطط
on-demand
لا يستطيع أن يرفع من تردد المعالج بسرعة عندما يكون التردد الحالي غير كافي لمعالجة حزم البيانات الواردة إلى واجهة مراقبة الشبكة monitored network interface.
- في بعض المعالجات قد يكون الأداء ضعيفاً مع إعدادات مخطط
on-demand
الافتراضية (على سبيل المثال: ملفات الفيديو بصيغة فلاش لا تعمل بسلاسة أو تأثيرات النوافذ تكون مهتزة وغير ثابتة)، في هذه الحالة وبدلاً من تعطيل المخطط نهائياً لحل هذه المشكلة، يمكنك الزيادة من اندفاع التردد وذلك بتخفيض عتبة (نقطة بدء) الزيادة up_threshold لمتغير sysctl لكل معالج على حدى.
قم بالاطلاع على #Changing the on-demand governor's threshold[broken link: invalid section].
- في بعض الأحيان لا يعمل مخطط on-demand بأقصى تردد مُعين له ولكن بتردد أقل منه بقليل، تُحل هذه المشكلة بوضع قيمة أقصى تردد max_freq أعلى قليلاً من القيمة الحقيقية، على سبيل المثال: إذا كان مدى تردد المعالج بين 2.00 GHz و 3.00 GHz فإن وضع max_freq على 3.01 GHz سيكون جيداً.
- بعض مجموعات تعاريف ALSA وبعض كروت الصوت قد تواجه مشكلة تخطي المقاطع الصوتية عند التبديل بين ترددات المعالج، لحل هذه المشكلة يتوجب عليك أن تختار مخطط طاقة ثابت لا يغير من تردد المعالج.
تقييد التردد من قبل BIOS
هناك بعض تكوينات CPU/BIOS تواجه صعوبة في رفع التردد إلى الحد الأقصى أو رفع التردد بشكل عام، هذه الصعوبة يكون سببها على الأرجح إجراءات BIOS التي تطلب من نظام التشغيل تقييد أقصى تردد يصل إليه المعالج مما يجعل الملف /sys/devices/system/cpu/cpu0/cpufreq/bios_limit
يضبط قيمة أقصى تردد على قيمة أقل مما هي عليه.
أو قد يكون سبب هذه الصعوبة أنك قمت بضبط معين في أداة إعداد BIOS (التردد، إدارة الحرارة ... إلخ)، أو أن الـ BIOS قديمة أو بها أعطال، أو أن BIOS لديها أسباب خطيرة تجعلها تتحكم بتردد المعالج على طريقتها.
أسباب مثل هذه يمكن أن تحدث عند إزالة البطارية (على افتراض أن حاسوبك من النوع المحمول) أو أنها شبه فارغة أو متعطلة، وبالتالي سيعمل الحاسوب على شاحن الكهرباء فقط، في هذه الحالة فإن مقابس الكهرباء الضعيفة قد لا تتمكن من تزويد الكمية الكافية من الكهرباء لتلبية المتطلبات الكبيرة للنظام بأكمله (خاصة مع عدم وجود بطارية لكي تقوم بالمساعدة) مما يؤدي إلى ضياع في البيانات data أو تلفها أو في أسوأ الأحوال ضرر في العتاد الصلب hardware.
ليس كل أنواع BIOS تُقيد أو تحد من تردد المعالج، لكن على سبيل المثال أغلب IBM/Lenove Thinkpads تفعل ذلك، راجع thinkpad related info on this topic لمزيد من المعلومات المتعلقة بـ Thinkpads.
إذا قمت بالمراجعة ولم تجد أي ضبط غريب أو مريب لـ BIOS وإذا كنت تعلم ما الذي تفعله فإنك تستطيع أن تجعل النواة kernel تتجاهل (ترفض) هذه الحدود التي وضعتها BIOS.
لجعل النواة تتجاهل هذه الحدود يجب تمرير متغير خاص إلى وحدة المعالج، لتجربة هذا الأمر مؤقتاً قم بتغيير القيمة في الملف /sys/module/processor/parameters/ignore_ppc
من 0
إلى 1
.
أما لجعل هذا التجاهل بشكل دائم قم بالاطلاع على Kernel modules[broken link: invalid section] أو قم بإضافة processor.ignore_ppc=1
إلى سطر إقلاع النواة أو قم بإنشاء:
/etc/modprobe.d/ignore_ppc.conf
# If the frequency of your machine gets wrongly limited by BIOS, this should help options processor ignore_ppc=1