Co to jest pamięć podręczna?

Żądanie danych z dowolnego źródła zawsze powoduje pewne opóźnienie. Ping do serwerów WWW jest mierzony w milisekundach, czas dostępu do pamięci może mieć opóźnienia w mikrosekundach, podczas gdy opóźnienie pamięci RAM jest mierzone w cyklach zegara procesora. Oczywiście tego rodzaju prędkości byłyby nie do pomyślenia zaledwie kilka dekad temu, ale w teraźniejszości nigdy nie są wystarczająco szybkie. Szybkość dostępu jest często wąskim gardłem w wydajności. Jednym ze sposobów rozwiązania tego problemu jest buforowanie.

Buforowanie to proces przechowywania tymczasowej kopii zasobu w taki sposób, aby można było uzyskać do niego szybszy dostęp niż normalnie. Istnieje ogromna gama wdrożeń zarówno programowych, jak i sprzętowych. Pamięć podręczna może działać jako pamięć podręczna odczytu, pamięć podręczna zapisu lub obie te funkcje.

Czytaj pamięci podręczne

W odczytywanej pamięci podręcznej dane, o które wcześniej prosiliśmy, są przechowywane w pamięci podręcznej w celu szybszego dostępu. W niektórych scenariuszach pamięć podręczna może być nawet prewencyjnie ładowana danymi umożliwiającymi obsługę pierwszego żądania z pamięci podręcznej, a nie tylko kolejnych żądań.

Pamięć podręczna odczytu, którą najprawdopodobniej znasz, to pamięć podręczna przeglądarki. Tutaj przeglądarka przechowuje lokalną kopię żądanych zasobów. Oznacza to, że jeśli i kiedy strona internetowa zostanie ponownie załadowana lub zostanie załadowana podobna strona, która korzysta w dużej mierze z tej samej zawartości, zawartość ta może być udostępniana z pamięci podręcznej, a nie z serwera internetowego. Oznacza to nie tylko, że strona może się szybciej ładować, ale także zmniejsza obciążenie sieci serwer i zmniejsza ilość danych, które użytkownik musi pobrać, co może być ważne w przypadku licznika znajomości.

Sama pamięć RAM działa również jako pamięć podręczna odczytu dla danych na dysku twardym. W takim przypadku dane uruchomionego programu są prewencyjnie ładowane do pamięci RAM, aby procesor mógł uzyskać do nich szybszy dostęp. Dane z pamięci RAM są następnie buforowane w pamięci podręcznej procesora, chociaż proces tego jest znacznie bardziej złożony, ponieważ pamięć podręczna procesora jest mierzona w megabajtach, a nie w gigabajtach.

Napisz do pamięci podręcznych

Pamięć podręczna zapisu to pamięć podręczna, która może absorbować dane zapisywane na wolniejszym urządzeniu. Typowym przykładem może być pamięć podręczna SLC w nowoczesnych dyskach SSD. Ta pamięć podręczna nie pozwala na szybszy odczyt danych, jednak zapis jest znacznie szybszy niż zapis do pamięci flash TLC lub QLC, która stanowi resztę dysku SSD. Pamięć podręczna SLC może absorbować szybkie operacje zapisu, a następnie przenosić te dane tak szybko, jak to możliwe do pamięci flash TLC, która zapewnia znacznie lepszą gęstość pamięci, ale jest również znacznie wolniejsza w zapisie. Korzystanie z pamięci flash w ten sposób optymalizuje ją zarówno pod kątem dużych prędkości zapisu, jak i dużej gęstości przechowywania.

Hybrydowe pamięci podręczne

Istnieje wiele sposobów obsługi pamięci podręcznych, które pozwalają im działać zarówno jako pamięć podręczna odczytu, jak i zapisu. Każda z tych metod obsługuje operacje zapisu w inny sposób i ma zalety i wady. Trzy opcje to zapis, zapis i zapis zwrotny. Pamięć podręczna zapisu całkowicie pomija pamięć podręczną podczas pisania, pamięć podręczna zapisu zapisuje do pamięci podręcznej, ale uważa operację za ukończoną tylko wtedy, gdy została zapisana w pamięci. Pamięć podręczna z zapisem zwrotnym zapisuje w pamięci podręcznej, a następnie uznaje operację za zakończoną, opierając się na pamięci podręcznej, aby przenieść ją do pamięci podręcznej, jeśli jest to potrzebne.

