Nowoczesna przeglądarka internetowa (część 1)

Mariko Kosaka

Procesor, GPU, pamięć i architektura wieloprocesowa

W tej 4-częściowej serii na blogu przyjrzymy się wnętrzu przeglądarki Chrome – od ogólnej architektury po specyfikę potoku renderowania. Jeśli zastanawiasz się, jak przeglądarka przekształca Twój kod w funkcjonalną witrynę lub nie wiesz, dlaczego konkretna technika jest zalecana w celu poprawy wydajności, ta seria jest dla Ciebie.

W pierwszej części tej serii przyjrzymy się podstawowej terminologii obliczeniowej oraz architekturze wieloprocesowej Chrome.

Sercem komputera jest procesor i procesor graficzny

Aby poznać środowisko, w którym działa przeglądarka, musimy poznać kilka części komputera i ich rolę.

CPU

CPU
Rysunek 1. 4 rdzenie procesora – pracownicy biurowi siedzą przy każdym biurku, wykonując zadania.

Pierwszy z nich to Czrzędny CprocesorC. Procesor to mózg komputera. Rdzeń procesor, na wyobraźni jako pracownik biurowy, może po kolei wykonywać wiele różnych zadań. Potrafi zrobić wszystko – od matematyki po sztukę – i wie, jak odpowiedzieć na połączenie z klientem. W przeszłości większość procesorów była jednym układem scalonym. Rdzeń jest jak kolejny procesor w tym samym układzie scalonym. Nowoczesny sprzęt często ma więcej niż jeden rdzeń, dzięki czemu telefony i laptopy korzystają z większej mocy obliczeniowej.

GPU

GPU
Rysunek 2. Wiele rdzeni GPU z kluczem sugerującym, że można wykonać ograniczone zadanie

Ryfizyka zużyta, czyli GPU, to kolejna część komputera. W przeciwieństwie do procesorów GPU, GPU obsługuje proste zadania, ale obsługuje wiele rdzeni jednocześnie. Jak sama nazwa wskazuje, po raz pierwszy miała ona służyć do obsługi grafiki. Dlatego w kontekście grafiki „korzystanie z GPU” lub „GPU” kojarzy się z szybkim renderowaniem i płynną interakcją. W ostatnich latach przetwarzanie przyspieszone przez GPU sprawia, że coraz więcej obliczeń można przeprowadzić tylko na procesorze GPU.

Kiedy uruchamiasz aplikację na komputerze lub telefonie, za jej działanie odpowiada procesor i procesor graficzny. Zwykle aplikacje działają na procesorze lub GPU za pomocą mechanizmów dostarczanych przez system operacyjny.

Sprzęt, system operacyjny, aplikacja
Rysunek 3. 3 warstwy architektury komputerowej Pozycja „Sprzęt” na dole, system operacyjny na środku, aplikacja na górze.

Wykonaj program w Process i Thread

procesy i wątki
Rysunek 4. Przetwórz jako ramkę ograniczającą – wątki jako abstrakcyjne ryby pływające w procesie

Kolejną koncepcją, którą warto poznać przed zagłębieniem się w architekturze architektury przeglądarki, są Procesy i Thread. Proces może być opisany jako program wykonawczy aplikacji. Wątek to taki, który funkcjonuje w procesie i realizuje dowolną część jego programu.

Gdy uruchamiasz aplikację, tworzony jest proces. Program może tworzyć wątki, ale jest to opcjonalne. System operacyjny zapewnia procesowi „płytę” pamięci do pracy, a wszystkie stany aplikacji są przechowywane w tym prywatnym obszarze pamięci. Gdy zamkniesz aplikację, ten proces również zostanie zakończony, a system operacyjny zwolni pamięć.

procesy i pamięć
Rysunek 5. Schemat procesu wykorzystujący przestrzeń pamięci i przechowując dane aplikacji

Proces może poprosić system operacyjny o uruchomienie innego procesu w celu uruchomienia innych zadań. W takim przypadku do nowego procesu przydzielane są różne części pamięci. Jeśli 2 procesy muszą ze sobą rozmawiać, mogą to zrobić, korzystając z komunikacji ożytkowej komunikacji (IPC). Wiele aplikacji działa w ten sposób, więc jeśli proces roboczy nie odpowiada, można go uruchomić ponownie bez zatrzymywania innych procesów, w których różne części aplikacji są uruchomione.

