CCoW: Optymalizacja kopiowania przy zapisie z uwzględnieniem lokalizacji przestrzennej w obciążeniach Część 2

Apr 02, 2024

Mały rozmiar strony może być problematyczny, ponieważ systemy są w stanie obsłużyć ogromną ilość pamięci fizycznej. Przy hierarchicznej organizacji tablicy stron każda translacja adresu wirtualnego wymaga wielu dostępów do pamięci, po jednym dla każdego poziomu tablicy stron, co jest niedopuszczalne.

Wraz z wiekiem pamięć stopniowo się pogarsza. Jednak pamięć fizyczna nie jest jednym z czynników bezpośrednio wpływających na naszą pamięć. Pamięć jest powiązana z siłą połączeń między neuronami w mózgu, ze zdrowiem mózgu i częstotliwością korzystania z pamięci.

W naszych mózgach neurony są połączone synapsami. Synapsy te zachęcają nas do przechowywania i wyszukiwania informacji. Jednak wraz z wiekiem te połączenia synaptyczne zmniejszają się, co powoduje pogorszenie naszej pamięci. Dzieje się tak nie dlatego, że nasza pamięć fizyczna jest zmniejszona, ale dlatego, że w naszym mózgu zachodzą pewne zmiany, które wpływają na nasze możliwości.

Jednak korzystanie z mózgu może pomóc nam zachować dobre wspomnienia. Mózg potrzebuje ćwiczeń, podobnie jak ciało, potrzebuje odpoczynku i ćwiczeń, aby zachować zdrowie. Rozwijanie dobrych nawyków myślenia pomoże zdrowiu i wydajności mózgu. Na przykład uczenie się nowych rzeczy, korzystanie z technik zapamiętywania, układanie puzzli logicznych itp. może poprawić jakość i wydajność mózgu.

Dlatego pamięć fizyczna to po prostu pojemność dostępna mózgowi. Nasza pamięć jest ściśle powiązana z ograniczeniami tego, co może osiągnąć nasz mózg. Dzięki ciągłemu ćwiczeniu mózgu możemy sprawić, że nasza pamięć będzie trwalsza i utrzymana na wysokim poziomie. Aby poprawić pamięć, powinniśmy skupić się na ćwiczeniu mózgu, zachowując przy tym pozytywne nastawienie i dobre nawyki zdrowotne. Widać, że musimy poprawić pamięć, a Cistanche desericola może znacząco poprawić pamięć, ponieważ Cistanche desericola ma działanie przeciwutleniające, przeciwzapalne i przeciwstarzeniowe, co może pomóc zmniejszyć utlenianie i reakcje zapalne w mózgu, chroniąc w ten sposób zdrowie układu nerwowego. Ponadto Cistanche Deserticola może również promować wzrost i naprawę komórek nerwowych, poprawiając w ten sposób łączność i funkcjonowanie sieci neuronowych. Efekty te mogą pomóc poprawić pamięć, uczenie się i szybkość myślenia, a także mogą zapobiegać rozwojowi dysfunkcji poznawczych i chorób neurodegeneracyjnych.

increase brain power

Kliknij i poznaj sposoby na poprawę funkcjonowania mózgu

Aby złagodzić duże obciążenie związane z translacją adresów wirtualnych na fizyczne, wiele nowoczesnych architektur zawiera pamięć podręczną do translacji adresów. MMU przechowuje kilka ostatnich wyników tłumaczeń w logice sprzętowej zwanej buforem translacji, znanym również jako TLB.

Zwykle TLB nowoczesnych architektur może pomieścić od 500 do 2000 wpisów [6,7]. Wpisy są indeksowane sprzętowo, dzięki czemu rdzeń procesora może bardzo szybko sprawdzić tłumaczenie. Wykorzystując lokalizację odniesień do pamięci, można wykonać wiele translacji adresów bez konieczności przeglądania tablicy stronicowania (co jest określane jako trafienie TLB).

W miarę szybkiego wzrostu zużycia pamięci w przypadku aplikacji intensywnie korzystających z pamięci wzrasta także liczba mapowań stron wirtualnych na fizyczne w procesie. Jednak ze względu na ograniczenia sprzętowe liczba wpisów TLB nie nadąża za szybkim wzrostem zajmowanego miejsca w pamięci aplikacji. W związku z tym wzrasta współczynnik chybień TLB, powodując wąskie gardła w wydajności aplikacji intensywnie korzystających z pamięci [8–11].

Aby pokonać to ograniczenie, niektóre architektury obsługują dodatkowe rozmiary stron większe niż rozmiar stron podstawowych 4 KB. Na przykład nowoczesne architektury Intela obsługują rozmiary stron 2 MB i 1 GB [7]. Przy tak ogromnym rozmiarze strony, jedno tłumaczenie adresu może objąć szerszy zakres adresów, skutecznie zwiększając zasięg, jaki TLB może zapewnić przy tej samej liczbie wpisów.