Zapisywanie może być przydatne, jeśli spodziewasz się dużej liczby zapisów, ponieważ minimalizuje rezygnację z pamięci podręcznej. Oznacza to jednak, że operacja, która następnie odczytuje dowolne z zapisanych danych, za pierwszym razem napotka co najmniej jedną pamięć podręczną. Pamięć podręczna z możliwością zapisu natychmiast buforuje operacje zapisu, co oznacza, że ​​wynik może być udostępniany z pamięci podręcznej przy pierwszym żądaniu. Aby jednak uznać, że jest ona kompletna, operacja zapisu musi również zapisywać dane na dysku, co zwiększa opóźnienie. Pamięć podręczna z zapisem zwrotnym ma te same korzyści, co zapis w czasie, umożliwiając natychmiastowe udostępnianie zapisanych danych z pamięci podręcznej. Nie wymaga jednak operacji zapisu, aby zapisać na dysku, aby był uważany za kompletny. Zmniejsza to opóźnienia zapisu, ale wiąże się z ryzykiem utraty danych, jeśli pamięć podręczna jest niestabilna i nie kończy zapisywania danych z powrotem do pamięci masowej przed utratą zasilania.

Jak usunąć dane z pamięci podręcznej?

Jednym z czynników ograniczających jakąkolwiek pamięć podręczną jest jej pojemność. Wyszukiwanie dużej pamięci podręcznej zajmuje dużo czasu, co w pierwszej kolejności neguje zalety korzystania z pamięci podręcznej. Technologie pamięci używane do buforowania są również droższe niż pamięć, z której są buforowane. Gdyby tak nie było, prawdopodobnie ta warstwa pamięci zmieniłaby technologie pamięci, aby poprawić wydajność. Oba te czynniki oznaczają, że pamięci podręczne są zwykle stosunkowo małe, zwłaszcza w porównaniu z nośnikiem pamięci, z którego są buforowane. Pamięć RAM ma mniejszą pojemność niż pamięć masowa, a pamięć podręczna procesora ma mniejszą pojemność niż pamięć RAM. Pamięć podręczna SLC ma mniejszą pojemność niż pamięć TLC.

Wszystko to oznacza, że ​​często trzeba cyklicznie usuwać dane z pamięci podręcznej, aby zwolnić miejsce na nowe dane, które wymagają buforowania. Istnieje wiele różnych podejść do tego. „Najmniej używany” woli eksmitować wpisy z pamięci podręcznej, które mają najmniejszą liczbę dostępów. Może to być przydatne do przewidywania, które wpisy będą miały najmniejszy wpływ na przyszłe chybienia w pamięci podręcznej, ale zaliczyłby również bardzo niedawno dodane wpisy jako mające niską liczbę dostępów, co może prowadzić do pamięci podręcznej maselnica.

„Najmniej używany” woli eksmitować wpisy w pamięci podręcznej, które nie były używane od jakiegoś czasu. Zakłada się, że nie są one obecnie używane, ale nie bierze pod uwagę, czy były intensywnie używane jakiś czas temu. „Ostatnio używane” woli eksmitować ostatnio używane wpisy w pamięci podręcznej, zakładając, że zostały one użyte i nie będą musiały być używane ponownie. Najlepszym podejściem jest generalnie połączenie wszystkich trzech, na podstawie statystyk użytkowania.

Nieaktualne informacje i zagrożenia bezpieczeństwa

Główne ryzyko związane z pamięciami podręcznymi polega na tym, że zawarte w nich informacje mogą stać się nieaktualne. Wpis pamięci podręcznej jest uważany za przestarzały, gdy oryginalne dane zostały zaktualizowane, pozostawiając wpis pamięci podręcznej nieaktualny. Ważne jest, aby regularnie sprawdzać, czy udostępniana kopia na żywo nadal pasuje do kopii z pamięci podręcznej.

W szczególności na stronach internetowych niezwykle ważne jest również określenie, jakie dane mogą, a jakie nie mogą być buforowane. Na przykład jest w porządku, jeśli duży, niezmienny plik JavaScript jest przechowywany w pamięci podręcznej. Oszczędza to użytkownikowi pobierania go za każdym razem, a nawet może przynieść korzyści innym użytkownikom korzystającym z tej samej pamięci podręcznej. Nie możesz jednak buforować danych specyficznych dla sesji. Wyobraź sobie, co by się stało, gdybyś przeszedł do aplikacji do obsługi wiadomości po zalogowaniu się jako Ty, tylko po to, by dowiedzieć się, że otrzymałeś z pamięci podręcznej wersję wiadomości innego użytkownika. Na szczęście serwery internetowe mogą określać, które zasoby mogą, a które nie mogą być buforowane, a te problemy są ogólnie dobrze znane, więc jest ich niewiele.

Wniosek

Pamięć podręczna to część pamięci, która może przechowywać niektóre ostatnio używane dane w metodzie przechowywania, do której dostęp jest szybszy niż w przypadku ponownego ukończenia normalnego procesu dostępu do danych. Pamięć podręczna ma zazwyczaj ograniczoną pojemność, co oznacza, że ​​po zapełnieniu musi eksmitować wpisy. Pamięć podręczna jest na ogół niewidoczna dla użytkownika, co oznacza, że ​​opóźnienie jest jedyną wskazówką, że wynik został przesłany przez pamięć podręczną.