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
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
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.
Wykonaj program w Process i Thread
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ęć.
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.
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.
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).
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. |
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.
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.
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.
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.