Raspberry Media Center – Teil 17: Übertakten

Raspberry Pi 2Es hat sich schnell rumgesprochen, dass man Raspberry Pis übertakten kann und darf. Und speziell beim alten Raspberry Pi 1 war das eine beliebte Übung, um aus dem schmalbrüstigen Board das letzte Quäntchen Leistung herauszupressen. Der neue Raspberry Pi 2 kommt mit wesentlich mehr Power daher, weiter übertakten lässt er sich aber trotzdem. Wie funktioniert das Overclocking beim RasPi, was lässt sich einstellen und wie kann man die Stabilität des Systems überprüfen? Dieser Artikel sucht nach den Antworten.

Die CPU eines Raspberry Pi beherrscht das sogenannte Dynamic Frequency Scaling. Das ist eine Technik, bei der der CPU-Takt jederzeit in Abhängigkeit vom Leistungsbedarf hinauf oder herunter geregelt werden kann. Ein Betriebssystem, das das beherrscht vorausgesetzt. Unter Linux übernimmt diese Aufgabe der Ondemand Governor, eine Funktion des Linuxkernels, die es seit der Version 2.6.9 gibt. Beim Raspberry Pi heißt das, dass die CPU in der Grundeinstellung ohne Last mit 600MHz getaktet wird. Und bei Belastung wird auf 900MHz hochgeschaltet. Diese beiden Werte und einige weitere können geändert werden – und zwar durch Einträge in die Datei config.txt.

Overclocking Einstellungen in der config.txt

Wo sich die config.txt befindet und wie sie editiert werden kann, habe ich bereits im letzten Artikel (Stromversorgung) beschrieben, so dass ich mir hier eine Wiederholung spare. In der config.txt lässt sich eine ganze Menge einstellen, hier einige Statements, die für das Übertakten interessant sind:

arm_freq=1000

Erhöht den Takt des Arm-Prozessors auf 1000MHz. (Standard: 900MHz)

arm_freq_min=400

Senkt die Taktfrequenz in Ruhe auf 400MHz. (Standard: 600MHz)

core_freq=450

Erhöht die Taktfrequenz der GPU auf 450MHz. (Standard: 250MHz)

core_freq_min=200

Senkt die Ruhetaktfrequenz der GPU.

sdram_freq=500

Erhöht die Taktfrequenz für den Speicher auf 500MHz. (Standard: 450MHz)

sdram_freq_min=200

Senkt die Ruhetaktfrequenz für den Speicher.

over_voltage=6

Erhöht die Spannungsversorgung für CPU und GPU in Schritten von 0,025 V. (Standard: 0, mehr als Einstellung 6 geht nur mit force_turbo=1)

force_turbo=1

Schaltet die dynamische Übertaktung ab, der Takt bleibt konstant auf den höheren Werten (arm_freq) und geht nicht auf die Minimalwerte (arm_freq_min) zurück. Angeblich soll dabei intern ein Warranty Bit gesetzt werden und der Garantieanspruch erlöschen. Überprüfen kann ich diese Aussage allerdings nicht.

Und dann gibt es noch eine Einstellung, die nur indirekt mit der Taktung zu tun hat:

temp_limit=80

Setzt das Temperaturlimit auf 80 Grad, bei dem Übertaktungen aus Sicherheitsgründen abgeschaltet werden. (Standard: 85 Grad). Sobald die Temperaturschwelle erreicht wird, werden die Taktungen auf die *_min Werte zurückgeschaltet, bis die Temperatur zurückgegangen ist.

Typische Overclocking-Einstellungen für den Raspberry Pi 2

arm_freq core_freq sdram_freq over_voltage
Standard  900 250 450 0
High 1000 500 500 2
Turbo 1100 500 500 6

Alle mit force_turbo=0. Anhand dieser Werte kann man also beginnen, das Overclocking für den eigenen Raspberry zu optimieren. Der Turbo-Modus mit 1100MHz Arm-Frequenz funktioniert bei meinem RasPi allerdings nicht mehr stabil, ich kann nur bis maximal 1050MHz gehen.

Overclocking testen

