Rozwiązania problemu skalowania procesora

Ta strona jest ciągle rozwijana, możesz pomóc zgłaszając swoje uwagi na dole strony otwierając dyskusję dotyczącą tego artykułu.

Objawy

dmesg:

ondemand governor failed, too long transition latency of HW, fallback to performance governor

Okienko appletu uruchamianego przy starcie informuje że:

Zmiana częstotliwości procesora nie jest obsługiwana
Nie będzie można zmieniać częstotliwości pracy procesora. Komputer może być niepoprawnie skonfigurowany, albo nie obsługuje sprzętowej zmiany częstotliwości.

Problem

  • brak informacji o dostępnych częstotliwościach w jakich pracuje procesor
  • brak możliwości ustanowienia częstotliwości
  • niemożliwość automatycznego skalowania procesora, chociaż posiada funkcję zmiany częstotliwości
  • w niektórych przypadkach może być dostępny tryb powersave ma jednak tą wadę, że pozostaje na najniższej możliwej częstotliwości. A nam zależy na dynamicznym skalowaniu pomiędzy częstotliwościami

Rozwiązanie

Wspólne

Usunięcie/Zmiana nazwy pliku konfiguracyjnego cpufreqd

Z pewnych względów ten plik wszystko komplikuje, niezależnie od procesora.

# mv /etc/cpufreqd.conf /etc/cpufreqd.conf.old

Intel Pentium 4

Ładowanie modułów przy starcie

Dla procesorów z serii Intel Pentium 4 należy wykonać poniższe czynności jako root:

# echo p4-clockmod »/etc/modules
# echo cpuid »/etc/modules
# echo msr »/etc/modules

Modyfikacja modułu

Poniższy skrypt należy wykonać z poziomu użytkownika root. Został on pomyślnie przetestowany na dystrybucji Kubuntu 12.04, ale prawdopodobnie będzie on uniwersalnym rozwiązaniem pomiędzy różnymi dystrybucjami, szczególnie, że pierwsze próby miały miejsce na Ubuntu 10.04. Skrypt ten opiera się na pomyśle użytkownika Launchpad Doki1.

#!/bin/bash
# Author: Camelek.AmigaRulez (based on Doki's idea)
#
cd /lib/modules/$(uname -r)/kernel/drivers/cpufreq    # Przechodzimy do bieżących modułów zmiany częstotliwości
cp ./p4-clockmod.ko ./p4-clockmod.ko.old            # Kopia zapasowa
xxd ./p4-clockmod.ko ./p4-clockmod.ko.hex            # Konwersja BIN->HEX
sed 's/8196\ 9800/8096\ 9800/' ./p4-clockmod.ko.hex >./p4-clockmod.ko.hex.new # Podmiana ciągu znaków
diff ./p4-clockmod.ko.hex ./p4-clockmod.ko.hex.new        # Pokazanie różnic
xxd -r ./p4-clockmod.ko.hex.new ./p4-clockmod.ko.new    # Konwersja HEX->BIN
mv ./p4-clockmod.ko.new ./p4-clockmod.ko                # Podmiana modułu

Dlaczego

Moduły obsługujące skalowanie częstotliwości mogą być nie ładowane przy starcie, stąd też właśnie potrzeba ich manualnego załadowania. Podobno jednak od wersji jądra Linux 3.4 moduły te będą ładowane automatycznie2.

Z nieznanych przyczyn nawet jeśli procesor obsługuje skalowanie częstotliwości, to oryginalna konfiguracja nie pozwala mu przechodzić w inne częstotliwości, stąd też właśnie jest usuwana/przenoszona.

Modyfikacja modułu ma na celu zmianę wartości zmiennej w nim ukrytej. Konwersja do postaci odczytywalnej przez edytory tekstu lub tak jak w tym przypadku edytor strumieniowy sed ma na celu umożliwienie mu edycji na pliku tekstowym, a następnie następuje ponowne przekonwertowanie do postaci pliku binarnego.

O ile nie zaznaczono inaczej, treść tej strony objęta jest licencją GNU Free Documentation License.