Cache (pamięć podręczna)
Cache (z ang. cache, w języku polskim powszechnie określany jako pamięć podręczna) jest szybkim magazynem danych używanym do tymczasowego przechowywania najczęściej wykorzystywanych informacji w celu przyspieszenia ich dostępu. Systemy komputerowe, sieci oraz aplikacje internetowe wykorzystują różne rodzaje cache, aby zmniejszyć opóźnienia i obciążenie zasobów.
Historia
Idea pamięci podręcznej sięga lat 1970, ale pierwsze praktyczne zastosowania pojawiły się w latach 1980 w kontekście procesorów CPU. Rozwój technologii dysków twardych i Internetu w latach 1990 przyczynił się do powstania kolejnych warstw cache, takich jak buforowanie stron WWW.
Podstawowe rodzaje cache
- Cache procesora – najbliżej rdzenia CPU, podzielony na poziomy L1, L2 i L3. Charakteryzuje się bardzo niskim opóźnieniem i wysoką prędkością.
- Cache dyskowy – znajduje się w kontrolerze dysku lub w pamięci RAM, przyspiesza odczyt i zapis danych na nośnikach magnetycznych lub SSD.
- Cache systemu operacyjnego – obejmuje m.in. inode cache, dentry cache w systemach Linux, oraz cache plików w Windows.
- Cache przeglądarki – przechowuje pobrane zasoby (HTML, CSS, obrazy) w celu szybszego wyświetlania kolejnych odwiedzin tej samej strony.
- Cache serwera proxy – buforuje odpowiedzi HTTP, zmniejszając liczbę zapytań do zewnętrznych serwerów.
- Cache baz danych – np. MySQL query cache, Redis, przyspiesza odczyt często powtarzanych zapytań.
Mechanizmy działania
Cache działa na zasadzie zasady lokalności (zasada lokalności), czyli tendencji programów do wielokrotnego odwoływania się do tych samych danych w krótkim czasie. Najważniejsze elementy mechanizmu to:
- Wpisywanie (write) – po odczycie lub modyfikacji danych, ich kopia jest umieszczana w pamięci podręcznej.
- Odczyt (read) – przy żądaniu danych najpierw sprawdzany jest cache (operacja lookup). Jeśli dane znajdują się w cache (zjawisko cache hit), zwracane są natychmiast.
- Utrzymanie integralności – w przypadku zmian w źródłowym miejscu przechowywania danych, wpisy w cache muszą zostać zaktualizowane lub usunięte (strategia write-through lub write-back).
Algorytmy zamiany (algorytmy wyparcia)
Gdy pamięć podręczna jest pełna, konieczne jest wybranie danych, które zostaną usunięte. Najczęściej stosowane algorytmy to:
- LRU (Least Recently Used) – usuwa najrzadziej używany element.
- FIFO (First In, First Out) – usuwa najstarszy element w kolejce.
- LFU (Least Frequently Used) – usuwa element o najniższej liczbie odwołań.
- Random Replacement – losowo wybiera element do usunięcia.
- ARC (Adaptive Replacement Cache) – dynamicznie dostosowuje się do wzorców dostępu, łącząc cechy LRU i LFU.
Zastosowania
Cache znajduje zastosowanie w praktycznie każdym obszarze informatyki:
- W systemach operacyjnych do przyspieszania dostępu do plików i metadanych.
- W serwerach aplikacji webowych i baz danych, aby zmniejszyć obciążenie backendu.
- W grach komputerowych do buforowania tekstur i modeli.
- W sztucznej inteligencji do przyspieszania obliczeń poprzez cache wyników pośrednich.
- W systemach wbudowanych, gdzie ograniczona pamięć wymaga efektywnego zarządzania cache.
Problemy i wyzwania
Mimo licznych korzyści, cache niesie ze sobą pewne problemy:
- Starość danych (stale data) – nieaktualne wpisy mogą prowadzić do nieścisłości, co wymaga stosowania strategii inwalidacji i mechanizmów odświeżania.
- Koherencja cache – w systemach wieloprocesorowych konieczne jest zapewnienie spójności między różnymi kopiami pamięci podręcznej (protokoły MESI).
- Rozmiar i koszt – zwiększanie pojemności cache podnosi koszty i zużycie energii, co jest krytyczne w urządzeniach mobilnych.
Przykłady implementacji
Niektóre popularne biblioteki i rozwiązania programistyczne oferujące gotowe mechanizmy cache to:
- Memcached – rozproszony cache w pamięci operacyjnej.
- Redis – baza danych typu klucz-wartość z wbudowanym mechanizmem cache.
- Guava Cache – biblioteka Java z wieloma strategiami wyparcia.
- Cache HTTP – definiowany nagłówkami
Cache-Control,ETagiExpires.
Powiązane pojęcia
- Bufor – tymczasowy magazyn danych, często współdziałający z cache.
- Wirtualna pamięć – system zarządzania pamięcią, w którym cache odgrywa rolę przy wymianie stron.
- Hipernadzorowanie lokalności – pojęcie opisujące stosowanie wielu warstw cache.
- Latencja – opóźnienie, które cache stara się minimalizować.
Literatura
- Hennessy, J. L.; Patterson, D. A. Computer Architecture: A Quantitative Approach. 5th ed., Morgan Kaufmann, 2011.
- Silberschatz, A.; Galvin, P. B.; Gagne, G. Operating System Concepts. 10th ed., Wiley, 2018.
- Wilkes, J.; et al. Cache Performance and Design. Springer, 2019.
Cache jest kluczowym elementem współczesnych systemów informatycznych, zapewniającym znaczące przyspieszenie działania dzięki inteligentnemu zarządzaniu najczęściej używanymi danymi.