CCoW: Optymalizacja kopiowania przy zapisie z uwzględnieniem lokalizacji przestrzennej w obciążeniach Część 3
Apr 02, 2024
3. Projekt CCoW
W tej sekcji najpierw przedstawiamy naszą motywację do ulepszenia kopiowania przy zapisie i wyjaśniamy podstawową koncepcję kopiowania przy zapisie w oparciu o pokrycie (CCoW). Następnie wyjaśniamy, w jaki sposób CCoW rejestruje lokalizację w różnych scenariuszach oraz optymalizację w celu przechwytywania lokalizacji przy niskim nakładzie pracy.
Pamięć to zdolność człowieka do zdobywania, przechowywania i odtwarzania informacji. Wspomnienia ludzi również będą się różnić w zależności od scenariusza. W tym artykule zbadamy związek między pamięcią w różnych scenariuszach.
Pierwszy to scenariusz uczenia się. Uczenie się jest dla człowieka ważnym środkiem zdobywania wiedzy i umiejętności. W procesie uczenia się pamięć odgrywa kluczową rolę. Jeśli masz dobrą pamięć, możesz szybciej przyswajać nową wiedzę i łatwiej ją utrwalać. Dlatego w scenariuszach uczenia się musimy zachować jasność i koncentrację myślenia, aby lepiej poprawić pamięć.
Po drugie, scena turystyczna. Podróże pozwalają nam poznawać różne kultury i środowiska, znacznie wzbogacając nasze horyzonty. Podczas podróży możemy zdobyć bogatą wiedzę kulturową, zapamiętując lokalizacje geograficzne, ludzi, zwyczaje i inne informacje. Dlatego w scenie podróży musimy ją uważnie obserwować i aktywnie doświadczać, aby lepiej poprawić naszą pamięć.
Po raz kolejny jest to scena pracy. W pracy musimy poradzić sobie z dużą ilością informacji, takich jak dane, kontakty, zadania, plany itp. Jeśli nasza pamięć nie będzie wystarczająco silna, będzie to miało wpływ na naszą efektywność pracy i osiągnięcia. Dlatego w scenariuszach pracy musimy wykonać dobrą robotę rejestrując i organizując, a także starać się maksymalnie zawęzić zakres „połączenia informacyjnego”. W ten sposób możemy lepiej poprawić naszą pamięć.
Wreszcie są sceny z życia. Ludzie muszą pamiętać wiele codziennych rzeczy, takich jak adresy, numery telefonów, zadania na dany dzień i tak dalej. Jeśli nasza pamięć nie jest wystarczająco dobra, pojawi się wiele problemów w życiu. Dlatego w scenach życia musimy ćwiczyć naszą zdolność pamięci. Możemy poprawić naszą pamięć, budując myślenie skojarzeniowe i ciche powtarzanie.
Podsumowując, pamięć w różnych scenariuszach jest ze sobą ściśle powiązana. Możemy poprawić naszą pamięć i osiągnąć lepsze wyniki w różnych scenariuszach poprzez celową praktykę i koncentrację. Z optymizmem dążyjmy do lepszego życia i kariery. Widać, że trzeba poprawić pamięć, a Cistanche desericola potrafi znacząco poprawić pamięć, bo Cistanche desericola potrafi także regulować równowagę neuroprzekaźników, np. zwiększać poziom acetylocholiny i czynników wzrostu. Substancje te są bardzo ważne dla pamięci i uczenia się. Ponadto Cistanche desericola może również poprawić przepływ krwi i promować dostarczanie tlenu, co może zapewnić mózgowi odpowiednią ilość składników odżywczych i energii, poprawiając w ten sposób witalność i wytrzymałość mózgu.

