Wo ist der Engpass der Web-Browsing-Geschwindigkeit auf Himbeer-Pi?

23

Auf einem Model B 512 MB Pi mit Raspbian „Wheezy“ habe ich Midori, Chrom und Iceweasel ausprobiert. Wenn die Webseite größer wird, wird sie langsam geladen, selbst nachdem ich sie auf 1 GHz übertaktet habe. Auf einem Android-Handy mit einer 1-GHz-CPU scheint das Laden der Webseite viel schneller zu sein.

Was ich wissen möchte ist, wo ist der Engpass im Pi? Handelt es sich um die CPU- oder RAM-Größe oder um einen nicht beschleunigten X-Server? Kann der Browser die GPU direkt verwenden, um sie zu beschleunigen?

hallo.wjx
quelle
Und der Pi fährt einen 3.5 "480 x 800 Bildschirm?;) Wenn nicht, ist das vielleicht schon ein
kleiner
Ein VGA-Monitor wird für die Anzeige über ein HDMI-zu-VGA-Kabel verwendet, und die Konfiguration ist hdmi_mode=35 1280x1024 60Hz... Aber ich kann keine Verbesserung feststellen, nachdem die Konfiguration aufhdmi_mode=9 800x600 60Hz
hallo.wjx 25.02.13
Ohne Zweifel. Ich denke, Tapped Out hat die richtige Antwort auf diese Frage, aber ich habe eine weitere mit einer Idee für Sie hinzugefügt.
Goldlöckchen

Antworten:

15

Es ist eine Kombination aus der ziemlich schwachen ARM11-CPU des Raspberry Pi und dem nicht beschleunigten X-Server. Da es von der GPU nicht beschleunigt wird, muss die CPU das gesamte Rendering ausführen. Auf so etwas wie dem ARM11-Kern im Pi bedeutet dies eine zusätzliche Belastung für eine ohnehin schon schwache CPU.

Anekdotisch gesehen, während htopMidori auf dem Pi eine schwere Website wie Facebook lädt, habe ich gesehen, dass der X-Prozess bis zu 25% der CPU einnimmt.

Es ist nicht wirklich fair, den Chip in Ihrem Android-Handy mit dem (sogar übertakteten) Chip im Pi zu vergleichen. Der 1-GHz-Chip in Ihrem Telefon ist wahrscheinlich so etwas wie ein Cortex-A8 oder A9, der die ARMv7-Version der Architektur verwendet. Daher sind sie pro Taktzyklus leistungsstärker als der ARM11, der ARMv6 verwendet.

nc4pk
quelle
Welche Art von 2D-Zeichenvorgang kann die GPU beschleunigen?
Trismegistos
@Trismegistos Regionen mit Farben füllen. Ebenen mit transparentem Hintergrund kombinieren. Glätten von Schriftkanten.
Dmitry Grigoryev
14

Dies ist bereits die richtige Antwort IMO, und was ich vorschlage, wird wahrscheinlich keinen großen Unterschied machen, aber es könnte nützlich sein zu wissen.

Wenn Sie nur den Browser ausführen möchten, müssen Sie auch keine Desktop-Umgebung ausführen. Erstellen Sie eine Datei, die so aussieht $HOME/.xinitrc:

#!/bin/sh

midori

Wenn .xinitrc bereits vorhanden ist, verschieben Sie es vorübergehend oder kommentieren Sie etwas anderes aus. Jetzt startx(offensichtlich sollten Sie noch nicht dabei sein - tun Sie dies von der Konsole aus, ohne dass die GUI ausgeführt wird). Voila, du hast nur den Browser, keinen Desktop.

Das spart ein bisschen Speicher, obwohl der Browser bei weitem der Elefant im Raum ist und der Xorg-Server selbst (der läuft) größer ist als eine einfache LXDE (die jetzt nicht läuft). Wenn Sie so viel RAM geladen haben, dass Sie Swap verwenden, wirkt sich dies auf die Leistung aus. Das obige midori + bare X verwendet <100 MB resident gemäß free:

             total       used       free     shared    buffers     cached
Mem:        448708     242604     206104          0      82660     105156
-/+ buffers/cache:      54788     393920
Swap:       102396          0     102396

448708 - 393920 = 54788/1024 = 53,5 MB

Das ist mit 4 Registerkarten offen. Wenn Sie sich diese ansehen und feststellen, dass Ihr RAM nahezu voll ist, ist dies wiederum ein Leistungsproblem. Beachten Sie, dass es normal ist, ein wenig zu tauschen, auch wenn der RAM nicht voll ist. Machen Sie sich deshalb keine Sorgen - das getauschte Zeug hat eine niedrige Priorität.

Weitere Überlegungen zur Leistung sind die Bedeutung von Puffern und Cache . Ich habe diese nicht in die Gesamtsumme einbezogen, und es ist tatsächlich mehr als der festgeschriebene Speicher (ungefähr doppelt so viel). Das ist normal. Wenn Sie den Speicher mit zugesicherten Daten füllen, verbraucht das System nur weniger Cache und / oder überträgt sie zum Auslagern. So oder so, dass eine Leistungsverschlechterung sein wird , da der Cache ist wichtig (es ist einfach nicht vital oder unveränderliche Größe weist, also nicht Teil des engagierten mem stat).

Mit anderen Worten, Sie möchten optimalerweise, dass Ihr festgeschriebener RAM nicht mehr als 75% der auf dem Pi verfügbaren Daten und möglicherweise weniger davon enthält. Wenn Sie LXDE verwenden und damit beginnen, andere Dinge zu öffnen, können Sie schnell beginnen, sich dem anzunähern.

Goldlöckchen
quelle
5

Haftungsausschluss : Im Folgenden wird die Verwendung von experimentellen Funktionen mit zweifelhaften Effekten beschrieben. Stellen Sie sicher, dass Sie auf eingeführte Regressionen und tatsächliche Leistungssteigerungen prüfen.

Probieren Sie einige der Google Chrome- / Chromium- Flags unter aus chrome://flags, um die (scheinbare) Browsing-Leistung zu verbessern. In einem Artikel werden einige der für die Leistung relevanten Flags erläutert . Ich werde versuchen, hier einige zu sammeln:

Durch Erzwingen der GPU-Beschleunigung durch Aktivieren von "Software-Rendering-Liste überschreiben" wird die GPU zum Rendern auf Kosten möglicher Artefakte verwendet, auch wenn der Treiber nicht auf der Whitelist steht. Ich weiß allerdings nicht, wie gut das mit der GPU des Pi funktioniert.

Beim Zusammenstellen von GPUs auf allen Seiten wird die GPU zum Scrollen aller Ebenen verwendet. Daher sollte sich die Bildlaufleistung auf Seiten ohne GPU-beschleunigte Ebenen verbessern.

Fenster nebeneinander aktualisieren wäre ein weiterer Hinweis. Sobald es fertig ist, werden Kacheln gerendert und angezeigt, anstatt darauf zu warten, dass die letzte fertig ist. Tatsächlich dauert das Rendern aufgrund des eingeführten Overheads länger, der Inhalt wird jedoch schneller angezeigt.

Beim Rendern in einem separaten Thread wird das Rendern asynchron ausgeführt und die Benutzeroberfläche bleibt ansprechbar. Sie können einen Bildlauf durchführen, während die Seite noch gerendert wird.

GPU deaktivieren VSync aktualisiert die gerenderten Inhalte unabhängig davon, ob der Monitor sie noch geladen hat. Dies verbessert die Bildrate auf Kosten einer inkonsistenten Darstellung.

Nach dem Aktivieren / Deaktivieren von Schaltern müssen Sie Chrome / Chromium neu starten, damit die Einstellung angewendet wird. Die Schaltfläche am unteren Rand der Flags-Seite kann das für Sie tun.

Geht man noch weiter, Befehlszeilenschalter verwendet werden könnte Chrome / Chromium zu optimieren. Eine vollständige Liste finden Sie in der Liste der Chromium-Befehlszeilenoptionen .

--default-tile-widthund --default-tile-heightkönnte so eingestellt werden, dass sie einem Bruchteil der Bildschirmgröße entspricht, um das anfängliche Rendern jeder Seite zu beschleunigen.

Bengt
quelle
Ich habe versucht , Fahnen Override software rendering list, GPU compositing on all pagesund Threaded compositingauf Pi, aber es scheint keine offensichtlichen Verbesserungen. Ich habe diese Flags auch auf dem PC ausprobiert, es scheint auch keine Verbesserung zu geben.
Hallo.wjx
Stellen Sie sicher, dass Sie Chrome nach dem Bearbeiten der Flags neu starten. Zum Testen Override software rendering listöffnen Sie eine WebGL-Demo. Threaded compositingVersuchen Sie zum Testen, einen Bildlauf durchzuführen , während noch eine große Seite geladen wird.
Bengt
Nach dem, was ich hier lese: chromium.org/developers/design-documents/… Die Verwendung von "Threaded Compositing" hilft auf dem Pi nicht weiter - es hat nur einen Kern - und kann es , abhängig von der Bedeutung, noch schlimmer machen " Eine Kopie des aktuellen Rendering - Status bearbeiten " ist.
Goldlöckchen
Die Seitenladeleistung wird sich verringern, ja. Aber Javascript blockiert nicht und wartet auf das Rendern und die Seite bleibt ansprechbar. Sie tauschen eine objektive Leistung gegen eine wahrgenommene Leistung.
Bengt