Jaka jest różnica między pamięcią buforową a pamięcią podręczną w systemie Linux?


179

Dla mnie nie jest jasne, jaka jest różnica między dwiema koncepcjami pamięci Linuksa: bufferi cache. Przeczytałem ten post i wydaje mi się, że różnica między nimi polega na polityce wygasania:

  1. zasady bufora są pierwszeństwo, pierwszeństwo
  2. Polityka pamięci podręcznej jest ostatnio używana.

Czy mam rację?

W szczególności patrzę na dwa polecenia: freeivmstat

james@utopia:~$ vmstat -S M
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa
5  0      0    173     67    912    0    0    19    59   75 1087 24  4 71  1
james@utopia:~$ free -m
             total       used       free     shared    buffers     cached
Mem:          2007       1834        172          0         67        914
-/+ buffers/cache:        853       1153
Swap:         2859          0       2859

Powinieneś dać nam większy kontekst, oba terminy mają różne znaczenia. Czy masz na myśli wynik freepolecenia?
leonbloy

3
masz rację, patrzę na dwa polecenia: wolny, vmstat. zobacz moje aktualizacje.
James.Xu

1
Możesz także odwiedzić unix.stackexchange.com
leonbloy

Odpowiedzi:


69

„Bufory” reprezentują część pamięci RAM przeznaczoną na bloki pamięci podręcznej. „Buforowany” jest podobny do „Buforów”, tylko tym razem buforuje strony z odczytu plików.

Cytat z:


3
Przetestowałem to za pomocą prostego programu w języku Python, który zapisuje duże ilości bloków. To, co się dzieje, polega na tym, że cachewypełnia się zgodnie z raportem free -w -h, a nie bufferskolumną. Myślę, że cachekolumna zlicza zarówno zapisy, jak i odczyty dysku i buffersjest używana do czegoś innego.
CMCDragonkai

@CMCDragonkai dzięki za eksperymentalne dowody. Interesujące pytanie brzmi: czy pisałeś szybciej, niż dysk mógłby się wypłukać. (np. synchronizacja zajęłaby dużo czasu), co powiedziałoby nam, czy brudne bloki są liczone inaczej niż czyste. Linux z pewnością buforuje oba typy (lru, jak wspomniano w pytaniu), ale jeden jest znacznie poważniejszy pod względem presji pamięci.
Seth Robertson,

179

Bufory są powiązane z określonym urządzeniem blokowym i obejmują buforowanie metadanych systemu plików, a także śledzenie stron w locie. Pamięć podręczna zawiera tylko dane zaparkowanego pliku. Oznacza to, że bufory zapamiętują zawartość katalogów, uprawnienia do plików i śledzą, z jakiej pamięci są zapisywane lub odczytywane dla określonego urządzenia blokowego. Pamięć podręczna zawiera tylko zawartość samych plików.

cytat link


1
Krótkie i dobrze wyjaśnione. Dzięki.
ciekawy

84

Cytowana odpowiedź (w celach informacyjnych):

Krótka odpowiedź: Pamięć podręczna to rozmiar pamięci podręcznej strony. Bufory to wielkość buforów bloków we / wy w pamięci. Sprawy buforowane; Bufory są w dużej mierze nieistotne.

Długa odpowiedź: Pamięć podręczna to wielkość pamięci podręcznej strony systemu Linux, pomniejszona o pamięć podręczną wymiany, która jest reprezentowana przez SwapCached (a zatem całkowity rozmiar pamięci podręcznej strony to Cache + SwapCached). Linux wykonuje wszystkie operacje we / wy pliku przez pamięć podręczną strony. Zapisy są implementowane jako zwykłe oznaczanie jako brudne odpowiednich stron w pamięci podręcznej stron; wątki spłukiwania następnie okresowo zapisują na dysku wszelkie brudne strony. Odczyty są realizowane przez zwracanie danych z pamięci podręcznej strony; jeśli dane nie znajdują się jeszcze w pamięci podręcznej, są najpierw zapełniane. W nowoczesnym systemie Linux pamięć podręczna może z łatwością mieć kilka gigabajtów. Zmniejszy się tylko w odpowiedzi na presję pamięci. System wyczyści pamięć podręczną strony wraz z zamianą danych na dysk, aby w razie potrzeby udostępnić więcej pamięci.

Bufory to bufory we / wy bloku pamięci. Są stosunkowo krótkotrwałe. Przed wersją jądra Linuksa 2.4, Linux miał osobne bufory stron i buforów. Od wersji 2.4 pamięć podręczna strony i bufora jest ujednolicona, a bufory to surowe bloki dysku, które nie są reprezentowane w pamięci podręcznej strony, tj. Nie są danymi plików. Metryka Bufory ma zatem minimalne znaczenie. W większości systemów Bufory są często tylko dziesiątkami megabajtów.


