To stare pytanie, które widziałem od czasu do czasu. Moje rozumienie tego jest raczej ograniczone (czytając o różnicach dawno temu, ale fakt (-y), których to dotyczy, nigdy tak naprawdę nie utknął).
Tak jak rozumiem,
Bufory
Są używane przez programy z aktywnymi operacjami We / Wy, tj. Danymi oczekującymi na zapis na dysk
Pamięć podręczna
Jest wynikiem zakończonych operacji we / wy, tj. Buforów, które zostały opróżnione lub dane zostały odczytane z dysku w celu spełnienia żądania.
Czy mogę uzyskać jasne wyjaśnienie dotyczące potomności?
linux
memory
virtual-memory
Avery Payne
źródło
źródło
Odpowiedzi:
Suma „buforowana” obejmie również inne przydziały pamięci, takie jak dowolne elementy plików tmpfs. Aby zobaczyć, jak to działa, spróbuj:
a zobaczysz spadek wartości „pamięci podręcznej” o 100 Mb, który skopiowałeś do systemu plików opartego na pamięci RAM (zakładając, że jest wystarczająca ilość wolnej pamięci RAM, możesz znaleźć jej część w zamianie, jeśli maszyna jest już nadmiernie zaangażowana pod względem wykorzystania pamięci). „Sync; echo 3> / proc / sys / vm / drop_caches” przed każdym wywołaniem free powinno zapisać wszystko oczekujące we wszystkich buforach zapisu (synchronizacja) i wyczyścić wszystkie buforowane / buforowane bloki dysku z pamięci, więc wolny będzie czytał tylko inne alokacje w wartości „buforowanej”.
Pamięć RAM używana przez maszyny wirtualne (takie jak te działające pod VMWare) może być również liczona jako „buforowana” wartość wolna, podobnie jak pamięć RAM używana przez aktualnie otwarte pliki mapowane w pamięci (będzie to różnić się w zależności od używanego hiperwizora / wersji i ewentualnie między wersjami jądra).
Nie jest to więc tak proste, jak: „bufory zliczają oczekujące zapisy plików / sieci oraz zliczane w pamięci podręcznej ostatnio odczytane / zapisane bloki przechowywane w pamięci RAM w celu zapisania przyszłych odczytów fizycznych”, chociaż w większości przypadków wystarczy ten prostszy opis.
źródło
Podchwytliwe pytanie. Podczas obliczania wolnego miejsca należy dodać bufor i buforować oba te elementy. Właśnie to mogłem znaleźć
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.
http://visualbasic.ittoolbox.com/documents/difference-between-buffer-and-cache-12135
źródło
Szukałem bardziej przejrzystego opisu bufora i znalazłem w
"Professional Linux® Kernel Architecture 2008"
źródło
Wyjaśnione przez RedHat :
Strony pamięci podręcznej:
Pamięć podręczna to część pamięci, która w przejrzysty sposób przechowuje dane, dzięki czemu przyszłe żądania dotyczące tych danych mogą 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 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 kolumny bajtów.
Bufory:
Bufory są reprezentacją 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 do przetwarzania.
źródło
Zwalnianie bufora / pamięci podręcznej
Ostrzeżenie Wyjaśnia silną metodę niezalecaną na serwerze produkcyjnym! Więc jesteś ostrzeżony, nie obwiniaj mnie, jeśli coś pójdzie nie tak.
Aby to zrozumieć, możesz zmusić swój system do przekazania jak największej ilości pamięci,
Preambułacache
niż upuścić buforowany plik:Przed wykonaniem testu możesz otworzyć kolejne okno:
do śledzenia ewolucji wymiany w czasie rzeczywistym.
Nota: Musisz zutylizować tyle wolnego miejsca na dysku w bieżącym katalogu, ile masz + swap
DemoNota, host, na którym to zrobiłem, jest mocno używany. Będzie to miało większe znaczenie na naprawdę cichej maszynie.
źródło