Enhanced SpeedStep w systemie Linux 2.6
Napisał: Patryk Krawaczyński
03/02/2008 w Administracja Brak komentarzy. (artykuł nr 36, ilość słów: 665)
E
nhanced Intel SpeedStep Technology – bo tak brzmi pełna nazwa – jest technologią firmy Intel (pochodzi ona od technologii SpeedStep obecnej w procesorach Pentium M), która pozwala na dynamiczne obniżanie kilku kluczowych wartości technicznych procesora (napięcie oraz częstotliwość taktowania), co pozwala na obniżenie poboru prądu i temperatury jednostki centralnej. Wypływającymi z tego korzyściami są dłuższa praca na baterii laptopa (poprzez zmniejszenie zużycia energii) i ograniczoną emisję ciepła procesora (skutkiem tego jest także zmniejszenie poziomu hałasu układu chłodzącego w postaci wentylatora), gdy system jest bezczynny. Po załadowaniu odpowiednich modułów jądra Linuksa obniży ono automatycznie taktowanie zegara procesora, kiedykolwiek to możliwe i automatycznie zwiększy jego szybkość przy większym obciążeniu i wymogu bardziej wydajnej pracy.
Czyli mówiąc prościej EIST kontrolowana jest przez system operacyjny. To on decyduje, kiedy procesor może być spowolniony, a kiedy ma pracować w pełni swojej mocy. Enhanced SpeedStep ponadto jest kolejnym krokiem do lepszego zarządzania czasem procesora. Istnieje przeświadczenie, że włączenie tej technologii obniża w jakimś stopniu wydajność sprzętową, jednak w typowym użytkowaniu systemu różnica ta jest praktycznie niezauważalna. Przed przystąpieniem do konfiguracji systemu należy EIST włączyć w samym systemie BIOS:
Advanced |_ Device options: |_ Intel (R) Speedstep (TM) technology: Automatic
By nasz Linux mógł z niej skorzystać wymagane jest posiadanie co najmniej jądra 2.6.9 lub nowszego. W Slackware EIST można włączyć za pomocą załadowania odpowiedniego modułu, dla wybranego procesora obsługującego tą technologię. Dla przykładu zostanie wykorzystana technologia SpeedStep obecna w Procesorze Pentium 4 Mobile, o zegarze 2.2 GHz umożliwiająca mu obniżenie taktowania do 1,2 GHz:
### CPU frequency scaling modules: # generic ACPI P-States based driver #/sbin/modprobe acpi-cpufreq # AMD mobile K6-2/3+ PowerNow! #/sbin/modprobe powernow-k6 # AMD mobile Athlon PowerNow! #/sbin/modprobe powernow-k7 # AMD Cool&Quiet PowerNow! #/sbin/modprobe powernow-k8 # Intel SpeedStep using the SMI BIOS interface #/sbin/modprobe speedstep-smi # Intel SpeedStep on ICH-based chipsets /sbin/modprobe speedstep-ich # Intel Enanced SpeedStep #/sbin/modprobe speedstep-centrino # Intel Pentium4/Xeon clock modulation #/sbin/modprobe p4-clockmod # NatSemi Geode GX / Cyrix MediaGXm #/sbin/modprobe gx-suspmod # Transmeta Cursoe / Efficeon LongRun #/sbin/modprobe longrun # VIA Cyrix Longhaul #/sbin/modprobe longhaul
Jak widać został załadowany moduł dedykowany jest dla niektórych procesorów mobilnych Intel Pentium III (Coppermine), wszystkich Intel Pentium III-Mobile (Tualatin) i wszystkich Intel Pentium 4 P4-Mobile, na komputerach wyposażonych w mostek południowy Intel ICH2, ICH3 lub ICH4. Po załadowaniu odpowiedniego sterownika w systemie plików sysfs pojawi się odpowiedni interfejs do zarządzania częstotliwością procesora. Odpowiednie pliki są zlokalizowane w katalogu: /sys/devices/system/cpu/cpu0/cpufreq/:
- cpuinfo_min_freq – plik ten pokazuje najmniejszą możliwą częstotliwość operacyjną procesora wyrażoną w kilo hercach (kHz).
- cpuinfo_max_freq – plik ten pokazuje największą możliwą częstotliwość operacyjną procesora wyrażoną w kilo hercach (kHz).
- scaling_driver – plik ten pokazuje, który ze sterowników jest używany do skalowania częstotliwości procesora.
- scaling_available_governors – plik ten pokazuje, możliwych zarządców załadowanych jako moduły, bądź wkompilowanych w jądro. Zarządcami są różne metody wymuszania obniżenia, bądź podwyższenia częstotliwości procesora.
- scaling_governor – plik ten pokazuje, aktualnie używanego zarządce wykorzystywanego przez system. Zarządce dodaje się poprzez odpowiednie wstrzyknięcie słowa przez funkcję „echo”. Standardowym zarządcą poprzez załadownie samego sterownika Speedstep jest userspace, który umożliwia ręcznie ustawienie częstotliwości procesora w pliku scaling_setspeed. Oczywiście nie możemy ustawić dowolnej wartości – gdyż dyktowana ona jest plikami scaling_min_freq oraz scaling_max_freq.
Inni zarządcy także znajdują się w pliku /etc/rc.d/rc.modules:
### CPU frequency scaling policies: # Powersave policy /sbin/modprobe cpufreq_powersave # Performance policy /sbin/modprobe cpufreq_performance # Frequency on demand /sbin/modprobe cpufreq_ondemand
Pierwszy zarządca wymusza jak najmniejszy pobór mocy przez najniższą częstotliwość, drugi jak największą wydajność przez najwyższą częstotliwość, a trzeci – w zależności od zapotrzebowania przez system, co wydaje się najlepszą polityką zarządzania częstotliwością procesora. W celu jej uaktywnienia dodajemy odpowiedni wpis do pliku określającego aktualnego zarządcę:
echo ondemand > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
Po załadowaniu i wskazaniu odpowiedniego zarządcy częstotliwości możemy sprawdzić aktualną częstotliwość procesora:
cat /proc/cpuinfo |grep cpu
Uwagę należy zwrócić na wiersz cpu MHz. Jeśli system będzie w stanie normalnej pracy, która nie wymaga zbyt dużego nakładu mocy procesora zostanie ustawiony jego zegar na najmniejszą możliwą wartość. Jeśli uruchomimy program, który wymaga większej mocy zegar procesora zostanie ustawiony na największą możliwą wartość. W celu wsparcia technologii Speedstep Intela, a także PowerSave czy Cool’n’Quiet firmy AMD możemy wykorzystać również programy: cpudyn, cpufreqd, powernowd.
Więcej informacji: dokumentacja: /usr/src/linux/Documentation/cpu-freq/