Benutzer-Werkzeuge

Webseiten-Werkzeuge


howto:performance-optimierung_des_raspberry_pi

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

howto:performance-optimierung_des_raspberry_pi [2013/10/06 18:28] (aktuell)
chrisma angelegt
Zeile 1: Zeile 1:
 +==== Performance-Optimierung des Raspberry Pi ====
 +
 +Der Start eines unkonfigurierten Raspberry Pi VZ-Images ist in der Regel noch problemlos, weil nur wenig IO-Last auf dem System liegt.
 +Das ändert sich aber wenn der vzlogger konfiguriert wird, und dieser dann die Daten an "​localhost"​ sendet, so dass die PHP Middleware und MySQL zusätzliche IO-Last generieren.
 +
 +
 +=== Messung ===
 +
 +Mit dem Kommando ​
 +
 +<​code>​vmstat 5</​code>​
 +
 +kann man einige wichtige Parameter abfragen und erste Erkenntnisse zur aktuellen Systemauslastung zu erhalten. Zusätzliche Pakete müssen dazu
 +nicht installiert werden, erst für weitergehende Analysen muss man dann das "​sysstat"​ Paket installieren. Wenn Sie das Kommando starten ignorieren Sie bitte (immer) die erste Zeile der ausgegebenen Messwerte, achten Sie
 +aber auf alle folgenden. Wenn "​vzlogger"​ konfiguriert und gestartet ist und fortan Messwerte sendet -- und die Ausgabe dann so aussieht:
 +
 +<​code>​
 +procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
 + ​r ​ b   ​swpd ​  ​free ​  ​buff ​ cache   ​si ​  ​so ​   bi    bo   ​in ​  cs us sy id wa
 + ​0 ​ 1      0 276644 ​ 15200 101032 ​   0    0    95    11  369  130  2  2 87  9
 + ​0 ​ 1      0 276264 ​ 15204 101036 ​   0    0     ​1 ​  ​158 ​ 414  267 22  4  0 74
 + ​0 ​ 2      0 276232 ​ 15208 101036 ​   0    0     ​0 ​   10  367  142  0  1  0 99
 + ​0 ​ 1      0 276108 ​ 15236 101036 ​   0    0     ​0 ​   18  400  181  9  4  0 87
 + ​2 ​ 1      0 276108 ​ 15244 101036 ​   0    0     ​0 ​  ​134 ​ 397  248 19  5  0 76
 + ​0 ​ 2      0 276140 ​ 15248 101036 ​   0    0     ​0 ​   18  400  184  9  1  0 90
 + ​0 ​ 1      0 276108 ​ 15256 101040 ​   0    0     ​1 ​    ​8 ​ 381  186 13  4  0 83
 +</​code>​
 +
 +Die Spalten ganz rechts beachten:
 +
 +* "​wa"​ = "​IOwait"​ - ist die Zeit, die die CPU auf Ein-/​Ausgabegeräte wie z.B. die SD-Karte warten muss
 +* "​id"​ = "​Idle"​ ist der Prozentsatz,​ den das System noch zur (weiteren) Erledigung von Aufgaben übrig hat
 +* "​us"​ und "​sy"​ sind die Prozent, die das System Rechenzeit im "​User"​ und "​System"​ Mode aufbringt
 +
 +Die Messung oben stammt vom meinem Raspberry Pi mit der SD-Karte als root-Filesystem - das ist der Standardfall
 +wenn man den Installations-Anweisungen [[raspberry_pi_image]] folgt.
 +
 +Die Messwerte zeigen eindeutig, dass das System den Großteil seiner Gesamtkapazität mit der IO-Ansteuerung (der SD-Karte) verbringt.
 +Freie Kapazität ist gar nicht mehr vorhanden (Idle = 0). Nun gibt es ja diverse SD-Karten in verschiedenen Klassen und Geschwindigkeiten,​
 +ich habe mir im Computerladen eine Auswahl zusammengestellt - allerdings ohne Erfolg, dieser IO-Bottleneck war immer vorhanden.
 +Erschwerend kommt noch dazu, dass nicht alle Karten / Typen zuverlässig im Raspberry Pi funktionieren - und einige Karten schon nach wenigen
 +Stunden Betrieb dauerhaft zerstört waren.
 + 
 +== weiterführende Info ==
 +
 +* http://​bencane.com/​2012/​08/​06/​troubleshooting-high-io-wait-in-linux/​
 +
 +=== Boot via SD-Karte, root auf USB-Stick ===
 +
 +Leider kann der Raspberry Pi nicht direkt vom USB Stick booten - das Boot-Device ist immer die SD-Karte. Allerdings kann man den Bootstring leicht abändern,
 +so dass man schnell auf den USB Stick schalten und von dort den restlichen Boot-Vorgang fortsetzen kann.
 +
 +Gehen Sie so vor:
 +
 +* Erzeugen Sie sich eine SD-Karte mit einem kompletten Image - wie in [[raspberry_pi_image]] beschrieben
 +* Machen Sie genau dasselbe mit einem USB-Stick >= 4GB 
 +* Stecken Sie nun SD-Karte und USB-Stick und Starten Sie die Stromversorgung des Rapberry Pi
 +* Nun startet der Raspberry Pi komplett von SD-Karte
 +* Sie können einloggen und mit
 +
 +<​code>​dmesg | more</​code>​
 +
 +alle Startmeldungen ansehen und prüfen, ob der USB-Stick erkannt wurde (als Gerät /dev/sda ). Probeweise können Sie /dev/sda2 mounten - und unmounten.
 +
 +Mit
 +<​code>​sudo nano /​boot/​cmdline.txt</​code>​
 +ändern Sie nun
 +<​code>​root=/​dev/​mmcblk0p2</​code>​
 +in
 +<​code>​root=/​dev/​sda2</​code>​
 +
 +und dann einfach mit 
 +
 +<​code>​init 6</​code>​
 +
 +das System neu starten - falls der USB-Stick eine LED hat können Sie schon am "​flackern"​ sehen dass der boot-Vorgang nun über den USB Stick läuft.
 +
 +Die Boot-Partition der SD-Karte bleibt auf /boot gemountet.
 +
 +== weiterführende Info ==
 +
 +* http://​www.dingleberrypi.com/​2013/​05/​install-and-run-raspbian-from-a-usb-flash-drive/​
 +
 +=== root-Partition auf USB-Stick erweitern ===
 +
 +Leider läßt sich mit einem root-Filesystem auf dem USB Stick der ungenutzte Platz nicht einfach wie bisher mit "​raspi-config"​ nutzbar machen.
 +raspi-config merkt leider, dass das root-FS nun keine SD Karte ist und verweigert die Arbeit (don't know what to do). Ist aber kein großes Problem:
 +
 +Hier die Ersatzprozedur (Unglaublich,​ geht wirklich am laufenden System): ​
 +
 +<​code>​
 +sudo fdisk /​dev/​sda ​
 +
 +p ## (print) ​
 +
 +## Startsektor von P#2 merken (sollte 122880 sein) 
 +
 +d ## (delete) ​
 +
 +2 ## Partition Nummer 2
 +
 +n ## (new) 
 +
 +p ## primary ​
 +
 +2 ## Partition Nummer 2
 +
 +Start: <gemerkt von vorhin, hier: 122880) ## hier den vorher gemerkten Wert eingeben, NICHT den Vorschlag übernehmen
 +
 +End: ## Vorschlag übernehmen ​
 +
 +p ## (print) ​
 +
 +## nun nochmal alles konkrollieren ​
 +
 +w  ## (write) ​
 +
 +reboot ​
 +
 +</​code> ​
 +
 +Nach (hoffentlich) erfolgreichem reboot ​
 +
 + 
 +
 +<​code>​sudo resize2fs /​dev/​sda2</​code> ​
 +
 + 
 +
 +Dateisystem-Strukturen werden nun auf die neue Partitionsgröße angepasst - geht online auf der lebenden root Partition - kein reboot nötig ​
 +
 + 
 +
 +Schließlich mit 
 +
 +<​code>​df -k</​code> ​
 +
 +überprüfen. ​
 +
 +=== VZ Konfigurieren ===
 +
 +Nun wie gehabt vzlogger entsprechend einrichten (ist natürlich abhängig vom Zählertyp und den Kanälen die man auswerten möchte). Dann starten
 +
 +=== IO Last überprüfen ===
 +
 +Mit dem Kommando ​
 +
 +<​code>​vmstat 5</​code>​
 +
 +wie oben die Gesamtlast des Systems betrachten.
 +
 +<​code>​
 +procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
 + ​r ​ b   ​swpd ​  ​free ​  ​buff ​ cache   ​si ​  ​so ​   bi    bo   ​in ​  cs us sy id wa
 + ​0 ​ 0      0 290516 ​ 18260  88032    0    0    81     ​9 ​ 362  157  2  2 93  2
 + ​2 ​ 0      0 290144 ​ 18284  88036    0    0     ​0 ​   15  376  239 20  3 63 15
 + ​0 ​ 0      0 290208 ​ 18340  88036    0    0     ​0 ​  ​323 ​ 449  319 16  3 32 49
 + ​0 ​ 0      0 290176 ​ 18364  88036    0    0     ​0 ​   21  368  207 13  3 68 16
 + ​2 ​ 1      0 290176 ​ 18380  88036    0    0     ​0 ​  ​128 ​ 392  256 17  5 50 28
 + ​0 ​ 0      0 290060 ​ 18444  88040    0    0     ​0 ​  ​208 ​ 452  331 18  4 34 45
 + ​0 ​ 0      0 290092 ​ 18460  88040    0    0     ​0 ​   12  360  199 15  2 74  9
 + ​7 ​ 0      0 290052 ​ 18516  88040    0    0     ​0 ​  ​325 ​ 455  341 16  4 34 46
 + ​0 ​ 0      0 289928 ​ 18540  88044    0    0     ​0 ​   14  369  227 19  3 57 21
 + ​0 ​ 1      0 289928 ​ 18564  88048    0    0     ​0 ​  ​135 ​ 368  207 15  2 59 24
 + ​2 ​ 0      0 289960 ​ 18620  88048    0    0     ​0 ​  ​207 ​ 453  332 17  4 38 41
 + ​0 ​ 1      0 289804 ​ 18636  88048    0    0     ​0 ​   25  381  231 18  4 67 12
 + ​0 ​ 0      0 289804 ​ 18700  88052    0    0     ​0 ​  ​312 ​ 432  299 13  3 41 42
 + ​2 ​ 0      0 289804 ​ 18716  88052    0    0     ​0 ​   12  374  235 16  4 58 22
 + ​0 ​ 1      0 284332 ​ 18744  93204    0    0  1032    21  550  380 21  7 43 29
 + ​1 ​ 1      0 284224 ​ 18804  93208    0    0     ​0 ​  ​314 ​ 451  296 14  4 36 45
 + ​0 ​ 0      0 284256 ​ 18824  93208    0    0     ​0 ​   13  367  220 14  2 62 22
 +</​code>​
 +
 +In meinem Fall haben die Werte jetzt so ausgesehen - wie man sieht (Spalte "​id"​ ) hat das System jetzt ausreichend Kapazität frei
 +und reagiert auch schnell und störungsfrei auf Anfragen des "​frontends"​.
 +
 +
 +=== Empfehlungen ===
 +
 +Idealerweise legt man sich _zwei_ SD-Karten a 4GB und einen USB-Stick zurecht. Alle drei werden erst einmal mit dem Standard VZ-Raspberry Image beschrieben (und getestet).
 +
 +* Auf der ersten SD-Karte modifiziert man den Boot-String wie oben beschrieben
 +* die zweite SD-Karte hinterlegt man an einem sicheren Ort - sie kommt dann zum Einsatz, wenn das System nicht mehr startet. Dann zieht man die SD-Karte (die mit dem
 +modifizierten boot-String) ​ heraus und steckt diese zweite - nicht modifizierte - ein, bootet und versucht den USB-Stick mit "​fsck"​ zu reparieren bzw Daten zu retten.
 +So hat man für diesen Fall gleich ein recovery System zur Hand.
 +
 +Als USB-Stick habe ich einen 32GB USB3.0 für wenig Geld eingesetzt. Natürlich hat der Raspberry Pi keinen USB3.0 Port, aber ich wollte sichergehen dass die im Stick
 +verbauten Flash-Chips keine allzugroße Geschwindigkeitsbremse darstellen.
 +
 +Aktuell liegen noch keine Erfahrungswerte über die Lebensdauer des USB Sticks vor, sicher ist nur, dass früher oder später die max Anzahl Schreibzyklen erreicht sein
 +wird und dann Probleme auftreten - und der Stick getauscht werden muss. Das sollte man von vornherein einplanen, alle Daten regelmäßig sichern, ebenso alle 
 +config files und andere nachträglich vorgenommene Anpassungen.
 +
 +Denkbar wäre auch der Einsatz einer kleinen USB Festplatte (was aber wohl den Stromverbrauch erhöht) oder eine USB Sticks mit "​sandforce"​ Chipsatz - z.B. "​USB-Stick Super Talent Express RC8 50 GB USB 3.0 silber"​
 +darin sind die in SSD Festplatten verwendeten Chipsätze verbaut, was sich deutlich im Preis bemerkbar macht
  
howto/performance-optimierung_des_raspberry_pi.txt · Zuletzt geändert: 2013/10/06 18:28 von chrisma