Na przykład system z 1024 wpisami TLB i rozmiarem strony podstawowej 4 KB może zapewnić pokrycie TLB na poziomie 4 MB, podczas gdy ta sama liczba wpisów z ogromnymi stronami o wielkości 1 GB zapewnia pokrycie 1 TB. Linux wykorzystuje ogromną stronę w postaci przezroczystych, ogromnych stron (THP). Jak sama nazwa wskazuje, Linux domyślnie udostępnia procesom użytkownika ogromne strony, gdy tylko jest to możliwe.

Jeśli THP nie jest włączone, Linux przydziela pamięć procesom w jednostce strony podstawowej o rozmiarze 4 KB. Jeśli THP jest włączone, Linux próbuje przydzielić ogromną stronę (o rozmiarze 2 MB) zamiast strony bazowej, umożliwiając gruboziarniste mapowanie strony. Ta duża szczegółowość pozwala na efektywne udostępnianie stron pomiędzy procesami nadrzędnymi i podrzędnymi za pośrednictwem forka. W przypadku, gdy w danej chwili nie jest możliwa duża alokacja stron, Linux powraca do bazowej alokacji stron. Linux okresowo skanuje przestrzenie adresowe procesów, aby znaleźć strony podstawowe i połączyć je w ogromne strony.

improve your memory

Przeprowadzono badania próbujące promować ogromne strony pod kątem wydajności, jednocześnie jeszcze bardziej maskując ich niedociągnięcia. Ingens [12,13] proponuje asynchroniczne przygotowanie dużych stron poza ścieżką krytyczną.

Hawkeye [14] przedstawia szczegółowy schemat promocji ogromnych stron, oparty na wzorcach dostępu do pamięci, w celu maksymalizacji wydajności przy minimalnej liczbie promocji ogromnych stron. Zhu i in. [15] uogólniają procesy korzystania z ogromnych stron i optymalizują cykl życia ogromnych stron. Część i in. [16] pozwalają na dziury w dużych stronach, zapewniając elastyczność w zarządzaniu pamięcią w przypadku dużych stron.

Ogromna strona jest jednak mieczem o podwójnym ostrzu. Ze względu na zwiększony rozmiar jednostki zarządzającej, alokacja stron cierpi na wewnętrzną fragmentację. Jeśli przydzielony zakres adresów jest mniejszy niż ogromny rozmiar strony, reszta strony nie może zostać wykorzystana i zostanie zmarnowana. To tak zwane powiększenie pamięci może znacząco zmniejszyć wykorzystanie pamięci w systemach zawierających duże strony [12–17].

Zwiększony rozmiar strony może również negatywnie wpłynąć na wydajność programu. Nowoczesne systemy operacyjne szeroko wykorzystują schemat kopiowania przy zapisie w celu wydajnego współużytkowania pamięci między procesami. CoW jest jednak przetwarzany tylko na poziomie szczegółowości strony podstawowej.

Zatem, aby obsłużyć CoW na dużej stronie, ogromna strona jest dzielona na strony podstawowe i kopiowana jest tylko wadliwa strona. Dzielenie dużych stron zajmuje dużo czasu, co skutkuje sporadyczną obsługą długich błędów stron. W tym sensie niektóre aplikacje, nawet te intensywnie wykorzystujące pamięć, nie zalecają używania dużych stron w celu zapewnienia stabilnej wydajności i wykorzystania pamięci [4,18].

Ogólnie rzecz biorąc, w przestrzeni adresowej procesu istnieją zakresy przestrzeni adresowej, w których wszystkie strony w tym zakresie mają te same uprawnienia i cechy. Do celów zarządzania nowoczesne systemy operacyjne zwykle przyjmują koncepcję „obszaru pamięci wirtualnej (VMA)” do reprezentowania takich zakresów przestrzeni adresowej. Strony w przestrzeni adresowej procesu możemy klasyfikować według ich pochodzenia.

improving brain function

Niektóre strony można załadować z pliku kopii zapasowej w pamięci dodatkowej, zwanej „stronami opartymi na plikach”. Natomiast niektóre strony są wypełniane dynamicznie bez żadnych danych pomocniczych. Strony stosu i sterty są w tym przypadku tak zwanymi „stronami anonimowymi”.

2.2. Widelce i kopiowanie przy zapisie

Fork to jedno ze standardowych wywołań systemowych POSIX służących do tworzenia nowego procesu. Kiedy proces wywołuje wywołanie systemowe fork, tworzony jest nowy proces jako dziecko procesu wywołującego.

Pod maską system operacyjny tworzy proces potomny, duplikując całą przestrzeń adresową procesu wywołującego. Oznacza to, że proces potomny powinien zaczynać się od tych samych danych, co proces nadrzędny.