Kliknij Poznaj suplementy poprawiające pamięć
3.1. Motywacja
Jak wspomniano wcześniej, mechanizm kopiowania przy zapisie odgrywa kluczową rolę we wdrażaniu funkcji pamięci wirtualnej w nowoczesnych systemach operacyjnych. Jednak jego zalety pod względem przestrzeni maleją w nowoczesnych środowiskach komputerowych i obciążeniach wymagających intensywnego zapisu, które są powszechne w centrach danych [21,22].
Pojawiające się technologie pamięci, takie jak pamięć masowa (SCM) i pamięć trwała, umożliwiają zwiększenie gęstości danych w modułach pamięci przy jednoczesnym obniżeniu kosztu jednostki danych.
W dzisiejszych czasach zbudowanie węzła o ogromnej ilości pamięci w skali terabajtów stało się tańsze niż kiedykolwiek. Ponadto dostawcy usług w chmurze zgłaszali, że węzły w centrach danych wykazują niskie wykorzystanie pamięci, w wyniku czego 40–50% pamięci pozostaje niewykorzystane [23–26]. W tej sytuacji możliwa staje się zamiana przestrzeni pamięci na wydajność w systemach, w których wydajność jest krytyczna [27]. Przewaga pod względem wydajności również maleje.
Korzyści w zakresie wydajności wynikające z kopiowania przy zapisie można scharakteryzować na podstawie częstotliwości i wydajności obsługi błędów stron. Podczas tworzenia procesu potomnego uprawnienia do zapisu na wszystkich stronach zostały utracone. Z punktu widzenia poprawności jest to nieuniknione; jednakże prowadzi to do częstych błędów strony po rozwidleniu podczas obsługi każdego żądania zapisu. Ta burza błędów zapisu zdarza się nie tylko procesom potomnym, ale także procesowi nadrzędnemu.
Co gorsza, czas obsługi błędów strony nie poprawił się ostatnio, ale zwykle wydłuża się ze względów bezpieczeństwa. W przeszłości cała przestrzeń adresowa jądra była trwale mapowana na część przestrzeni adresowej procesu użytkownika.
Jednakże taki układ przestrzeni adresowej umożliwia złośliwym procesom użytkownika pośredni odczyt krytycznych danych z przestrzeni adresowej jądra poprzez wykorzystanie spekulatywnego wykonywania w procesorach [28,29].
Aby złagodzić tę krytyczną lukę w zabezpieczeniach, nowoczesne systemy operacyjne wykorzystują izolację tabeli stron jądra (KPTI). Ogólnie rzecz biorąc, tylko ograniczona część przestrzeni adresowej jądra jest odwzorowywana na przestrzeń adresową procesu, a reszta przestrzeni adresowej jądra jest dynamicznie odwzorowywana i usuwana z mapy podczas obsługi przerwań i wywołań systemowych. Musi temu towarzyszyć płukanie TLB, które może znacznie pogorszyć wydajność systemu.
W tej pracy staramy się zmniejszyć obciążenie związane z kopiowaniem przy zapisie, wykorzystując przestrzenność odniesień do pamięci. Obecnie kopiowanie przy zapisie odbywa się na każdej stronie i za każdym razem, gdy wystąpi błąd strony, system operacyjny powinien się zaangażować. Naszą kluczową ideą jest zmniejszenie częstotliwości zaangażowania systemu operacyjnego poprzez wykorzystanie przestrzennej lokalizacji dostępu do pamięci. Jeśli strona jest dostępna w celu zapisu, prawdopodobnie wkrótce uzyskany zostanie także dostęp do pobliskich stron w celu zapisu.
Tak więc, jeśli wykonamy kopiowanie przy zapisie nie tylko dla wadliwej strony, ale także dla sąsiednich stron razem (tj. wstępnie skopiujemy sąsiednie strony), możemy amortyzować koszty ogólne związane z kopiowaniem przy zapisie podczas obsługi błędów strony. Musimy jednak uważać, aby nie kopiować zawsze na ślepo wszystkich pobliskich stron.
Jeśli skopiowane strony zostaną zapisane później, koszty poniesione na wykonanie kopii wstępnej zostaną zwrócone. Jeśli jednak skopiowane strony nie zostaną zapisane później, kopia wstępna wiąże się jedynie z dodatkowymi kosztami czasowymi i przestrzennymi.