Um zu sehen, ob geänderte Einstellungen auch einen stabilen Dauerbetrieb ermöglichen, sind (u. a.) zwei Dinge nötig:

  1. Zeit, denn eine Taktung, die 10 Minuten läuft, muss dies nicht zwangsweise auch über 24 Stunden tun und
  2. Last, denn die übertakteten Komponenten müssen schon beschäftigt werden, um ihre Stabilität zu beweisen.

Um Last zu erzeugen können wir natürlich ein anspruchsvolles Programm auf dem Raspberry laufen lassen, oder Kodi ein längeres Video per Software dekodieren lassen. Es gibt aber auch ein schönes Tool, das genau für diesen Zweck gemacht ist, verschiedene Komponenten testen kann und entsprechende Fehlermeldungen ausgibt. Das Tool heißt Stress und genau das macht es auch, es stresst den Raspberry Pi. Installiert wird es per apt-get, was leider die Nutzer von OpenELEC außen vor lässt. Diese können aber auf einer zweiten Micro-SD-Karte Raspbian oder OSMC für die Dauer des Tests aufspielen und dann auf OpenELEC zurückgehen.

Die Installation des Stresstesttools erfolgt nach einer Anmeldung per SSH wie folgt:

sudo apt-get update
sudo apt-get install stress

Dann können wir über die eingebaute Hilfe von Stress mehr über die Aufrufparameter erfahren:

stress -?
`stress' imposes certain types of compute stress on your system

Usage: stress [OPTION [ARG]] ...
 -?, --help         show this help statement
     --version      show version statement
 -v, --verbose      be verbose
 -q, --quiet        be quiet
 -n, --dry-run      show what would have been done
 -t, --timeout N    timeout after N seconds
     --backoff N    wait factor of N microseconds before work starts
 -c, --cpu N        spawn N workers spinning on sqrt()
 -i, --io N         spawn N workers spinning on sync()
 -m, --vm N         spawn N workers spinning on malloc()/free()
     --vm-bytes B   malloc B bytes per vm worker (default is 256MB)
     --vm-stride B  touch a byte every B bytes (default is 4096)
     --vm-hang N    sleep N secs before free (default is none, 0 is inf)
     --vm-keep      redirty memory instead of freeing and reallocating
 -d, --hdd N        spawn N workers spinning on write()/unlink()
     --hdd-bytes B  write B bytes per hdd worker (default is 1GB)
     --hdd-noclean  do not unlink files created by hdd workers

Example: stress --cpu 8 --io 4 --vm 2 --vm-bytes 128M --timeout 10s

Note: Numbers may be suffixed with s,m,h,d,y (time) or B,K,M,G (size).

Und dann starten wir gleich einmal einen einminütigen Test:

stress --cpu 8 --io 4 --vm 2 --vm-bytes 128M --timeout 1m
stress: info: [580] dispatching hogs: 8 cpu, 4 io, 2 vm, 0 hdd
stress: info: [580] successful run completed in 60s

Wenn wir gleichzeitig dazu in einem zweiten SSH-Fenster top starten, können wir die CPU-Last erkennen und die angestoßenen Test-Tasks.

Overclocking kontrollieren

Es gibt einige nützliche Kommandos, mit denen wir auf Linuxebene im SSH-Fenster Takt- und Temperaturwerte abfragen können. Einige möchte ich hier vorstellen:

cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors
ondemand userspace powersave performance

cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies
600000 900000

cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_min_freq
600000

cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq
900000

sudo cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_cur_freq
600000

cat /sys/class/thermal/thermal_zone0/temp
49768

Das erste Kommando fragt die verfügbaren Governors ab. Der ondemand-governor besagt, dass das System die dynamische Taktanpassung beherrscht.

Achtung Nutzer von XBian: XBian hat keinen ondemand-governor und läuft fest auf 900MHz, bzw. auf der Frequenz, die mit arm_freq vorgegeben wurde.

Mit dem zweiten Kommando können dann die beiden Frequenzen abgerufen werden, zwischen denen hinauf- bzw. zurückgeschaltet wird. Die letzten drei Nullen müssen wir bei den Werten abstreichen, um auf MHz zu kommen. Die minimale, die maximale und die aktuell anliegende CPU-Frequenz lassen sich ebenfalls abfragen. Für die aktuelle Frequenz müssen wir vor das Kommando jedoch ein sudo setzen, hierfür sind Rootrechte erforderlich.

Bei der CPU-Temperatur schließlich müssen wir den ausgegebenen Wert durch 1000 teilen um auf Grad Celsius zu kommen.

Eine andere Möglichkeit an Echtzeit-Informationen über CPU-Takt und -Temperatur zu kommen, ist das Tool vcgencmd, das wir bereits kennengelernt haben, um die Aktivierung des MPEG2-Codecs zu überprüfen.

vcgencmd measure_clock arm
frequency(45)=600000000

vcgencmd measure_clock core
frequency(1)=250000000

vcgencmd measure_volts core
volt=1.2000V

vcgencmd measure_temp
temp=49.2'C

Die Frequenzen werden hier in Hz ausgegeben, um MHz zu erhalten müssen die Werte durch 1000000 geteilt werden. Spannung und Temperatur haben bereits eine lesbare Formatierung. Mit vcgencmd lassen sich auch alle gesetzten Konfigurationsparameter auslesen und zwar getrennt für numerische Werte (int) und für Zeichenketten (str):

vcgencmd get_config int
arm_control=0xa5800010
arm_freq=900
avoid_fix_ts=1
config_hdmi_boost=5
disable_commandline_tags=2
disable_l2cache=1
disable_overscan=1
emmc_pll_core=1
force_eeprom_read=1
force_pwm_open=1
framebuffer_ignore_alpha=1
framebuffer_swap=1
hdmi_force_cec_address=65535
hdmi_ignore_cec_init=1
over_voltage_avs=0x1b774
pause_burst_frames=1
program_serial_random=1
sdram_freq=450
sdtv_aspect=1
temp_limit=85

vcgencmd get_config str
decode_MPG2=0xa7fc033d
decode_WVC1=0x6d1f1e7c
device_tree=-

Lohnt sich nun das Übertakten?

Die Antwort darauf ist ein eindeutiges „Jein“.

Dadurch, dass der Raspberry Pi in der Version 2 wesentlich leistungsstärker geworden ist als sein Vorgänger B+, muss nun sicher nicht mehr um das letzte bisschen Leistungssteigerung gerungen werden. Beim RasPi 1 gingen die Meinungen noch auseinander, ob auf eine Kodimaschine mit einem Tvheadend Client noch zusätzlich der Tvheadend Server gepackt werden kann. Beim Raspberry Pi 2 funktioniert das ohne Probleme und ohne jede Übertaktungsmaßnahme.

Mein subjektives Empfinden bei der Bedienung eines Kodi Media Centers merkt keinen Unterschied, ob ein OpenELEC mit standardmäßigen 900MHz getaktet ist, oder auf 1050MHz aufgebohrt wurde. Und auch meine Messungen bei der Datenübertragung zum Raspberry Pi zeigen zwar minimale Unterschiede, die aber nicht wirklich ins Gewicht fallen.

Trotzdem mag es Anwendungsfälle geben, bei denen eine Steigerung der Taktraten signifikante Erfolge bringen kann. Ein Media Center gehört meiner Meinung nach aber nicht dazu.

Wer hier tiefer in die Materie einsteigen möchte, dem empfehle ich einen sehr interessanten Artikel im Linux on Flash blog (englisch), der sich sehr ausführlich mit dem Übertakten eines Raspberry Pi 2 beschäftigt. Hier werden Unmengen von verschiedenen Konfigurationen auf Systemstabilität geprüft und Benchmarkwerte dazu ermittelt.


Weitere Artikel in dieser Kategorie:

1 Kommentar

  1. maphime

    Guter Beitrag! Ich habe eine ähnliche Anleitung auf meiner Webseite. Dort werden auch Benchmarks gezeigt.
    http://maphime.ch/tutorials/raspberry-pi-2-uebertakten.html

    Antworten

Schreiben Sie einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert