Gdzie jest wąskie gardło szybkości przeglądania Internetu na Raspberry Pi?

23

Na modelu B 512 MB Pi z Raspbian „wheezy” wypróbowałem Midori, Chromium i Iceweasel. Gdy strona się powiększa, ładowanie jest wolne, nawet po przetaktowaniu jej do 1 GHz. Na telefonie z Androidem z procesorem 1 GHz ładowanie strony wydaje się znacznie szybsze.

Chcę wiedzieć, gdzie jest wąskie gardło w Pi? Czy jest to rozmiar procesora, pamięci RAM, czy nieprzyspieszony serwer X? Czy przeglądarka może bezpośrednio używać procesora graficznego w celu przyspieszenia?

hello.wjx
źródło
A pi kieruje ekranem 3,5 "480 x 800
?;
Do wyświetlania używany jest monitor VGA za pośrednictwem kabla HDMI-VGA, a konfiguracja jest hdmi_mode=35 1280x1024 60Hz... Ale nie widzę żadnej poprawy po zmianie konfiguracji nahdmi_mode=9 800x600 60Hz
hello.wjx
Bez wątpienia. Myślę, że stuknięty ma poprawną odpowiedź na to pytanie, ale dodałem kolejne z pomysłem dla ciebie.
Złotowłosa

Odpowiedzi:

15

Jest to połączenie dość słabego procesora ARM11 Raspberry Pi i nie przyspieszonego serwera X. Ponieważ procesor GPU nie przyspiesza, procesor musi wykonać cały rendering; na czymś takim jak rdzeń ARM11 w Pi, powoduje to dodatkowe obciążenie już i tak słabego procesora.

Anegdotycznie, podczas oglądania, htopgdy Midori na Pi ładuje ciężką stronę internetową, taką jak Facebook, widziałem, jak proces X zajmuje do 25% procesora.

Porównywanie chipa w telefonie z Androidem z chipem (nawet podkręconym) w Pi nie jest uczciwe. Układ 1 GHz w twoim telefonie to prawdopodobnie coś w rodzaju Cortex-A8 lub A9, które wykorzystują architekturę w wersji ARMv7; dlatego mają wyższą wydajność na cykl zegara niż ARM11, który wykorzystuje ARMv6.

nc4pk
źródło
Jaki rodzaj operacji rysowania 2D może przyspieszyć procesor graficzny?
Trismegistos
@Trismegistos Wypełnianie regionów kolorami. Łączenie warstw z przezroczystym tłem. Wygładzanie krawędzi czcionek.
Dmitrij Grigoriew
14

To już poprawna odpowiedź IMO i to, co sugeruję, prawdopodobnie nie zrobi dużej różnicy, ale warto wiedzieć.

Jeśli wszystko, co chcesz zrobić, to uruchomić przeglądarkę, nie musisz też uruchamiać środowiska graficznego. Utwórz plik, który wygląda następująco $HOME/.xinitrc:

#!/bin/sh

midori

Jeśli .xinitrc już istnieje, przenieś go tymczasowo lub skomentuj cokolwiek innego. Teraz startx(oczywiście nie powinieneś już w nim być - zrób to z konsoli bez uruchomionego GUI). Voila, masz tylko przeglądarkę, nie ma komputera.

To oszczędza trochę pamięci, chociaż przeglądarka jest zdecydowanie słoniem w pokoju, a sam serwer Xorg (który działa) jest większy niż podstawowy LXDE (który teraz nie działa). Jeśli masz tak dużo załadowanych do pamięci RAM, że używasz swap, wpłynie to na wydajność. Powyższy midori + goły X używa rezydenta <100 MB zgodnie z 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

To przy otwartych 4 kartach. Ponownie, jeśli spojrzysz na nie i zobaczysz, że pamięć RAM jest prawie pełna, jest to problem z wydajnością. Zauważ, że normalne jest używanie odrobiny zamiany, nawet jeśli RAM nie jest pełny, więc nie przejmuj się tym - te zamiany mają niski priorytet.