Dlatego istotne jest zidentyfikowanie odpowiednich stron docelowych do skopiowania. Zastosowano podobne podejście, aby zminimalizować obciążenie związane z obsługą błędów stron. Linux wykorzystuje tak zwaną funkcję „obejścia błędów”. Podczas obsługi błędu strony Linux inicjuje obsługę błędów strony dla stron znajdujących się wokół wadliwej strony [2]. Jednakże ta funkcja jest stosowana tylko w przypadku błędów strony odczytu dla obszarów pamięci opartych na plikach.
Biorąc pod uwagę, że proponowana koncepcja koncentruje się na zapisywaniu błędów stron dla stron anonimowych, możemy argumentować, że nasze podejście różni się od funkcji omijania błędów. Zaproponowano wiele najnowocześniejszych projektów [12–17] w celu optymalizacji wykorzystania ogromne strony w systemie operacyjnym.
Systemy te wspólnie przedstawiają schemat identyfikowania najlepszych stron kandydujących do konwersji na duże strony i skutecznego promowania (tj. konwertowania stron podstawowych na ogromną stronę) lub obniżania poziomu (tj. konwertowania ogromnej strony na strony podstawowe). ogromne strony.
Jednakże niezależnie od proponowanych schematów, kopiowanie przy zapisie odbywa się wyłącznie w ziarnistości strony bazowej, po ewentualnym podzieleniu ogromnej strony na strony bazowe. Zatem ich charakterystyka wydajności podczas kopiowania przy zapisie jest taka sama jak w domyślnym systemie Linux z mechanizmem przezroczystej ogromnej strony (THP). W przeciwieństwie do tego proponowany przez nas schemat jest wyjątkowy, ponieważ wykonuje kopiowanie przy zapisie z różną szczegółowością w zależności od stopnia dostępu do pamięci.
3.2. Identyfikacja miejscowości przestrzennej
Aby zrealizować proponowany schemat, powinniśmy rozważyć dwie trudne kwestie. Po pierwsze, strony docelowe powinny być identyfikowane precyzyjnie i na czas, tak aby zmaksymalizować korzyści z precopy, a jednocześnie zminimalizować koszty związane z precopy.
Gdy strona zostanie skopiowana przez autora, nie spowoduje to żadnych dalszych błędów strony. Oznacza to w praktyce, że system utracił możliwość optymalizacji dostępu do zapisu. Zatem system powinien być w stanie przewidzieć przyszłe wykorzystanie strony i określić, które strony należy skopiować, a które nie. Po drugie, identyfikacja stron docelowych powinna wiązać się z niewielkim obciążeniem, ponieważ skanowanie systemu operacyjnego nie może pozwolić sobie na czasochłonne przetwarzanie w podsystemie zarządzania pamięcią o krytycznym znaczeniu dla wydajności.
Jak omówiono w części 2, wiele funkcji pamięci wirtualnej we współczesnych systemach operacyjnych opiera się na mechanizmie kopiowania przy zapisie. Zatem narzut może z łatwością przewyższyć korzyści wynikające ze zoptymalizowanego kopiowania przy zapisie, jeśli ogólna implementacja nie jest wystarczająco wydajna.
Aby przewidzieć przyszłość strony, najpierw zbieramy historię rozwidleń procesów użytkownika. W szczególności system operacyjny monitoruje liczbę rozwidleń wywoływanych przez każdy proces. Niska liczba procesów oznacza, że istnieje niewielka możliwość wykorzystania procesu, a system operacyjny nie musi w pełni śledzić błędów strony zapisu dla tego procesu.
Z drugiej strony, gdy proces wywołuje wywołanie systemowe fork powyżej progu, system może spodziewać się możliwości optymalizacji. Dzieje się tak w przypadku Redis, który okresowo wywołuje forki w celu wykonania migawek w pamięci, lub w skrypcie powłoki, który forkuje wiele poleceń wiersza poleceń. W odpowiedzi system rozpoczyna śledzenie błędów stron procesu.

