Dlaczego częściowo pełna pamięć RAM (powiedzmy 80%) powoduje, że urządzenie bardzo opóźnia się, mimo że jest miejsce na przechowywanie większej ilości danych? Oczekuję, że będzie działał dobrze aż do 99%.
Zauważam, że na telefonie komórkowym bardziej niż na PC, ponieważ ma mniejszą pamięć RAM, np. Mój telefon komórkowy ma 2 GB pamięci RAM; gdy mam mniej niż 1 GB wolnej pamięci RAM, to jest dużo opóźnień! Dlaczego tak się dzieje, mimo że nadal ma do dyspozycji około 1 GB?
Odpowiedzi:
Jest tu dużo zaangażowanych, ale postaram się to wyjaśnić tak prosto, jak to tylko możliwe i w sposób, który można zastosować do prawie każdego systemu operacyjnego.
Istnieją tutaj 2 podstawowe zasady:
Suma wszystkich rzeczy, które muszą znajdować się w pamięci RAM, a te rzeczy, które mogłyby skorzystać z pamięci RAM, są prawie zawsze większe niż rozmiar pamięci RAM. Do rzeczy, które skorzystałyby z bycia w pamięci RAM, należą zestawy robocze procesów i lista rezerwowa. Ten ostatni zawiera dane i kod, które były kiedyś w użyciu, ale od tego czasu przestały działać. Wiele z tego zostanie ponownie wykorzystanych, niektóre z nich wkrótce, więc warto zachować to w pamięci RAM. Ta pamięć działa jak rodzaj pamięci podręcznej, ale nie jest tak naprawdę niezbędna, dlatego należy do kategorii dostępnej pamięci. Podobnie jak wolna pamięć, można ją szybko przekazać każdemu programowi, który jej potrzebuje. Ze względu na wydajność pamięć rezerwowa powinna być duża.
Częstotliwość użycia bloków pamięci jest daleka od losowej, ale można ją przewidzieć ze znaczną dokładnością. Pamięć jest podzielona na bloki, często 4 bajty. Dostęp do niektórych bloków uzyskuje się wiele razy na sekundę, podczas gdy do innych nie można uzyskać dostępu przez wiele minut, godzin, dni, a nawet tygodni, jeśli system działa wystarczająco długo. Istnieje szeroki zakres zastosowania między tymi 2 skrajnościami. Menedżer pamięci wie, które bloki zostały ostatnio otwarte, a które nie. Jest rozsądnym założeniem, że blok pamięci, do którego ostatnio uzyskano dostęp, będzie wkrótce potrzebny. Pamięć, do której ostatnio nie uzyskano dostępu, prawdopodobnie wkrótce nie będzie potrzebna. Długie doświadczenie dowiodło, że jest to ważna zasada.
Menedżer pamięci wykorzystuje drugą zasadę, aby w dużej mierze złagodzić niepożądane konsekwencje pierwszej. Aby to zrobić, wykonuje operację równoważenia polegającą na przechowywaniu ostatnio używanych danych w pamięci RAM, podczas gdy rzadko używane dane są przechowywane w oryginalnych plikach lub pliku stronicowania.
Gdy pamięć RAM jest obfita, równoważenie jest łatwe. Wiele ostatnio nieużywanych danych można przechowywać w pamięci RAM. To dobra sytuacja.
Sprawy komplikują się, gdy zwiększa się obciążenie pracą. Suma użytych danych i kodu jest większa, ale rozmiar pamięci RAM pozostaje taki sam. Oznacza to, że mniejszy ich podzbiór może być przechowywany w pamięci RAM. Niektóre rzadziej używane dane nie mogą już znajdować się w pamięci RAM, ale muszą zostać pozostawione na dysku. Menedżer pamięci bardzo stara się zachować równowagę między pamięcią w aktywnym użyciu a dostępną pamięcią. Jednak wraz ze wzrostem obciążenia menedżer pamięci będzie zmuszony udostępnić więcej dostępnej pamięci działającym procesom. To nie jest dobra sytuacja, ale menedżer pamięci nie ma wyboru.
Problem polega na tym, że przenoszenie danych do iz pamięci RAM podczas działania programów zajmuje dużo czasu. Gdy pamięć RAM jest obfita, nie zdarza się to często i nawet nie zostanie zauważona. Ale kiedy użycie pamięci RAM osiągnie wysoki poziom, stanie się to znacznie częściej. Sytuacja może być tak zła, że więcej czasu poświęca się na przenoszenie danych do iz pamięci RAM, niż na faktyczne ich użycie. Jest to druzgocące, czego menedżer pamięci bardzo stara się uniknąć, ale przy dużym obciążeniu często nie można tego uniknąć.
Menedżer pamięci jest po twojej stronie, zawsze starając się zachować optymalną wydajność nawet w niesprzyjających warunkach. Ale gdy obciążenie jest duże, a dostępna pamięć kończy się na niskim poziomie, musi robić złe rzeczy, aby nadal działać. To jest właściwie najważniejsza rzecz. Priorytetem jest najpierw utrzymanie działania, a następnie jak najszybsze wykonanie.
źródło
memory manger
jest część mojegoOS
prawa? więc jeśli miałbym do czynienia ze wskaźnikami i tymi bardzo niskimi poziomami, czy nadal będzie mógł tworzyć stronicowanie?Wszystkie współczesne systemy operacyjne używają w przeciwnym razie nieużywanej pamięci do buforowania danych, dzięki czemu można uzyskać do nich dostęp z szybkiej pamięci RAM zamiast z wolniejszej pamięci. Zazwyczaj zgłaszają to jako wolną pamięć, ponieważ aplikacje mogą wyczyścić pamięć podręczną i użyć jej w razie potrzeby, ale nadal jest używana. Im mniej tego jest, tym mniej danych można buforować, a komputer będzie wolniejszy.
źródło
Stronicowanie to schemat zarządzania pamięcią, za pomocą którego bloki pamięci o stałych rozmiarach mają przypisane procesy. Gdy zużycie pamięci wzrośnie do wysokiego poziomu (tj. 80% pojemności), stronicowanie zaczyna rozciągać się z pamięci RAM na vRAM (wirtualna pamięć RAM).
vRAM znajduje się w pamięci systemowej, zwykle na dysku twardym lub w innych znacznych lokalizacjach pamięci.
Procesom przypisuje się część dysku twardego do działania jako pamięć i traktuje ich sekcję jako pamięć RAM. Jest to całkowicie normalny proces, jednak gdy czas poświęcony na przesyłanie danych do iz pamięci vRAM wzrasta, wydajność systemu maleje.
Podczas gdy dedykowana pamięć RAM jest dostępna bezpośrednio z płyty głównej z procesora, co zapewnia szybkie połączenie, wirtualna pamięć RAM musi poprowadzić okablowanie między płytą a lokalizacją pamięci vRAM.
To jednak powoduje tylko niewielki wpływ na wydajność. Gdy szybkość, z jaką odbywa się przywoływanie do pamięci vRAM, gwałtownie wzrasta (gdy pojemność dedykowanej pamięci RAM zbliża się do pojemności), następuje thrashing.
Thrashing to praktyka szybkiego i szybkiego przenoszenia stron pamięci do pamięci wirtualnej. Jest to bardzo kosztowne dla wydajności, ponieważ potrzeba więcej czasu na pobieranie i adresowanie danych.
Powiedzmy, że chcesz zapisać 30 cyfr. Możesz albo usiąść obok ekranu z notatnikiem i napisać go (używając dedykowanej pamięci), albo pamiętasz fragmenty po 5, wbiec do następnego pokoju i tam zapisać w notatniku (używając pamięci wirtualnej). Obaj wykonują zadanie, ale co będzie szybsze?
Dowiedz się więcej o thashingu tutaj !
źródło
Jest tak, ponieważ system operacyjny musi wykonywać wiele stronicowania (ładowanie części aktywnych programów) i zamiany (przenoszenie danych z pamięci RAM do HD i odwrotnie), aby oprogramowanie działało. Gdy trzeba załadować nowe strony, które mogą wymagać więcej miejsca niż dostępne 20%, system operacyjny będzie musiał zamienić istniejące strony w pamięci RAM, które według niego będą mniej prawdopodobne, że zostaną wkrótce wykorzystane. Zwłaszcza na starcie innych programów. Zamiana stron z powrotem na strony zajmuje dużo czasu i drastycznie spowalnia działanie komputera, ponieważ pracujesz teraz z prędkością HD, a nie RAM.
Pomaga trochę na dysku twardym utworzyć specjalną partycję na dysku HD i przypisać ją jako dedykowaną przestrzeń „zamiany” (nie używaj jej do „prawdziwych” plików), dzięki czemu fragmentacja dysków HDD ma mniejszy wpływ na zamianę.
źródło
Pamiętaj, że dyski twarde są o rząd wielkości wolniejsze niż pamięć RAM, a sama pamięć RAM nie jest wcale taka szybka (w ogólnej architekturze). W kolejności prędkości dostępu (gdzie każdy szczebel jest o rząd wielkości wolniejszy od powyższego) masz
Virtual Memory Manager to hazardzista. Zakłada się, że nie potrzebujesz cały czas pamięci RAM przez cały czas, więc zgaduje i rzuca kostką, że twój program do dokumentów (który był w tle przez ostatnie 10 minut podczas czytania) nie jest bardzo ważne i przenosi go na dysk twardy.
Ale potem wracasz do dokumentu! Teraz VMM musi ponownie załadować wszystkie dane z dysku twardego. Co gorsza, jeśli brakuje Ci pamięci RAM, musi ona teraz wypchnąć inne dane (więcej hazardu) na dysk twardy, aby zwolnić dostępną przestrzeń. Linux lubi tutaj żyć na krawędzi. Zapełni większość pamięci RAM często używanymi danymi (idealne dla serwerów z kilkoma procesami).
źródło
Druzgocące odpowiedzi prawie to gwoździ. Jeśli jesteś w stanie, możesz zminimalizować, jak szybko to się dzieje, zmniejszając swapowanie (ile pamięci RAM pozwoli na użycie systemu przed przeniesieniem rzeczy do zamiany przestrzeni). Lubię ustawiać systemy tak, aby nie zamieniały się, dopóki RAM nie osiągnie 99% dla aplikacji serwerowych, ponieważ domyślnie oznaczałoby to, że musiałbym kodować rzeczy, aby wykorzystywały tylko 80% RAM, aby skorzystać z buforowania bez karania za wypychanie system w przestrzeń wymiany.
źródło