ฉันเดาคำตอบที่ดีที่สุดคือมันขึ้นอยู่กับ จากประสบการณ์ของฉันมีหลายปัจจัยที่เข้าสู่การเลือกอัลกอริทึมแคช
ปัจจัยที่ต้องพิจารณา
- อ่าน / เขียนยอดคงเหลือ (เปอร์เซ็นต์ของการเข้าถึงคืออ่านและเขียน)
- จำนวนแคช
- ประเภทของสื่อที่อยู่เบื้องหลังแคช (พวกเขาเป็นไดรฟ์ SATA ช้าหรือไดรฟ์ SSD เร็ว)
- ฮิต vs คิดถึง (สิ่งที่เขียนใหม่หรืออ่านซ้ำบ่อยแค่ไหน)
- ขนาดการเข้าถึงโดยเฉลี่ย (สิ่งนี้จะเลือกขนาดหน้า)
- การอ่านและเขียนมีราคาแพงเพียงใด
เมื่อคุณพิจารณาปัจจัยต่าง ๆ ทั้งหมดแล้วคุณต้องค้นหาอัลกอริทึมแคชที่จัดการที่ดีที่สุด ตัวอย่างเช่นบอกว่าคุณมีแอปพลิเคชั่นที่มีการเขียนจำนวนมากเขียนใหม่บางส่วนอ่านข้อมูลที่เพิ่งเขียนและสื่อการปั่นบางประเภท ในกรณีนี้คุณต้องการอัลกอริทึมแคชแบบไฮบริด เพื่อจัดการกับข้อมูลการเขียนคุณอาจต้องการบางสิ่งเช่น Wise order of Writes (WOW) และอัลกอริทึม LRU สำหรับข้อมูลที่อ่านจากดิสก์ เหตุผลนี้คือการเข้าถึงดิสก์มีราคาแพงมากและอัลกอริทึม WOW จะทำให้มีประสิทธิภาพมากขึ้นในการเขียนข้อมูลและ LRU จะเก็บข้อมูลที่เข้าถึงบ่อยอยู่เสมอในแคช
สมมติว่าคุณมีดิสก์ SSD ซึ่งมีเวลาในการเข้าถึงที่รวดเร็วมากคุณอาจต้องเลือกตัวเลือกของคุณไปยังอัลกอริธึม LRU เนื่องจากการเข้าถึงดิสก์นั้นมีราคาไม่แพงนัก
ดังนั้นสิ่งที่ฉันต้องการจะพูดก็คือไม่มีคำตอบที่ "ดีที่สุด" คำตอบที่ดีที่สุดคือทราบปัจจัยที่มีผลกับคุณและเลือกอัลกอริทึมที่จัดการได้ดีที่สุด
วิธีค้นหาอัลกอริทึมสำหรับคุณ
โปรไฟล์ระบบของคุณ ซึ่งมักเกี่ยวข้องกับการเพิ่มรหัสเพื่อเก็บสถิติการเข้าถึงหน่วยความจำ เมื่อทำโปรไฟล์คุณจะเห็นว่าปัจจัยใดสำคัญที่สุดสำหรับคุณ
ในอดีตฉันได้เพิ่มรหัสเพื่อติดตามการเข้าถึงหน่วยความจำทั้งหมดในช่วงเวลาหนึ่ง หลังจากนั้นฉันก็มองหาลวดลาย ฉันค้นหาการอ่านใหม่การเขียนใหม่การเข้าถึงตามลำดับการเข้าถึงแบบสุ่ม ฯลฯ
เมื่อคุณระบุสิ่งที่สำคัญคุณต้องดูอัลกอริธึมการแคชชนิดต่าง ๆ ทั้งหมดเพื่อดูว่าจัดการสิ่งใดดีที่สุด