Aby efektywnie obsługiwać duplikację przestrzeni adresowej, większość nowoczesnych systemów operacyjnych korzysta z techniki kopiowania przy zapisie (CoW). Aby zduplikować przestrzeń adresową elementu nadrzędnego, system operacyjny nie kopiuje każdej strony. Zamiast tego tworzona jest tablica stron procesu potomnego, kopiując tabelę stron procesu nadrzędnego.

To skutecznie tworzy wspólne mapowanie do przestrzeni adresowej elementu nadrzędnego. Podczas tworzenia współdzielonego mapowania uprawnienia do zapisu dla każdej strony są usuwane poprzez wyczyszczenie bitu uprawnień w odpowiednim PTE.

Po skopiowaniu mapowania zarówno rodzic, jak i dziecko mogą czytać udostępnione strony jako swoje strony. Gdy jeden z procesów umożliwia zapis na stronie, MMU z powodu braku uprawnień do zapisu wyzwala błąd strony. W procedurze obsługi błędów strony system operacyjny przydziela nową stronę, kopiuje oryginalną stronę i aktualizuje odpowiednie mapowanie strony procesu powodującego błąd za pisemną zgodą.

W tym momencie rodzic i dziecko mogą mieć różne dane pod tym samym adresem wirtualnym. Ten mechanizm kopiowania przy zapisie jest szeroko stosowany jako podstawowy kluczowy mechanizm realizacji wielu funkcji pamięci wirtualnej. W szczególności odczyty niezainicjowanych obszarów sterty są zwykle obsługiwane za pomocą współdzielonego mapowania na stronę zerową, która jest specjalną stroną zawierającą wszystkie zera.

Kernel same-page scalanie (KSM) to technika deduplikacji tych samych stron w systemie. System operacyjny skanuje strony w systemie, aby zidentyfikować strony z identycznymi danymi. Po znalezieniu takich stron system operacyjny odzyskuje wszystkie strony z wyjątkiem jednej i aktualizuje odpowiednie tabele stron, aby udostępnić pozostałą stronę.

Podczas przetwarzania uprawnienia do zapisu są odrzucane, tak że późniejszy dostęp do zapisu na stronie jest identyfikowany i kopiowany. Dzięki wysokiej wydajności kopiowania przy zapisie tworzenie procesów staje się wydajne, a niektóre aplikacje intensywnie korzystające z danych wykorzystują tę zaletę do tworzenia kopii danych .

Jednym z takich przypadków jest Redis, jedna z popularnych usług przechowywania kluczy i wartości w pamięci [4]. Redisis zaprojektowany przede wszystkim do przechowywania danych w pamięci, aby zapewnić wysoką przepustowość i małe opóźnienia.

Jednak niektóre aplikacje wymagają trwałości przechowywanych danych i ponownie uzupełniają projekt w pamięci za pomocą rozwidlenia. Redis stosuje żądania przychodzące tylko do indeksów i struktur danych w pamięci i okresowo wywołuje wywołanie systemowe fork. W efekcie tworzy to proces potomny ze zduplikowaną zawartością pamięci oryginalnego procesu Redisprocess, a proces wywołujący (tzn. proces oryginalny) kontynuuje przetwarzanie żądań przychodzących.

Proces potomny odwraca swoje wykonanie; używając bieżącej zawartości pamięci jako migawki, serializuje struktury danych w pamięci do plików, zapewniając w ten sposób trwałość migawki w pamięci. Po opróżnieniu migawki proces potomny kończy się.

Pierwotny proces może wykonać kolejną migawkę w ten sam sposób, a po awarii systemu Redis można odzyskać, czytając ostatnią migawkę. Chociaż rozwidlenie jest nieocenionym wywołaniem systemowym, jego obciążenie było krytykowane.

supplements to boost memory

Baumanna i in. [20] przeanalizowali widelec i odkryli, że widelec powoduje pogorszenie wydajności w nowoczesnych zastosowaniach. Na przykład, w miarę jak nowoczesne aplikacje stają się coraz bardziej złożone, system operacyjny powinien rozważyć około 25 specjalnych przypadków, aby rozpocząć przetwarzanie wywołania systemowego fork w celu zapewnienia zgodności ze specyfikacją POSIX. Podsumowali problemy wywołania systemowego fork i zasugerowali funkcje, jakie powinno posiadać wywołanie systemowe fork na nowoczesnym komputerze.

Zapewniają również alternatywne sposoby wymiany widelca. Zhao i in. [19] wskazali, że implementacja forków w obecnych systemach jest nieefektywna, ponieważ aplikacje wymagające dużej ilości pamięci wymagają dużo czasu na skonfigurowanie tablicy stron. Jako rozwiązanie uogólniono technikę kopiowania przy zapisie, dzięki czemu tabela stron jest kopiowana zarówno przy zapisie, jak i na zwykłych stronach.


For more information:1950477648nn@gmail.com

Może ci się spodobać również