Następnie proponujemy metodę przewidywania możliwości optymalizacji na podstawie historii, przy założeniu, że ogólne zachowanie aplikacji nie zmieni się znacząco. W tym celu dzielimy przestrzeń adresową procesu na regiony o stałej wielkości. Każdy region przechowuje bitmapę, gdzie każdy bit odpowiada stronie w regionie. Proces jest uruchamiany z wyczyszczonymi wszystkimi mapami bitowymi, tak jak w przypadku nowo zapełnionych obszarów pamięci wirtualnej (VMA). Gdy część lub całe VMA zostanie odmapowane, mapy bitowe w odpowiednim zakresie adresów zostaną również zwolnione.
Mapa bitowa jest przydzielana tylko dla zapełnionych części VMA, a informacje o stronie o wielkości 4 KB są podsumowywane w jednym bicie. Zatem nadmiar miejsca na mapę bitową wynosi około 0,003% zapełnionej przestrzeni adresowej. Początkowo zapisy są przetwarzane poprzez kopiowanie przy zapisie w niezmienionej postaci.
Dostęp do zapisu jest blokowany w procedurze obsługi błędów strony, w wyniku czego ustawiany jest odpowiedni wpis mapy bitowej. Z biegiem czasu mapa bitowa skutecznie rejestruje dostęp do regionu i możemy określić ilościowo stopień pokrycia. Zasięg regionu oblicza się jako procent stron zapisanych na kopiach ze wszystkich stron w regionie w następujący sposób:
![]()
Załóżmy, że system wykorzystuje strony o rozmiarze 4 KB, a przestrzeń adresowa jest podzielona na regiony o wielkości 2 MB.
Następnie każdy region ma strony o wartości 512 4 KB. Jeśli na zapisie zostanie skopiowanych 300 stron, pokrycie regionu wynosi 300/512 × 100=58,6%.Im większe pokrycie regionu, tym więcej może on skorzystać z możliwości optymalizacji kopii wstępnej. Ta informacja o zasięgu jest przenoszona przez rozwidlenie i używana jako metryka do określenia korzyści z kopiowania pobliskich stron.
W szczególności, jeśli obszar pamięci ma duże pokrycie, strony w tym regionie prawdopodobnie zostaną w końcu zapisane. Dlatego korzystne byłoby wstępne skopiowanie innych stron w regionie podczas przetwarzania błędu zapisu strony. Natomiast możliwości optymalizacji w przypadku wstępnego kopiowania stron są niewielkie, jeśli zasięg jest niski. Zatem tylko wadliwa strona jest kopiowana przez moduł obsługi błędu strony.
Odtąd w dalszej części artykułu będziemy nazywać ten schemat kopiowaniem przy zapisie opartym na pokryciu lub CCoW. Rysunek 1 ilustruje koncepcję CCoW. Istnieją dwa regiony, regiony 0 i 1, każdy zawierający sześć stron.
Strony z zielonym odcieniem są zapełniane kopią przy zapisie. Kiedy proces wywołuje wywołanie systemowe fork, zezwól na zapis dla wszystkich stron, łącznie z zielonymi, które mają zostać usunięte podczas forku. Załóżmy, że próg pozwalający określić region wysokolokacyjny wynosi 60%. W regionie 0 cztery strony (strony 1, 2, 3 i 4) zostały skopiowane przed rozwidleniem, zapewniając pokrycie 4/6=66%.
Zatem uważa się, że ten region ma dużą lokalizację przestrzenną i wszystkie strony są kopiowane w celu obsługi błędu strony 3, zaznaczonego na czerwono. Natomiast dolny obszar zapewnia pokrycie na poziomie 33%, ponieważ dwie z sześciu stron zostały zapisane przed rozwidleniem.
Region ten ma zatem zasięg niższy niż próg, co sugeruje niską lokalizację przestrzenną w regionie. Zatem, gdy strona 9 jest dostępna do zapisu, tylko wadliwa strona jest kopiowana przy zapisie w procedurze obsługi błędów strony, podobnie jak normalna procedura kopiowania przy zapisie.

For more information:1950477648nn@gmail.com