proces instancji roboczej i IPC
Rysunek 6. Schemat różnych procesów komunikacyjnych za pośrednictwem IPC

Architektura przeglądarki

Jak wygląda przeglądarka, wykorzystując procesy i wątki? Może to być jeden proces z wieloma różnymi wątkami lub wiele różnych procesów z kilkoma wątkami komunikującymi się przez IPC.

architektura przeglądarki
Rysunek 7. Schemat procesu / wątku w różnych architekturze przeglądarki

Warto pamiętać, że te różne architektury to szczegóły implementacji. Nie ma standardowej specyfikacji tworzenia przeglądarki internetowej. Tacy użytkownicy mogą całkowicie różnić się od innych.

W tej serii na blogu używamy najnowszej architektury Chrome, która została opisana na Rysunku 8.

U góry znajduje się proces przeglądarki koordynowany z innymi procesami obsługującymi różne części aplikacji. W przypadku mechanizmu renderowania do każdej karty jest tworzonych i przypisywanych wiele procesów. Do niedawna Chrome umożliwiał proces obsługi każdej karty, gdy tylko był to możliwe. Teraz próbuje nadawać każdej witrynie własny proces, w tym elementy iframe (patrz Izolacja witryn).

architektura przeglądarki
Rysunek 8. Schemat architektury wieloprocesowej w Chrome. W obszarze Proces renderowania widocznych jest wiele warstw, które reprezentują różne procesy mechanizmu renderowania w Chrome na każdej karcie.

Który proces kontroluje co?

W tej tabeli opisujemy poszczególne procesy Chrome i ich kontrolę:

Proces i jego kontrola
Przeglądarka Kontroluje część aplikacji „chrome”, w tym pasek adresu, zakładki oraz przyciski Wstecz i Dalej.
Obsługuje też niewidoczne, uprzywilejowane części przeglądarki, takie jak żądania sieciowe i dostęp do plików.
Mechanizm renderowania Kontroluje całą zawartość karty, na której wyświetla się witryna.
Wtyczka Kontroluje wszystkie wtyczki używane przez witrynę (np. Flash).
GPU Obsługuje zadania GPU w izolacji od innych procesów. Proces ten jest dzielony na różne procesy, ponieważ GPU obsługuje żądania z wielu aplikacji i rysuje je na tej samej powierzchni.
Procesy Chrome
Rysunek 9. Różne procesy wskazujące różne części interfejsu przeglądarki

Istnieje jeszcze więcej procesów, takich jak proces rozszerzenia czy procesy narzędziowe. Jeśli chcesz sprawdzić, ile procesów działa w Chrome, kliknij ikonę menu opcji w prawym górnym rogu, wybierz Więcej narzędzi, a następnie wybierz Menedżer zadań. Otworzy się okno z listą uruchomionych obecnie procesów i informacji o wykorzystaniu procesora/pamięci.

Zalety architektury wieloprocesowej w Chrome

Wcześniej wspomnieliśmy, że Chrome korzysta z wielu mechanizmów renderowania. Najprostszy sposób to wyobrażenie sobie, że każda karta ma własny proces renderowania. Załóżmy, że masz otwarte 3 karty, a każda z nich jest uruchamiana przez niezależny proces renderowania.

Jeśli któraś karta przestanie odpowiadać, możesz zamknąć tę, która nie odpowiada, i kontynuować pracę, pozostawiając inne karty aktywne. Jeśli wszystkie karty działają w jednym procesie, to gdy któraś z nich nie odpowiada, żadna z nich nie odpowiada. To smutne.

wiele mechanizmu renderowania kart
Rysunek 10. Diagram przedstawiający kilka procesów uruchomionych na każdej karcie

Kolejną korzyścią związaną z podziałem pracy przeglądarki na kilka procesów jest bezpieczeństwo i piaskownica. Ponieważ systemy operacyjne umożliwiają ograniczenie uprawnień procesów, przeglądarka może stosować piaskownicę do niektórych procesów z określonych funkcji. Na przykład przeglądarka Chrome ogranicza dowolny dostęp do plików w przypadku procesów, które obsługują dowolne dane wejściowe użytkownika, takie jak mechanizm renderowania.