7
„Bufory są w dużej mierze nieistotne” - Nie. W wielu przypadkach buforowanie zawartości pliku jest nieistotne, ale utrzymywanie metadanych w pamięci podręcznej przyspiesza. Na przykład serwer NAS do przesyłania strumieniowego wideo.
Gunther Piez

Każdy system wykonujący wiele operacji we / wy zużyje dużo pamięci na bufory. Ładuję zbiorczo bazę danych MySQL / InnoDB o pojemności 100 GB, a bufory cały czas przekraczają 2 GB.
Marcelo Pacheco

21

To nie jest „tak proste” jak to, ale może pomóc zrozumieć:

Bufor służy do przechowywania metadanych plików (uprawnień, lokalizacji itp.). Tutaj śledzona jest każda strona pamięci.

Pamięć podręczna służy do przechowywania rzeczywistej zawartości pliku.


5
IOW, bufor = metadane; Pamięć podręczna = dane;
Freedom_Ben

13

Wyjaśnione przez RedHat :

Strony pamięci podręcznej:

Pamięć podręczna to część pamięci, która w przejrzysty sposób przechowuje dane, aby przyszłe żądania dotyczące tych danych mogły być szybciej obsługiwane. Jądro wykorzystuje tę pamięć do buforowania danych na dysku i poprawy wydajności we / wy.

Jądro Linux jest zbudowane w taki sposób, że zużywa tyle pamięci RAM, ile jest w stanie buforować informacje z lokalnych i zdalnych systemów plików i dysków. W miarę upływu czasu w systemie wykonywane są różne odczyty i zapisy, jądro próbuje zachować dane przechowywane w pamięci dla różnych procesów działających w systemie lub dane odpowiednich procesów, które zostaną wykorzystane w najbliższej przyszłości. Pamięć podręczna nie jest odzyskiwana w momencie zatrzymania / wyjścia procesu, jednak gdy inne procesy wymagają więcej pamięci niż wolnej dostępnej pamięci, jądro uruchomi heurystykę w celu odzyskania pamięci poprzez zapisanie danych w pamięci podręcznej i przydzielenie tej pamięci do nowego procesu.

Kiedy żądany jest jakikolwiek plik / dane, jądro szuka kopii części pliku, na której działa użytkownik, a jeśli taka kopia nie istnieje, przydzieli jedną nową stronę pamięci podręcznej i wypełni ją odpowiednia zawartość odczytana z dysku.

Dane przechowywane w pamięci podręcznej mogą być wartościami obliczonymi wcześniej lub duplikatami oryginalnych wartości przechowywanych w innym miejscu na dysku. Gdy wymagane są niektóre dane, pamięć podręczna jest najpierw sprawdzana, aby sprawdzić, czy zawiera te dane. Dane można odzyskać szybciej z pamięci podręcznej niż z ich źródła źródłowego.

Segmenty pamięci wspólnej SysV są również rozliczane jako pamięć podręczna, chociaż nie reprezentują żadnych danych na dyskach. Rozmiar segmentów pamięci współużytkowanej można sprawdzić za pomocą polecenia ipcs -m i sprawdzenia kolumny bajtów.

Bufory:

Bufory to reprezentacja bloków dyskowych danych przechowywanych w pamięci podręcznej stron. Bufory zawierają metadane plików / danych znajdujących się pod pamięcią podręczną strony. Przykład: Gdy pojawi się żądanie danych znajdujących się w pamięci podręcznej strony, najpierw jądro sprawdza dane w buforach zawierających metadane wskazujące na rzeczywiste pliki / dane zawarte w pamięci podręcznej stron. Gdy z metadanych znany jest rzeczywisty adres bloku pliku, jest on pobierany przez jądro w celu przetworzenia.


12

bufor i pamięć podręczna.

Bufor to coś, co nie zostało jeszcze „zapisane” na dysk.

Pamięć podręczna to coś, co zostało „odczytane” z dysku i zapisane do późniejszego wykorzystania.


2
nowa wskazówka dla użytkownika: spraw, aby twoja odpowiedź była jak najbardziej powiązana z pytaniem. Gdybym był tobą, dodałbym do twojej odpowiedzi sekcję rozpoczynającą się od „A więc, z twoim przykładem ...” i rozwinąć trochę na ten temat.
Piotr Wadas

