Raspberry Pi Performance Tuning und Tweaks
In vielen meiner Artikel habe ich bereits kleinere Tipps und Tweaks zum Performance Tuning des Raspberry Pi veröffentlicht. Ich möchte euch diese und weitere hier als Übersicht zur Verfügung stellen. Anmerkungen, Wünsche, Fragen oder weitere Vorschläge dürfen gerne in dem Kommentaren hinterlassen werden.
Inhaltsverzeichnis
Vorwort
Bitte beachtet das sich nicht jeder Tweak für jedes System eignet, überlegt euch vor Einsatz eines Tweaks ob euer System überhaupt davon profitiert und nicht ungünstige Seiteneffekte auftauchen können. Erstellt bitte vor Anpassungen immer eine Sicherung eures Systems. Viel Spaß beim Performance Tuning eures Raspberry Pi!
Allgemeines
Sicherung erstellen
Viele dieser Einstellungen sind tiefgreifend und verändern euer System unter Umständen massiv. Ihr solltet, bevor Ihr Anpassungen an eurem RasPi vernehmt, immer ein Image Backup via Win32 Disk Imager erstellen. Hierzu steckt ihr unter Windows die SD-Karte in den Kartenleser, öffnet Win32 Disk Imager und tragt als Ordner unter „Image File“ ein Verzeichnis ein in welchem Ihr das Backup Image speichern möchtet.
Der „Read“ Button erscheint nach der Angabe eines Pfades, durch ein Klick wird eine volle Sicherung als Image von eurem RasPi erstellt.
Raspbian
Wo immer es geht sollte Raspbian als Betriebssystem verwendet werden. Die Besonderheit ist, dass als erste Distribution Kernel und Pakete als ARMHF kompiliert sind, also mit dem sog. Hard-Float-Support. Dieser sorgt dafür, dass Gleitkommazahlen im ARM-Prozessor des Pi vom mathematischen Koprozessor VPU ausgeführt werden und nicht wie in den übrigen Distribtionen im Soft-Float-Verfahren langsam per Ganzzahloperationen nachgebildet werden. Dadurch erreicht Raspbian je nach Anwendung teils deutliche Geschwindigkeitsvorteile in Anwendungen.
Firmware und Raspian updaten
Bevor man mit manuellen Optimierungen und Tweaks startet ist es sinnvoll erstmal das Betriebssystem und die Raspberry Pi Firmware auf den aktuellen Stand zu bringen, oft sind danach schon Verbesserungen festzustellen. Die aktuelle Firmware und der Kernel kann mit „uname -a“ abgefragt werden. Aktualisierung des Betriebssystems und entfernen alter ungenutzter Versionen und Überbleibsel. Update aktualisiert die Paketquellen und dist-upgrade führ die Installation der neuen Versionen durch.
1 2 3 4 |
sudo apt-get -y update sudo apt-get -y dist-upgrade sudo apt-get -y autoremove sudo apt-get -y autoclean |
Aktualisierung der RasPi Firmware
1 |
sudo rpi-update |
Nach der Aktualisierung sollte das System zur Sicherheit via „sudo reboot“ einmal neu gestartet werden.
Netzteil
Eine Häufige Fehlerursache ist die Verwendung eines billigen Netzteils für die Stromversorgung. Der Raspberry Pi benötigt ein Netzteil mit mindestens 700mA. Persönlich habe ich mit folgenden zwei Netzteilen sehr gute Erfahrungen gemacht. Diese ermöglichen auch mit angeschlossenen USB-Geräten einen stabilen Dauerbetrieb des Raspberry Pi.
SD-Karten
Benutzt am Besten immer eine SD Karte der Klasse 10, da der Bus an welche die Karte angeschlossen ist kaum mehr als 30 Megabyte pro Sekunde schafft, wäre alles Andere im Bezug auf die Performance Geldverschwendung.
SD-Karte optimieren
Die SD-Speicherkarten sind leider nicht für den Dauerbetrieb ausgelegt und gehen bei nach einigen Schreib- und Lesezyklen gerne mal kaputt. Daher gilt es diese, wo möglich, zu reduzieren (gilt auch für Reboots). Eine Möglichkeit ist die Daten auf USB Speicher auszulagern und nur die für den Start notwendigen Daten auf der SD-Karte zu belassen. Alternativ können Schreibintensive Bereiche wie Logs in den RAM ausgelagert werden. Für einige dieser Systemverzeichnisse kann es daher sinnvoll sein, diese ins RAM auszulagern. Um /var/log und /var/run in den Arbeitsspeicher auszulagern, müssen folgende Einträge in der /etc/fstab hinzugefügt werden:
1 2 |
none /var/run tmpfs size=5M,noatime 00 none /var/log tmpfs size=5M,noatime 00 |
Nachteil: Verlagert man Dateien und Ordner in den RAM sind diese nach einem Neustart nicht mehr verfügbar! Die Zugriffe auf die SD Karte können durch deaktivieren des „Swapping“ (Auslagerung von Daten aus dem Arbeitsspeicher) weiter reduziert werden. Das ist allerdings nur sinnvoll wenn man nicht auf das swapping angewiesen ist. Insofern nur wenig Arbeitsspeicherintensive Serverdienste und kein Desktop zum Einsatz kommt können die Einstellungen gefahrlos angepasst werden.
1 2 3 |
sudo dphys-swapfile swapoff sudo dphys-swapfile uninstall sudo update-rc.d dphys-swapfile remove |
Kühlung des RasPi
Update: Artikel zur Kühlung Aktiv / Passiv für den Raspberry Pi 2.
Obwohl der Raspberry Pi bei Auslieferung über keine Kühlkörper verfügt, stellt dies im Normalfall aufgrund der geringen Wärmeentwicklung kein Problem dar. Wird der RPi jedoch übertaktet oder im 24/7 Dauerbetrieb eingesetzt, ist es sinnvoll kleine Kühlkörper aus Aluminium nachzurüsten. Ebenso wenn ein Gehäuse ohne Lüftungsschlitze verwendet oder der RasPi an einem warmen Ort (z.B. direkt hinter dem Fernseher) betrieben wird. Das senken der Temperatur wirkt sich positiv auf die Lebensdauer aus.
Der RasPi benötigt drei passive Kühlelemente, achtet darauf das die Kühlelemente entweder Wärmeleitpads verwenden oder über Wärmeleitkleber angebracht werden (nicht zu viel verwenden). Alternativ kann ein aktive Kühlung in Form eines Lüfters verwendet werden, wobei ich das wegen der Geräuschentwicklung und Stromaufnahme (meist keine Steuerung) ehr unangebracht finde.
- Prozessor (ca. 12 x 12 mm)
- Controller (ca. 8,6 x 8,6 mm)
- Spannungsregler (ca. 5,4 x 6,4 mm)
Übertakten / Overclocking
Update: How to zum Übertakten unter OpenELEC mit dem Raspberry Pi 2
Eine weitere Möglichkeit den Raspberry Pi zu Optimieren und mehr Geschwindigkeit aus ihm herauszukitzeln ist das Übertakten der CPU, auch Overclocking genannt. Der Prozessor des Raspberry Pis läuft mit einem Takt von 700Mhz. Der Raspberry Pi kann mittels ein paar Parmeter in /boot/config.txt einfach übertaktet werden, allerdings geht das zwecks der höheren Wärmeentwicklung immer zu Lasten der Lebensdauer. Wer seinen RasPi Übertakten möchte sollte daher immer Kühlkörper installiert (siehe oben) und ein Gehäuse mit Lüftungsöffnungen haben. Es gibt mittlerweile die Möglichkeit unter Raspbian den Raspberry Pi ohne Garantieverlust auf bis zu 1 Ghz zu übertakten, hierzu muss allerdings das Konfigurationsprogramm „raspi-config“ verwendet werden: Zunächst öffnen wir über das folgende Kommando das „Raspberry Pi Configuration Tool“.
1 |
sudo raspi-config |
Dort wählen wir den Punkt Overclock an und bestätigen, dass wir den Hinweis zur Verkürzung der Lebensdauer des Raspberry Pis gelesen haben. Daraufhin können wir wählen, wie stark wir den Raspberry Pi übertakten möchten. Ich verwenden den Modus High, der Turbo Modus sollte nicht verwendet werden da der RasPi unter Umständen instabil wird. Nach Änderung der Taktfrequenz ist ein Neustart notwendig.
Die Overclocking Optionen, der Standard ist „None“ mit 700 MHz, ich verwende mit Entsprechender Kühlung und einem guten Netzteil „High“ mit 950 MHz.
Um den aktuellen Zustand der CPU zu erfragen gibt es ein schönes Tool mit dem Namen „cpufrequtils“, dieses könnt ihr wie folgt installieren und aufrufen:
1 2 |
sudo apt-get install cpufrequtils cpufreq-info # zeigt dann Infos zur CPU an |
Memory Splitt
Unter dem Punkt memory_split im Tool „raspi-config“ können wir die Verteilung des Arbeitsspeichers zwischen der CPU und der GPU (der Grafikkarte) einstellen. Dafür müssen wir ins Textfeld eingeben, wie viel Megabyte (MB) vom Arbeitsspeicher der Grafikkarte zugewiesen werden sollen.
Sinnvoll sind folgende Einstellungen:
- Niedrig Der minimale Wert von 16 erlaubt dem System 496 MB Speicher zu benutzen. Das sollte eingestellt werden, wenn am Pi wenig über die Grafikkarte berechnet wird. Also wenn zB kein Monitor angesteckt ist und der Pi nur über SSH betrieben wird und nicht auf den Desktop bootet.
- Standard Die Standardeinstellung von 64 MB für die Grafikkarte, für den Betrieb im Desktop Modus meistens am Besten.
- Hoch 128 oder 256 MB für die Grafikkarte. Das benötigt man vor allem dann, wenn Bilder, Anwendungen oder Videos ohne ruckeln über die HDMI-Schnittstelle ausgegeben werden sollen. Es muss darauf geachtet werden das dem System genügend Speicher zum Arbeiten übrig bleibt. Wenn das System nicht genügend Arbeitsspeicher zur Verfügung hat beginnt es Daten auf die SD Karte auszulagern (swapping), der RasPi wird dann sehr langsam!
Grundsätzlich gilt: wird viel Grafik ausgegeben, dann hoch, ist kein Monitor angesteckt, dann niedrig. Ich betreibe meine Server mit 16 MB Grafikkartenspeicher da ich kein Desktop oder Grafikausgabe verwende.
RasPi als Desktop
Hintergrund
Wenn ihr auf den Desktop startet solltet ihr bitte grundsätzlich das Standard Hintergrundbild entfernen, das ist ein echter Performance-Killer.
1 2 3 |
Rechtsklick auf eurem Desktop und Auswahl von "Desktop Preferences". Wählt anstelle eines Bildes eure bevorzugte Farbe unter "Background colour". Direkt darunter gibt es die Auswahl "Wallpaper mode:", wählt hier "Fill with background colour only". |
Alternativ kann die Datei „/home/pi/.config/pcmanfm/LXDE/pcmanfm.conf“ angepasst werden.
1 |
sudo nano /home/pi/.config/pcmanfm/LXDE/pcmanfm.conf |
Setzt dann eine Raute vor den entsprechenden Wallpaper eintrag und speichert mit STRG+X, Y und Enter.
1 2 3 4 5 6 |
... [desktop] wallpaper_mode=3 #wallpaper=XXX ... |
Desktop Preload
Wer seinen RasPi nicht als reinen kommandozeilen basierten Server, sondern mit grafische Desktop-Oberfläche verwendet, kann den Startvorgang durch das Preloaden beschleunigen. Preload beobachtet Anwendungen, die ein Benutzer startet, sagt auf Grund einer Analyse dieser Daten vorher, welche Anwendungen Benutzer starten werden und lädt diese Binärdateien und deren Abhängigkeiten in den Speicher, damit sie schneller gestartet werden. Bitte nicht auf reinen Servern ohne X11 bzw. Desktop verwenden. Die Installation des Preload Paketes erfolgt via
1 |
sudo apt-get install -y preload |
Eine sinnvolle Anpassung der Preload.conf ist die folgende, SED ersetzt hierbei die Sortstrategy in der preload.conf. Die Option „sortstrategy“ definiert, nach welcher Strategie das Vorladen vorgenommen werden soll: 0 = nicht sortieren; 1 = nach Pfad sortieren; 2 = Nach inode sortieren; 3 = nach Datenblock sortieren.
1 |
sed -i 's/sortstrategy = 3/sortstrategy = 0/g' /etc/preload.conf |
RasPi als Server
RAM komprimieren
Gerade auf dem RPI mit wenig Arbeitsspeicher kommt es hin und wieder vor, dass dieser knapp wird und das System beginnt, den Swap-Speicher zu nutzen. Da sich dieser auf der SD-Card befindet, ist er im Vergleich zum RAM relativ langsam. Das Modul ZRAM zwackt bei Bedarf einen Teil des Arbeitsspeichers ab, um eine RAM-Disk anzulegen, die als schnellerer Auslagerungsspeicher (swap) bei Engpässen dient. Zudem werden die ausgelagerten Daten komprimiert, um den Speicher möglichst effizient zu nutzen. Die transparente Komprimierung erfordert allerdings CPU-Leistung. Als erstes sollten wir prüfen ob das Kernel Modul „zram“ überhaupt in unserem Kernel existiert. Falls das Modul nicht gefunden wir solltet ihr diese Anpassung nicht durchführen.
1 |
modprobe zram |
Falls das Modul vorhanden ist (bei Raspbian enthalten), richten wir ein Skript ein das zram beim Starten des System immer mit startet
1 |
sudo nano /etc/init.d/zram |
Wir fügen folgenden Code ein
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
#!/bin/bash ### BEGIN INIT INFO #Provides: zram #Required-Start: #Required-Stop: #Default-Start: 2 3 4 5 #Default-Stop: 0 1 6 #Short-Description: Increased Performance In Linux With zRam (Virtual Swap Compressed in RAM) #Description: Adapted for Raspian (Rasberry pi) by eXtremeSHOK.com using https://raw.github.com/gionn/etc/master/init.d/zram ### END INIT INFO start() { mem_total_kb=$(grep MemTotal /proc/meminfo | grep -E --only-matching '[[:digit:]]+') modprobe zram sleep 1 #only using 50% of system memory, comment the line below to use 100% of system memory mem_total_kb=$((mem_total_kb/2)) echo $((mem_total_kb * 1024)) > /sys/block/zram0/disksize mkswap /dev/zram0 swapon -p 100 /dev/zram0 } stop() { swapoff /dev/zram0 sleep 1 rmmod zram } case "$1" in start) start ;; stop) stop ;; restart) stop sleep 3 start ;; *) echo "Usage: $0 {start|stop|restart}" RETVAL=1 esac |
Danach machen wir das Skript ausführbar und aktualisieren via „update-rc.d“ die Starteinstellungen unseres RasPi.
1 2 3 |
sudo chmod +x /etc/init.d/zram sudo update-rc.d zram defaults sudo reboot |
Nach dem Reboot können wir via swapon kontrollieren ob zram seinen Dienst tut. Der Befehl zeigt uns eine Swap-Statistik an, hier sollte natürlich zram auftauchen.
1 2 3 4 5 |
pi@raspberrypi ~ $ swapon -s Filename Type Size Used Priority /var/swap file 524284 0 -1 /dev/zram0 partition 224364 0 100 |
Entfernen der grafischen Oberfläche
Viele nutzen den Raspberry Pi als Server, daher reicht eine SSH Verbindung zum Administrieren völlig aus. Eine grafische Oberfläche samt zugehöriger Tools wird also nicht benötigt. Um Ressourcen zu sparen und um mögliche Angriffspunkte zu minimieren, lässt sich solch „unnötiger Ballast“ entfernen. Bevor die Pakete entfernt werden solltet ihr über das Kommandozeilen Tool „raspi-config“ natürlich das Startverhalten unter „boot_behaviour“ von Desktop auf Kommandozeile ändern. Dann können alle X11 relevanten Pakete entfernt werden. Falls Konfigurationsdateien vorhanden bleiben sollen, kann der Parameter “purge” durch “remove” ersetzt werden.
1 2 3 4 5 6 7 8 |
sudo aptitude purge gpicview xarchiver xpdf galculator scratch dillo midori netsurf-gtk sudo aptitude purge omxplayer alsa-base alsa-utils penguinspuzzle python-pygame sudo aptitude purge lxde-core lxde-common lxde-icon-theme lxinput lxmenu-data lxpolkit sudo aptitude purge lxrandr lxsession lxsession-edit lxshortcut lxtask lxterminal sudo aptitude purge lxappearance lightdm lightdm-gtk-greeter openbox ttf-dejavu-core fontconfig fontconfig-config sudo aptitude purge fonts-freefont-ttf wpagui x11-common dbus-x11 desktop-base sudo aptitude purge desktop-file-utils hicolor-icon-theme leafpad xdg-utils xauth sudo aptitude purge gnome-themes-standard gtk2-engines raspberrypi-artwork wolfram-engine |
Nach der Aufräumaktion wird noch der Paketmanager “dpkg” bereinigt.
1 |
sudo dpkg --configure -a |
Somit ist der Raspberry Pi von allen Desktop Tools befreit und kann sich auf seine wesentlichen Aufgaben konzentrieren.
Deaktivieren von IPv6
Die meisten Geräte im Netzwerk kommunizieren noch immer über IPv4 bzw. sind keine reinen IPv6 Sprecher und noch immer IPv4 kompatibel. Da in unserem Heimnetzwerk eine IP-Adressierung über IPv6 keinen wirklichen vorteil bringt können wir die IPv6 Unterstützung am RasPi meist problemlos deaktivieren.
1 2 3 |
sudo echo "net.ipv6.conf.all.disable_ipv6=1" > /etc/sysctl.d/disableipv6.conf sudo echo 'blacklist ipv6' >> /etc/modprobe.d/blacklist sudo sed -i '/::/s%^%#%g' /etc/hosts |
Anwendungstweaks
Das Tuning des Raspberry Pi und des Raspbian Betriebssystems bringt natürlich schon einen gewaltigen Performanceschub auf dem Mini-Rechner, am wirkungsvollsten kann es allerdings sein die auf dem RasPi laufende Anwendung zu optimieren. Hierbei solltet ihr immer auf den Projektseiten und in der Community Community der einzelnen Projekte nach Tweaks Ausschau halten oder Google befragen.
- Für XBMC habe ich schon einige Tweaks zusammengestellt
- Raspberry Pi Webserver Tweaks (Englisch)