Procesy mają własne miejsce w pamięci, dlatego często zawierają kopie wspólnej infrastruktury (np. V8, czyli mechanizm JavaScript przeglądarki Chrome). Oznacza to większe wykorzystanie pamięci, ponieważ nie można udostępniać ich w taki sposób, jak byłoby to możliwe, gdyby były wątkiem w tym samym procesie. Aby oszczędzać pamięć, Chrome ogranicza liczbę uruchamianych procesów. Limit zależy od ilości pamięci i mocy procesora urządzenia, ale po osiągnięciu limitu Chrome zaczyna uruchamiać wiele kart z tej samej witryny w ramach jednego procesu.

Oszczędzanie pamięci – obsługa usług w Chrome

To samo podejście jest stosowane do procesu przeglądania. Zmieniamy architekturę Chrome w celu uruchamiania każdej części programu przeglądarki jako usługi, co pozwala na połączenie różnych procesów lub łączenie ich w jeden.

Ogólnie rzecz biorąc, gdy Chrome działa na zaawansowanym sprzęcie, może podzielić każdą usługę na różne procesy, co zapewnia większą stabilność. Jeśli jednak działa na urządzeniu z ograniczeniami zasobów, Chrome scala usługi w jeden proces, który oszczędza pamięć. Podobne podejście do konsolidacji procesów w celu zmniejszenia zużycia pamięci stosowane było przed tą zmianą na platformach takich jak Android.

Usługa Chrome
Rysunek 11. Schemat procesu obsługi Chrome, w którym różne usługi są przenoszone do wielu procesów i do jednego procesu przeglądarki

Procesy renderowania poszczególnych ramek – izolacja witryn

Izolacja witryn to niedawno wprowadzona funkcja w Chrome, która uruchamia oddzielny proces renderowania w przypadku każdego elementu iframe z innych witryn. Rozmawialiśmy o 1 procesie renderowania na model karty, dzięki któremu elementy iframe z innych witryn mogły działać w ramach jednego procesu renderowania z udostępnianiem miejsca w pamięci między różnymi witrynami. Uruchamianie witryn a.com i b.com w ramach tego samego mechanizmu renderowania może się wydawać dopuszczalne. Zasady dotyczące tego samego pochodzenia to podstawowy model zabezpieczeń internetu i upewnia się, że żadna witryna nie może uzyskać dostępu do danych z innych witryn bez zgody użytkownika. Pominięcie tej zasady to główny cel ataków. Izolacja procesów to najskuteczniejszy sposób rozdzielania witryn. W przypadku Meltdown i Spectre stało się jeszcze bardziej oczywiste, że musimy oddzielać witryny za pomocą procesów. Od wersji Chrome 67 izolacja witryn jest domyślnie włączona na komputerach, dlatego każdy element iframe z innej witryny na karcie otrzymuje oddzielny proces renderowania.

izolacja witryn
Rysunek 12. Schemat izolacji witryn – wiele procesów renderowania wskazujących elementy iframe w witrynie

Włączenie izolacji witryn to wieloletnie przedsięwzięcie inżynierskie. Izolacja witryn nie jest tak prosta jak przypisanie różnych procesów renderowania – zasadniczo zmienia sposób komunikacji między elementami iframe. Otwarcie narzędzi deweloperskich na stronie, w której elementy iframe działają w różnych procesach, oznacza, że narzędzia deweloperskie musiały wdrożyć zakulisowe prace, aby wszystko wyglądało płynnie. Nawet użycie prostego skrótu Ctrl+F w celu znalezienia słowa na stronie wymaga wyszukiwania w różnych procesach renderowania. Widać, dlaczego inżynierowie przeglądarek mówią o wprowadzeniu izolacji witryn jako ważnym kamieniem milowym.

Podsumowanie

W tym poście omówiliśmy ogólny widok architektury przeglądarki i omówiliśmy zalety architektury wieloprocesowej. Omówiliśmy także Serwisację oraz izolację witryn w Chrome, co jest ściśle związane z architekturą wieloprocesową. W następnym poście dowiemy się, co dzieje się między tymi procesami i wątkami, aby wyświetlić witrynę.

Podobał Ci się post? Jeśli masz pytania lub sugestie dotyczące przyszłego posta, chętnie poznam Twoją wiadomość @kosamari na Twitterze.

Dalej: co dzieje się podczas nawigacji