Kolejną kwestią do przemyślenia pod względem wydajności jest znaczenie buforów i pamięci podręcznej . Nie uwzględniłem ich w całości i zauważam, że jest to więcej niż pamięć zaangażowana (około dwa razy więcej). To normalne. Jeśli zapełnisz pamięć zatwierdzonymi rzeczami, system po prostu zużyje mniej pamięci podręcznej i / lub prześle ją do wymiany. Tak czy inaczej, będzie to obniżenie wydajności, ponieważ pamięć podręczna jest ważna (po prostu nie jest niezbędna lub niezmienna, więc nie jest częścią zatwierdzonej pamięci).

Innymi słowy, optymalnie chcesz, aby twój zaangażowany ram był nie więcej niż 75% tego, co jest dostępne na pi, a być może mniej. Jeśli używasz LXDE i zaczynasz otwierać inne rzeczy, możesz szybko zacząć do tego podejść.

Złotowłosa
źródło
5

Oświadczenie : Poniżej opisano korzystanie z funkcji eksperymentalnych z wątpliwymi efektami. Należy sprawdzić, czy wprowadzono regresje i rzeczywisty wzrost wydajności.

Możesz wypróbować niektóre z flag Google Chrome / Chromium poniżej, chrome://flagsaby poprawić (pozorną) wydajność przeglądania. Jest artykuł wyjaśniający niektóre flagi związane z wydajnością . Spróbuję zebrać trochę tutaj:

Wymuszenie przyspieszenia GPU poprzez włączenie opcji „Zastąp listę renderowania oprogramowania” spowoduje użycie GPU do renderowania kosztem możliwych artefaktów, nawet jeśli sterownik nie jest na białej liście. Nie wiem jednak, jak dobrze to działa z GPU Pi.

Komponowanie GPU na wszystkich stronach będzie używać GPU do przewijania wszystkich warstw. Dlatego wydajność przewijania powinna się poprawić na stronach bez warstw przyspieszanych przez GPU.

Kolejna wskazówka to odświeżenie okna w innym kierunku. Będzie renderować kafelki i wyświetlać je, gdy tylko będzie gotowy, zamiast czekać na zakończenie ostatniego. W efekcie renderowanie potrwa dłużej z powodu wprowadzonego obciążenia, ale zawartość pojawi się szybciej.

Renderowanie w oddzielnym wątku spowoduje renderowanie asynchroniczne i utrzyma interfejs w gotowości. Możesz przewijać, gdy strona jest nadal renderowana.

Wyłącz GPU VSync zaktualizuje renderowaną zawartość bez względu na to, czy monitor ją załadował. Poprawia to liczbę klatek kosztem niespójnej prezentacji.

Po włączeniu / wyłączeniu jakichkolwiek przełączników musisz ponownie uruchomić Chrome / Chromium, aby zastosować to ustawienie. Możesz to zrobić za pomocą przycisku na dole strony z flagami.

Idąc dalej, przełączniki wiersza poleceń można wykorzystać do optymalizacji Chrome / Chromium. Zobacz listę przełączników Chrom linii poleceń pełną listę.

--default-tile-widthi --default-tile-heightmożna go ustawić tak, aby odpowiadał ułamkowi wielkości ekranu, aby przyspieszyć wstępne renderowanie każdej strony.

Bengt
źródło
Próbowałem flagi Override software rendering list, GPU compositing on all pagesa Threaded compositingna Pi, ale nie wydaje żadnych widocznych usprawnień. Próbowałem też tych flag na PC, nie wydaje się też żadnych ulepszeń.
hello.wjx
Po edycji flag ponownie uruchom Chrome. Aby przetestować, Override software rendering listotwórz demo WebGL. Aby przetestować, Threaded compositingspróbuj przewinąć, gdy trwa ładowanie dużej strony.
Bengt
Z tego, co czytam tutaj: chromium.org/developers/design-documents/... użycie „Threaded compositing” nie pomoże na pi - ma tylko jeden rdzeń - i może pogorszyć , w zależności od tego, jak znaczące „operowanie na kopii bieżącego stanu renderowania” to.
złotowłosa
Wydajność ładowania strony spadnie, tak. Ale JavaScript nie będzie blokować i czekać na renderowanie, a strona pozostanie responsywna. Wymieniasz jakieś obiektywne wyniki za niektóre postrzegane wyniki.
Bengt,