25
Nie sądzę, aby ta odpowiedź była prawdziwa w tym samym kontekście, co pytanie (a mianowicie, co jądro Linuksa oznacza „bufor” i „pamięć podręczna”
Freedom_Ben

8

Myślę, że ta strona pomoże głęboko zrozumieć różnicę między buforem a pamięcią podręczną. http://www.tldp.org/LDP/sag/html/buffer-cache.html

Odczytywanie z dysku jest bardzo wolne w porównaniu z dostępem do (rzeczywistej) pamięci. Ponadto często odczytuje się tę samą część dysku kilka razy w stosunkowo krótkim czasie. Na przykład można najpierw przeczytać wiadomość e-mail, a następnie w odpowiedzi odpowiedzieć na list w edytorze, a następnie zmusić program pocztowy do przeczytania go ponownie podczas kopiowania do folderu. Lub zastanów się, jak często polecenie lsmoże być uruchamiane w systemie z wieloma użytkownikami. Czytając informacje z dysku tylko raz, a następnie przechowując je w pamięci, aż nie będą już potrzebne, można przyspieszyć wszystko oprócz pierwszego odczytu. Nazywa się to buforowaniem dysku, a pamięć używana do tego celu nazywana jest pamięcią podręczną bufora.

Ponieważ pamięć jest niestety skończonym, nie tak rzadkim zasobem, pamięć podręczna bufora zwykle nie może być wystarczająco duża (nie może pomieścić wszystkich danych, które kiedykolwiek chce się wykorzystać). Gdy pamięć podręczna się zapełnia, dane, które były nieużywane przez najdłuższy czas, są odrzucane, a zwolniona pamięć jest wykorzystywana na nowe dane.

Buforowanie dysku działa również w przypadku zapisów. Z jednej strony zapisywane dane są często wkrótce ponownie odczytywane (np. Plik kodu źródłowego jest zapisywany w pliku, a następnie odczytywany przez kompilator), więc umieszczenie danych zapisanych w pamięci podręcznej jest dobrym pomysłem. Z drugiej strony, zapisując dane do pamięci podręcznej, a nie zapisując je jednocześnie na dysk, program, który zapisuje, działa szybciej. Zapisy można następnie wykonywać w tle, bez spowalniania innych programów.


Wyjaśnia to, czym jest pamięć podręczna bufora, ale nie jaka jest różnica między buforem a pamięcią podręczną w wynikach komend vmstat i wolnych poleceń.
Roel Schroeven

4

Link 2 Setha Robertsona powiedział: „Aby dokładnie zrozumieć te terminy, zapoznaj się z książką jądra systemu Linux, taką jak Linux Kernel Development autorstwa Roberta M. Love”.

W drugim wydaniu książki znalazłem trochę informacji o „buforze”.

Chociaż samo urządzenie fizyczne jest adresowalne na poziomie sektora, jądro wykonuje wszystkie operacje dyskowe w zakresie bloków.

Kiedy blok jest przechowywany w pamięci (powiedzmy, po odczycie lub w oczekiwaniu na zapis), jest on przechowywany w „buforze”. Każdy „bufor” jest powiązany z dokładnie jednym blokiem. „Bufor” służy jako obiekt reprezentujący blok dysku w pamięci.

„Bufor” to reprezentacja jednego fizycznego bloku dysku w pamięci.

Blokowanie operacji we / wy manipuluje pojedynczym blokiem dysku na raz. Częstą operacją we / wy bloków jest odczytywanie i zapisywanie i-węzłów. Jądro udostępnia funkcję bread () do wykonania odczytu niskiego poziomu pojedynczego bloku z dysku. Za pomocą „buforów” bloki dysku są mapowane na powiązane z nimi strony w pamięci. „


2

Bufor zawiera metadane, które pomagają poprawić wydajność zapisu

Pamięć podręczna zawiera samą zawartość pliku (czasami jeszcze do zapisania na dysku), co poprawia wydajność odczytu


1

Cytat z książki: Wprowadzenie do wyszukiwania informacji

Pamięć podręczna

Chcemy przechowywać jak najwięcej danych w pamięci, szczególnie te, do których musimy często uzyskiwać dostęp. Nazywamy technikę przechowywania często używanych danych na dysku w pamięci podręcznej pamięci głównej.

Bufor

Systemy operacyjne zazwyczaj odczytują i zapisują całe bloki. Zatem odczytanie jednego bajtu z dysku może zająć tyle samo czasu, co odczytanie całego bloku. Powszechne są rozmiary bloków 8, 16, 32 i 64 kilobajtów (KB). Nazywamy tę część pamięci głównej, w której czytany lub zapisywany blok jest przechowywany jako bufor.


0

Bufor to obszar pamięci służący do tymczasowego przechowywania danych podczas przenoszenia z jednego miejsca do drugiego w komputerze. Podczas gdy pamięć podręczna jest tymczasowym obszarem przechowywania, w którym często przechowywane dane mogą być przechowywane w celu szybkiego dostępu. Po zapisaniu danych w pamięci podręcznej można w przyszłości wykorzystać dostęp do pamięci podręcznej zamiast ponownego pobierania oryginalnych danych, dzięki czemu średni czas dostępu jest krótszy.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.