Sanırım en iyi cevap buna bağlı. Deneyimlerime göre, önbellek algoritmalarını seçmeye giden birçok faktör var.
Dikkate alınacak faktörler
- Okuma / Yazma Dengesi. (Erişimlerin yüzde kaçı okumaya karşı yazılmıştır)
- Önbellek miktarı.
- Önbellek arkasındaki ortam türü. (Yavaş SATA sürücüler mi yoksa hızlı SSD sürücüler mi?)
- Hits vs Misses. (Şeyler ne sıklıkla yeniden yazılır veya tekrar okunur?)
- Ortalama erişim boyutu (Bu sayfa boyutunu seçmeye gider)
- Okuma ve yazma ne kadar pahalı.
Tüm farklı faktörleri düşündüğünüzde, bunu en iyi şekilde ele alan bir önbellek algoritması bulmanız gerekir. Örneğin, çok sayıda yazma, bazı yeniden yazma, yakın zamanda yazılan verilerin okunması ve bir çeşit dönen ortamın olduğu bir uygulamanız olduğunu varsayalım. Bu durumda bir çeşit hibrit önbellek algoritması istersiniz. Yazma verilerini işlemek için, Wise order of Writes (WOW) ve WRU algoritması ve diskten okunan veriler için bir LRU algoritması gibi bir şey isteyebilirsiniz. Bunun nedeni disk erişimlerinin çok pahalı olması ve WOW algoritmasının veri yazmayı daha verimli hale getirmesi ve LRU'nun sık erişilen verileri her zaman önbellekte tutmasıdır.
Çok hızlı erişim süresine sahip SSD diskleriniz olduğunu varsayalım, disk erişimi nispeten ucuz olduğu için seçiminizi LRU algoritmasına doğru yönlendirmek isteyebilirsiniz.
Gerçekten söylemek istediğim, "en iyi" yanıtın olmaması. En iyi cevap, sizin için geçerli olan faktörleri bilmek ve bunları en iyi şekilde ele alan bir algoritma seçmektir.
Algoritmayı sizin için bulma
Sisteminizin profilini oluşturun. Bu genellikle bellek erişimi istatistikleri tutmak için kod eklemeyi içerir. Profil oluşturarak hangi faktörlerin sizin için en önemli olduğunu görebilirsiniz.
Geçmişte, belirli bir süre boyunca tüm bellek erişimlerini izlemek için kod ekledim. Sonra desen ararım. Yeniden okuma, yeniden yazma, sıralı erişim, rastgele erişim vb.
Önemli şeyleri belirledikten sonra, hangi şeylerin en iyi şekilde işlendiğini görmek için tüm farklı önbellekleme algoritmalarına bakmanız gerekir.