Myślę, że najlepszą odpowiedzią jest to, że to zależy. Z mojego doświadczenia wynika, że wybór algorytmów buforowania wiąże się z wieloma czynnikami.
Czynniki do rozważenia
- Bilans odczytu / zapisu. (Jaki procent dostępu jest odczytany lub zapisany)
- Ilość pamięci podręcznej.
- Rodzaj nośnika znajdującego się za pamięcią podręczną. (Czy są to wolne dyski SATA czy szybkie dyski SSD?)
- Trafienia kontra chybienia. (Jak często są przepisywane lub ponownie czytane?)
- Średni rozmiar dostępu (służy do wyboru rozmiaru strony)
- Jak drogie są odczyty i zapisy.
Po rozważeniu wszystkich różnych czynników musisz znaleźć algorytm pamięci podręcznej, który najlepiej sobie z tym poradzi. Powiedzmy na przykład, że masz aplikację, w której jest dużo zapisów, niektóre zapisy, odczyty ostatnio zapisanych danych i jakiś rodzaj spinningu. W takim przypadku potrzebujesz pewnego rodzaju hybrydowego algorytmu buforowania. Aby obsłużyć zapis danych, możesz potrzebować czegoś w rodzaju mądrej kolejności zapisów (WOW) i algorytmu LRU dla danych odczytanych z dysku. Powodem tego jest to, że dostęp do dysku jest bardzo kosztowny, a algorytm WOW sprawi, że zapisywanie danych będzie bardziej wydajne, a LRU będzie przechowywać często używane dane zawsze w pamięci podręcznej.
Załóżmy, że masz dyski SSD o bardzo krótkim czasie dostępu, więc możesz zdecydować się na algorytm LRU, ponieważ dostęp do dysku jest stosunkowo niedrogi.
Tak naprawdę chcę powiedzieć, że nie ma „najlepszej” odpowiedzi. Najlepszą odpowiedzią jest poznanie czynników, które Cię dotyczą, i wybranie algorytmu, który najlepiej je obsługuje.
Jak znaleźć algorytm dla siebie
Profiluj swój system. Zwykle wymaga to dodania kodu w celu prowadzenia statystyk dostępu do pamięci. Profilując możesz zobaczyć, które czynniki są dla Ciebie najważniejsze.
W przeszłości dodawałem kod do śledzenia wszystkich dostępów do pamięci przez pewien okres czasu. Potem szukam wzorów. Szukam ponownego odczytu, ponownego zapisu, dostępu sekwencyjnego, dostępu losowego itp.
Po zidentyfikowaniu ważnych elementów należy przyjrzeć się różnym typom algorytmów buforowania, aby zobaczyć, które z nich są najlepsze.