środa, 23 lipca 2014

AMD Turion (A4-4355M) undervolting i testowanie stabilnośći

Tradycyjnie, przypadkowo trafiłem na stronę. W sympatyczny sposób mr-fabio90 opisał jak zmusić moje APU do korzystania z prędkości 900MHz, która (domyślnie lub bezmyślnie? =/) jest wyłączona:

1. Pobieramy i instalujemy TaurionPowerControl
(początkowo skopiowałem po prostu binarkę i utworzyłem dowiązanie symboliczne o nazwie tpc, ale chyba instalator (make && install) też to robi).
Aby dalsze komendy działały musimy załadować odpowiednie moduły:
modprobe cpuid
modprobe msr

2. Sprawdzamy jak wygląda nasza konfiguracja poprzez sudo tpc -l.
U mnie teraz to wygląda tak:
TurionPowerControl 0.44-rc2 (export)
Turion Power States Optimization and Control - by blackshard

Main processor is Family 15h (Bulldozer/Interlagos/Valencia) Processor
        Family: 0xf             Model: 0x0              Stepping: 0x1
        Extended Family: 0x15   Extended Model: 0x10
        Package Type: 0x0       BrandId: 0x0
Machine has 1 nodes
Processor has 1 cores
Processor has 7 p-states
Processor has 2 boost states

Power States table:
-- Node: 0 Core 0
core 0 pstate 0 (pb0) - En:1 VID:108 FID:5 DID:0.00 Freq:2100 VCore:0.2000
core 0 pstate 1 (pb1) - En:1 VID:108 FID:5 DID:0.00 Freq:2100 VCore:0.2000
core 0 pstate 2 (p0) - En:1 VID:117 FID:3 DID:0.00 Freq:1900 VCore:0.0875
core 0 pstate 3 (p1) - En:1 VID:118 FID:18 DID:1.00 Freq:1700 VCore:0.0750
core 0 pstate 4 (p2) - En:1 VID:120 FID:14 DID:1.00 Freq:1500 VCore:0.0500
core 0 pstate 5 (p3) - En:1 VID:120 FID:10 DID:1.00 Freq:1300 VCore:0.0500
core 0 pstate 6 (p4) - En:1 VID:121 FID:2 DID:1.00 Freq:900 VCore:0.0375

 --- Node 0:
Processor Maximum PState: 6
Processor Startup PState: 4
Processor Maximum Operating Frequency: 2400 MHz

Minimum allowed VID: 123 (0.0125V) - Maximum allowed VID 0 (1.5500V)
Processor AltVID: 54 (0.8750V)

Done.

Wcześniej VCore 900MHz -> 0.1500 - czyli więcej niż teraz 1900MHz!
A obecnie wytłuszczone En:1 było En:0,  co oznaczało, że tryb ten był nieaktywny.

3. Aby zmienić nieaktywny p-state na aktywny, należy wykonać komendę sudo tpc -en 6, gdzie 6 jest numerem p-state.

4. Aby zmienić napięcie sudo tpc -set pstate 6 vcore 0.0375.
Gdzie 6 to numer p-state, a 0.0375 to nowe napięcie. Należy jednak pamiętać, że za duże napięcie może uszkodzić procesor a zbyt niskie spowodować jego niestabilność.

Aby przetestować czy ustawione napięcie jest stabilne, należy ograniczyć procesor do pracy na danej częstotliwości:
echo 900000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq
echo 900000 > /sys/devices/system/cpu/cpu1/cpufreq/scaling_max_freq
I zmusić go do ciężkiej pracy. Do tego wygodny jest program mprime [źródło]. Aby go zdobyć wystarczy użyć tego linka pobrać mprime (np. mprime259.tar.gz), rozpakować, (skopiować mprime do /usr/bin i nadać mu uprawnienia chmod +x) i uruchomić z argumentem -t. Co pozwoli na przetestowanie procesora. Jeśli wyskakują błędy lub komputer się restartuje, trzeba podwyższyć vcore.

5. Aby umożliwić tzw. prędkości boost, wystarczy wydać komendę sudo tpc -boostenabe.

6. Sprawdzone komendy można dodać do /etc/rc.local, aby wykonywały się podczas uruchamiania systemu.

U mnie wygląda to tak:
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

#Testing:
#echo N>/sys/module/drm_kms_helper/parameters/poll

#Radeon Dynamic Power Manager applet
chmod a+w /sys/class/drm/card0/device/power_dpm_force_performance_level
chmod a+w /sys/class/drm/card0/device/power_dpm_state

#Turion Power Control
modprobe cpuid
modprobe msr

#It seems that `tpc -boostenable` does NOT work
#Boost is only actually ever used during favorable temperature conditions, and controlled explicitly by the CPU
# https://bbs.archlinux.org/viewtopic.php?id=160616
echo 1 > /sys/devices/system/cpu/cpufreq/boost

#TPC boost
tpc -boostenable
tpc -set pstate 0 vcore 0.2000
tpc -set pstate 1 vcore 0.2000

#TPC for CPU powersave
tpc -en 6

tpc -set pstate 2 vcore 0.0875 #0.0500 - failure #0.0750 #0.1125 #0.1625 #0.2125
tpc -set pstate 3 vcore 0.0750 #0.0750 #0.1125 #0.1625
tpc -set pstate 4 vcore 0.0500 #0.0375 - unstable? #0.0500 #0.0750 #0.1125
tpc -set pstate 5 vcore 0.0500 #0.0750
tpc -set pstate 6 vcore 0.0375 #0.0250 - unstable #0.0500 #0.0500

#tpc -set pstate 2 vcore 0.0500 #kernel machine check failed
#tpc -set pstate 6 vcore 0.0125 #unstable
#tpc -set pstate 6 vcore 0.0250 #unstable

#tpc -rampuptime 8
#tpc -rampdowntime 12

#Max CPU speed (ac and bat!)
echo 1900000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq
echo 1900000 > /sys/devices/system/cpu/cpu1/cpufreq/scaling_max_freq

exit 0

Uwagi końcowe:
- wygląda na to, że nie trzeba restartować komputera, aby zmiany zostały uznane przez system. Część programów (np. cpufreq-apref, mówi, że nie trzeba), ale cała reszta systemu mówi, że trzeba.
- z boostem, to jest tak, że nie da się go włączyć ręcznie. To wykonywane jest sprzętowo i w określonych warunkach, więc vcore 0.2000 jest ustawione 'na oko'.

Brak komentarzy:

Prześlij komentarz