อ่าน 3 นาที
แคชทดแทนแบบปรับได้
แคชทดแทนแบบปรับได้ ( ARC ) เป็น อัลกอริทึมการแทนที่หน้าเว็บ ที่มีประสิทธิภาพดีกว่า [ 1 ] เมื่อเทียบกับ LRU (ใช้งานล่าสุดน้อยที่สุด)...
แคชทดแทนแบบปรับได้
แคชทดแทนแบบปรับได้ ( ARC ) เป็นอัลกอริทึมการแทนที่หน้าเว็บที่มีประสิทธิภาพดีกว่า[ 1 ]เมื่อเทียบกับLRU (ใช้งานล่าสุดน้อยที่สุด) ซึ่งทำได้โดยการติดตามทั้งหน้าเว็บที่ใช้งานบ่อยและหน้าเว็บที่ใช้งานล่าสุด รวมถึงประวัติการลบออกล่าสุดสำหรับทั้งสองอย่าง อัลกอริทึมนี้ได้รับการพัฒนา[ 2 ] ที่ ศูนย์วิจัย IBM Almaden ในปี 2549 IBM ได้รับสิทธิบัตรสำหรับนโยบายแคชทดแทนแบบปรับได้
สรุป
หลักการ LRU พื้นฐานจะรักษาลิสต์รายการทรัพยากรที่เรียงลำดับ (ไดเร็กทอรีแคช) ไว้ในแคช โดยลำดับการเรียงจะขึ้นอยู่กับเวลาที่เข้าถึงล่าสุด รายการใหม่จะถูกเพิ่มเข้าไปที่ด้านบนสุดของลิสต์ หลังจากที่รายการล่างสุดถูกลบออกไปแล้ว รายการที่เข้าถึงได้ล่าสุดจะเลื่อนขึ้นไปอยู่ด้านบนสุด และดันรายการอื่นๆ ลงไปด้านล่าง
ARC ปรับปรุงกลยุทธ์ LRU พื้นฐานโดยการแบ่งไดเร็กทอรีแคชออกเป็นสองรายการ คือ T1 และ T2 สำหรับรายการที่ถูกอ้างอิงล่าสุดและบ่อยครั้ง จากนั้นแต่ละรายการจะถูกขยายด้วย รายการ ผี (B1 หรือ B2) ซึ่งแนบไว้ที่ด้านล่างของสองรายการหลัก รายการ ผี เหล่านี้ ทำหน้าที่เหมือนบัตรคะแนนโดยการติดตามประวัติของรายการแคชที่ถูกลบออกไปเมื่อเร็วๆ นี้ และอัลกอริทึมจะใช้ข้อมูลจากรายการผีเพื่อปรับให้เข้ากับการเปลี่ยนแปลงล่าสุดในการใช้งานทรัพยากร โปรดทราบว่า รายการ ผีมีเฉพาะเมตาเดตา (คีย์สำหรับรายการ) เท่านั้น ไม่ใช่ข้อมูลทรัพยากร กล่าวคือ เมื่อรายการถูกลบออกไปอยู่ใน รายการ ผีข้อมูลของรายการนั้นจะถูกทิ้งไป ไดเร็กทอรีแคชที่รวมกันจะถูกจัดระเบียบเป็นสี่รายการ LRU:
- T1 สำหรับรายการแคชล่าสุด
- T2 สำหรับรายการที่ปรากฏบ่อย ซึ่งมีการอ้างอิงอย่างน้อยสองครั้ง
- B1 คือ รายการ ผีที่ถูกลบออกจากแคช T1 เมื่อไม่นานมานี้ แต่ยังคงถูกติดตามอยู่
- B2 มีรายการ ผี ที่คล้ายกัน แต่ถูกขับไล่ออกจาก T2 แล้ว
T1 และ B1 รวมกันเรียกว่า L1 ซึ่งเป็นประวัติที่รวบรวมจากเอกสารอ้างอิงเดี่ยวล่าสุด ในทำนองเดียวกัน L2 คือการรวมกันของ T2 และ B2
ไดเร็กทอรีแคชทั้งหมดสามารถแสดงได้ในบรรทัดเดียว:
. . . [ B1 <- [ T1 <- ! -> T2 ] -> B2 ] . . [ . . . . [ . . . . . . ! . . ^ . . . . ] . . . . ] [ ขนาดแคชคงที่ (c) ]
วงเล็บเหลี่ยม ด้านใน[ ]แสดงถึงแคชจริง ซึ่งแม้จะมีขนาดคงที่ แต่สามารถเคลื่อนย้ายได้อย่างอิสระในประวัติ B1 และ B2
ขณะนี้ L1 จะแสดงจากขวาไปซ้าย โดยเริ่มจากด้านบนซึ่งระบุด้วยเครื่องหมาย ! ^ระบุขนาดเป้าหมายสำหรับ T1 ซึ่งอาจเท่ากับ เล็กกว่า หรือใหญ่กว่าขนาดจริง (ตามที่ระบุด้วยเครื่องหมาย! )
- รายการใหม่จะเข้าสู่ T1 ทางด้านซ้ายของ!และจะถูกผลักไปทางซ้ายเรื่อยๆ จนกระทั่งถูกขับออกจาก T1 ไปยัง B1 และในที่สุดก็ถูกคัดออกไปทั้งหมด
- รายการใดๆ ใน L1 ที่ถูกอ้างอิงอีกครั้ง จะได้รับโอกาสอีกครั้ง และเข้าสู่ L2 ทางด้านขวาของเครื่องหมาย! ตรงกลาง จากนั้นจะถูกผลักออกไปด้านนอกอีกครั้ง จาก T2 ไปยัง B2 รายการใน L2 ที่ได้รับการเรียกอีกครั้งสามารถทำซ้ำกระบวนการนี้ได้เรื่อยๆ จนกว่าจะหายไปทางด้านขวาสุดของ B2 ในที่สุด
ทดแทน
รายการที่ (กลับ) เข้าสู่แคช (T1, T2) จะทำให้เครื่องหมาย!เคลื่อนที่ไปยังเครื่องหมายเป้าหมาย^หากไม่มีพื้นที่ว่างในแคช เครื่องหมายนี้จะกำหนดด้วยว่า T1 หรือ T2 จะลบรายการนั้นออก
- การเข้าชมใน B1 จะเพิ่มขนาดของ T1 โดยดัน^ไปทางขวา รายการสุดท้ายใน T2 จะถูกย้ายไปยัง B2
- การโจมตีใน B2 จะทำให้ T1 หดตัวลง ผลัก^กลับไปทางซ้าย รายการสุดท้ายใน T1 จะถูกย้ายไปยัง B1 แล้ว
- การพลาดแคชจะไม่ส่งผลกระทบต่อ^แต่ ขอบเขต !จะขยับเข้าใกล้^ มาก ขึ้น
การปรับใช้
ปัจจุบัน ARC ถูกนำไปใช้งานใน คอนโทรลเลอร์จัดเก็บข้อมูล DS6000/ DS8000ของ IBM
ระบบไฟล์ที่ปรับขนาดได้ ZFSของSun Microsystemsใช้ ARC เวอร์ชันหนึ่ง[ 3 ]เป็นทางเลือกแทนแคชเพจของระบบไฟล์Solaris แบบดั้งเดิม ในหน่วยความจำเสมือน โดยได้รับการดัดแปลงเพื่อให้สามารถล็อกเพจที่กำลังใช้งานอยู่และไม่สามารถปล่อยว่างได้
PostgreSQLใช้ ARC ในตัวจัดการบัฟเฟอร์เป็นระยะเวลาสั้นๆ (เวอร์ชัน 8.0.0) แต่ได้เปลี่ยนไปใช้อัลกอริธึมอื่นอย่างรวดเร็ว โดยอ้างถึงความกังวลเกี่ยวกับสิทธิบัตรของ IBM เกี่ยวกับ ARC [ 4 ]
vSAN ของVMware (เดิมชื่อ Virtual SAN) เป็นผลิตภัณฑ์ จัดเก็บข้อมูลแบบซอฟต์แวร์กำหนด (SDS) ที่มีการรวมระบบหลายตัว ซึ่งพัฒนาโดย VMware โดยใช้ ARC เวอร์ชันหนึ่งในอัลกอริธึมการแคช[ 5 ]
OpenZFSรองรับการใช้ ARC และ L2ARC ในแคชหลายระดับเป็นแคชสำหรับการอ่าน ใน OpenZFS การอ่านดิสก์มักจะเข้าถึงแคชดิสก์ระดับแรกใน RAM โดยใช้ ARC หากมีการตั้งค่า SSD เพื่อจัดเก็บแคชดิสก์ระดับที่สอง จะเรียกว่า L2ARC L2ARC ใช้ขั้นตอนวิธี ARC เดียวกัน แต่แทนที่จะจัดเก็บข้อมูลแคชใน RAM L2ARC จะจัดเก็บข้อมูลแคชใน SSD ที่มีความเร็วสูง[ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ]
ดูเพิ่มเติม
ลิงก์ภายนอก
- ARC: แคชทดแทนแบบปรับแต่งตัวเองได้และมีค่าใช้จ่ายต่ำ (2003) โดย Nimrod Megiddo และ Dharmendra Modha
- วิกิการจัดการหน่วยความจำ Linux
- บูร์บอนเนส, โรช. แซดเอฟเอส ไดนามิกส์
- การใช้งานด้วยภาษา Python สูตรที่ 576532
- การเปรียบเทียบ LRU, ARC และอื่นๆ
สรุปเนื้อหา
ข้อมูลสำคัญจากบทความ
ข้อมูลสำคัญเกี่ยวกับ แคชทดแทนแบบปรับได้
แคชทดแทนแบบปรับได้ ( ARC ) เป็น อัลกอริทึมการแทนที่หน้าเว็บ ที่มีประสิทธิภาพดีกว่า [ 1 ] เมื่อเทียบกับ LRU (ใช้งานล่าสุดน้อยที่สุด)...
สรุป
หลักการ LRU พื้นฐานจะรักษาลิสต์รายการทรัพยากรที่เรียงลำดับ (ไดเร็กทอรีแคช) ไว้ในแคช โดยลำดับการเรียงจะขึ้นอยู่กับเวลาที่เข้าถึงล่าสุด รายการใหม่จะถูกเพิ่มเข้าไปที่ด้านบนสุดของลิสต์ หลังจากที่รายการล่างสุดถูกลบออกไปแล้ว...
ทดแทน
รายการที่ (กลับ) เข้าสู่แคช (T1, T2) จะทำให้เครื่องหมาย ! เคลื่อนที่ไปยังเครื่องหมายเป้าหมาย ^ หากไม่มีพื้นที่ว่างในแคช เครื่องหมายนี้จะกำหนดด้วยว่า T1 หรือ T2 จะลบรายการนั้นออก
การปรับใช้
ปัจจุบัน ARC ถูกนำไปใช้งานใน คอนโทรลเลอร์จัดเก็บข้อมูล DS6000/ DS8000 ของ IBM