Google wyłącza SegmentHeap w Chrome z powodu regresji wydajności

Ikona czasu czytania 3 minuta. czytać


Czytelnicy pomagają wspierać MSpoweruser. Możemy otrzymać prowizję, jeśli dokonasz zakupu za pośrednictwem naszych linków. Ikona podpowiedzi

Przeczytaj naszą stronę z informacjami, aby dowiedzieć się, jak możesz pomóc MSPoweruser w utrzymaniu zespołu redakcyjnego Czytaj więcej

Google Chrome

W maju firma Microsoft wydała aktualizację systemu Windows 10 z maja 2020 r. dla użytkowników systemu Windows 10. Nowa aktualizacja zawierała SegmentHeap, która pozwalała aplikacjom Win32 na poprawę wykorzystania pamięci RAM. Wkrótce po wydaniu Microsoft ogłosił, że dzięki nowej funkcji udało mu się zmniejszyć zużycie pamięci RAM w Edge.

W czerwcu Google również wskoczył na modę i ogłosił będzie używać SegmentHeap w manifeście Chrome, co naprawi zachowanie pamięci Chrome. Funkcja była później włączony w Chrome v85, ale po dalszych testach Google poszedł dalej i wyłączył tę funkcję w Chrome. Google zauważyć że funkcja powodowała problemy z wydajnością i dlatego została wyłączona.

Po zatwierdzeniu https://chromium-review.googlesource.com/c/chromium/src/+/2163163 system Windows >= 10.0.19041.0 (Windows 10 w wersji 2004 i nowsze) zdecyduje, że chrome.exe zamiast tego używa sterty segmentu ze sterty dziedzictwa. Ale to doprowadziło do regresji wydajności dla WebXPRT3, Speedometer2 i JetStream2.

Z drugiej strony Microsoft zauważyć że aplikacja często wymienia jeden zasób na inny, więc zmniejszone zużycie pamięci oznaczało wzrost zużycia procesora. Microsoft powiedział dalej, że można wprowadzić pewne ulepszenia, aby zmniejszyć wpływ.

Powszechną praktyką jest wymiana jednego surowca na inny. Częściej jest to zwiększone zużycie pamięci w celu zmniejszenia zużycia procesora. W tym przypadku jest to zwiększone użycie procesora w celu radykalnie zmniejszonego użycia pamięci lub dokładniejszego zatwierdzenia. Gdybyś spojrzał na zatwierdzenie dokonane przez Bruce'a, znalazłbyś błąd, który skłonił go do użycia sterty segmentowej, a to było 100% obciążenie wynikające z użycia sterty o niskiej fragmentacji w procesach przeglądarki.

https://bugs.chromium.org/p/chromium/issues/detail?id=1014701#c9

To powiedziawszy, można dokonać pewnej poprawy, aby zmniejszyć wpływ. Dzielą się na dwa obszary, ale żaden z nich nie jest łatwy.

1) Zmniejsz ilość przejściowych alokacji sterty dokonywanych przez przeglądarkę. Będzie to wymagało znaczących zmian w całym kodzie przeglądarki.
2) Popraw wydajność samej sterty Segmentu. Może to rozwiązać tylko zespół Windows, a my badamy nasze opcje.

W krótkiej perspektywie jest to dobry kompromis między jednym zasobem a drugim, ponieważ użycie pamięci/zatwierdzenia jest poważnym problemem dla użytkowników przeglądarek.

Niestety ostatniej nocy Google postanowiła aby przejść dalej i wyłączyć SegmentHeap. Został przesunięty za flagę GN, aby zespół mógł dalej eksperymentować z tą funkcją, aby to nie koniec drogi.

Domyślnie wyłącz stertę segmentu i dodaj flagę GN, aby ją kontrolować.

Istnieją pewne obawy, że koszt sterty segmentu nie uzasadnia jego kosztu (patrz crbug.com/1102281). Ten CL wyłącza go domyślnie i umieszcza tę funkcję za flagą GN, abyśmy mogli dalej z nią eksperymentować.

Via: Techdows

Więcej na tematy: google, Google Chrome, Google Chrome Canary, sterta segmentowa

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *