อ่าน 2 นาที
ความสอดคล้องของแคชตามไดเร็กทอรี
ใน วิศวกรรมคอมพิวเตอร์ การ รักษาความสอดคล้องของแคชแบบใช้ไดเร็กทอรี เป็น กลไกการรักษาความสอดคล้องของแคช ประเภทหนึ่งโดยใช้ไดเร็กทอรีในการจัดการแคชแทนการใช้ บัสสนูปปิ้ง...
ความสอดคล้องของแคชตามไดเร็กทอรี
ในวิศวกรรมคอมพิวเตอร์การรักษาความสอดคล้องของแคชแบบใช้ไดเร็กทอรี เป็น กลไกการรักษาความสอดคล้องของแคชประเภทหนึ่งโดยใช้ไดเร็กทอรีในการจัดการแคชแทนการใช้บัสสนูปปิ้งวิธีการบัสสนูปปิ้งมีประสิทธิภาพต่ำเนื่องจากการใช้การกระจายเสียงวิธีการเหล่านี้สามารถใช้เพื่อกำหนดเป้าหมายทั้งประสิทธิภาพและความสามารถในการขยายขนาดของระบบไดเร็กทอรี[ 1 ]
รูปแบบเวกเตอร์บิตเต็มรูปแบบ

ในรูปแบบเวกเตอร์บิตแบบเต็ม สำหรับแต่ละบรรทัดแคช ที่เป็นไปได้ ในหน่วยความจำจะใช้บิตเพื่อติดตามว่าโปรเซสเซอร์แต่ละตัวมีบรรทัดนั้นเก็บไว้ในแคช หรือ ไม่รูปแบบเวกเตอร์บิตแบบเต็มเป็นโครงสร้างที่ง่ายที่สุดในการใช้งาน แต่มีความสามารถในการปรับขนาดได้น้อยที่สุด[ 1 ] SGI Origin 2000ใช้การผสมผสานระหว่างเวกเตอร์บิตแบบเต็มและเวกเตอร์บิตแบบหยาบ ขึ้นอยู่กับจำนวนโปรเซสเซอร์[ 2 ]
แต่ละรายการในไดเร็กทอรีจะต้องใช้พื้นที่จัดเก็บ 1 บิตต่อโปรเซสเซอร์ต่อบรรทัดแคช พร้อมกับบิตสำหรับติดตามสถานะของไดเร็กทอรี ส่งผลให้ขนาดโดยรวมที่ต้องการคือ(จำนวนโปรเซสเซอร์) × จำนวนบรรทัดแคชโดยมี อัตราส่วน ค่าใช้จ่าย ในการจัดเก็บ เท่ากับ(จำนวนโปรเซสเซอร์) / (ขนาดบล็อกแคช × 8 )
จะเห็นได้ว่าค่าใช้จ่ายด้านพื้นที่จัดเก็บของไดเร็กทอรีจะแปรผันตามจำนวนโปรเซสเซอร์แบบเชิงเส้น ถึงแม้ว่าอาจจะเหมาะสมสำหรับระบบที่มีโปรเซสเซอร์จำนวนน้อย แต่เมื่อนำไปใช้ในระบบขนาดใหญ่ ความต้องการพื้นที่จัดเก็บของไดเร็กทอรีจะสูงเกินไป ตัวอย่างเช่น หากขนาดบล็อกอยู่ที่ 32 ไบต์ และมีโปรเซสเซอร์ 1024 ตัว อัตราส่วนค่าใช้จ่ายด้านพื้นที่จัดเก็บจะเท่ากับ 1024/(32×8) = 400%
รูปแบบเวกเตอร์บิตหยาบ

รูปแบบเวกเตอร์บิตหยาบมีโครงสร้างคล้ายกับรูปแบบเวกเตอร์บิตเต็ม แม้ว่าแทนที่จะติดตามหนึ่งบิตต่อโปรเซสเซอร์สำหรับทุกแคชไลน์ ไดเร็กทอรีจะจัดกลุ่มโปรเซสเซอร์หลายตัวเข้าเป็นโหนดโดยจัดเก็บว่าแคชไลน์นั้นถูกจัดเก็บไว้ในโหนดหรือโปรเซสเซอร์ ซึ่งจะช่วยปรับปรุงข้อกำหนดด้านขนาดโดยแลกกับการลดปริมาณ การรับส่งข้อมูล บนบัส ซึ่ง ช่วยประหยัดพื้นที่ได้ (โปรเซสเซอร์ต่อโหนด - 1)×(จำนวนบรรทัดทั้งหมด) บิต[ 2 ]ดังนั้นอัตราส่วนของโอเวอร์เฮดจึงเท่ากัน เพียงแต่เปลี่ยนจำนวนโปรเซสเซอร์เป็นจำนวนกลุ่มโปรเซสเซอร์ เมื่อมีการร้องขอผ่านบัสสำหรับแคชไลน์ที่มีโปรเซสเซอร์ตัวใดตัวหนึ่งในกลุ่ม ไดเร็กทอรีจะกระจายสัญญาณไปยังทุกโปรเซสเซอร์ในโหนด แทนที่จะส่งไปยังแคชที่มีข้อมูลนั้นอยู่เท่านั้น ซึ่งนำไปสู่การรับส่งข้อมูลที่ไม่จำเป็นไปยังโหนดที่ไม่มีข้อมูลแคชอยู่
ในกรณีนี้ รายการในไดเร็กทอรีใช้ 1 บิตสำหรับกลุ่มโปรเซสเซอร์ในแต่ละแคชไลน์ สำหรับตัวอย่างเดียวกันกับรูปแบบ Full Bit Vector หากเราพิจารณา 1 บิตสำหรับ 8 โปรเซสเซอร์เป็นกลุ่ม ค่าใช้จ่ายในการจัดเก็บข้อมูลจะอยู่ที่ 128/(32×8)=50% ซึ่งเป็นการปรับปรุงที่สำคัญเมื่อเทียบกับรูปแบบ Full Bit Vector
รูปแบบไดเร็กทอรีแบบเบาบาง
แคชจะจัดเก็บเพียงส่วนย่อยของบล็อกในหน่วยความจำหลัก ณ เวลาใดเวลาหนึ่งเท่านั้น ดังนั้น ข้อมูลส่วนใหญ่ในไดเร็กทอรีจึงเป็นของบล็อกที่ไม่ได้ถูกแคชไว้ ในรูปแบบไดเร็กทอรีแบบสปาร์ส การสิ้นเปลืองพื้นที่จัดเก็บจะลดลงโดยการจัดเก็บเฉพาะบล็อกที่ถูกแคชไว้ในไดเร็กทอรีเท่านั้น ลองพิจารณาโปรเซสเซอร์ที่มีขนาดแคช 64 KB ขนาดบล็อก 32 ไบต์ และขนาดหน่วยความจำหลัก 4 MB จำนวนรายการสูงสุดที่ไดเร็กทอรีสามารถมีได้ในรูปแบบไดเร็กทอรีแบบสปาร์สคือ 2048 รายการ หากไดเร็กทอรีมีรายการสำหรับทุกบล็อกในหน่วยความจำ จำนวนรายการในไดเร็กทอรีจะเป็น 131072 รายการ ดังนั้นจึงเห็นได้ชัดว่าการปรับปรุงประสิทธิภาพการจัดเก็บข้อมูลที่ให้โดยรูปแบบไดเร็กทอรีแบบสปาร์สนั้นมีความสำคัญมาก
รูปแบบต้นไม้ไบนารีสมดุลจำนวน
ในรูปแบบนี้ ไดเร็กทอรีจะกระจายศูนย์และกระจายอยู่ระหว่างแคชที่ใช้บล็อกหน่วยความจำร่วมกัน แคชต่างๆ ที่ใช้บล็อกหน่วยความจำร่วมกันจะถูกจัดเรียงในรูปแบบของต้นไม้ไบนารีแคชที่เข้าถึงบล็อกหน่วยความจำก่อนจะเป็นโหนดรากแต่ละบล็อกหน่วยความจำจะมีข้อมูลโหนดราก (HEAD) และฟิลด์ตัวนับการแบ่งปัน (SC) ฟิลด์ SC จะมีจำนวนแคชที่ใช้บล็อกร่วมกัน แต่ละรายการแคชจะมีตัวชี้ไปยังแคชที่แบ่งปันถัดไปที่เรียกว่า L-CHD และ R-CHD เงื่อนไขสำหรับไดเร็กทอรีนี้คือ ต้นไม้ไบนารีจะต้องมีความสมดุลของจำนวน กล่าวคือ จำนวนโหนดในต้นไม้ย่อยด้านซ้ายจะต้องเท่ากับหรือมากกว่าจำนวนโหนดในต้นไม้ย่อยด้านขวาหนึ่งโหนด ต้นไม้ย่อยทั้งหมดจะต้องมีความสมดุลของจำนวนเช่นกัน[ 3 ]
รูปแบบไดเร็กทอรีแบบลูกโซ่
ในรูปแบบนี้ หน่วยความจำจะเก็บตัวชี้ไดเร็กทอรีไปยังแคชล่าสุดที่เข้าถึงบล็อก และแต่ละแคชจะมีตัวชี้ไปยังแคชก่อนหน้าที่เข้าถึงบล็อก ดังนั้นเมื่อโปรเซสเซอร์ส่งคำขอเขียนไปยังบล็อกในหน่วยความจำ โปรเซสเซอร์จะส่งการทำให้ไม่ถูกต้องลงไปตามลำดับของตัวชี้ ในไดเร็กทอรีนี้ เมื่อบล็อกแคชถูกแทนที่ เราจำเป็นต้องสำรวจรายการเพื่อเปลี่ยนไดเร็กทอรี ซึ่งจะเพิ่มความหน่วงเพื่อป้องกันสิ่งนี้ ปัจจุบันจึง มีการใช้ รายการเชื่อมโยงแบบสองทางอย่างแพร่หลาย ซึ่งแต่ละสำเนาแคชจะมีตัวชี้ไปยังแคชก่อนหน้าและแคชถัดไปที่เข้าถึงบล็อก[ 4 ]
รูปแบบตัวชี้แบบจำกัด
รูปแบบตัวชี้แบบจำกัดใช้ตัวชี้จำนวนหนึ่งเพื่อติดตามโปรเซสเซอร์ที่กำลังแคชข้อมูล เมื่อโปรเซสเซอร์ใหม่แคชบล็อก ตัวชี้ว่างจะถูกเลือกจากกลุ่มตัวชี้เพื่อชี้ไปยังโปรเซสเซอร์นั้น มีตัวเลือกสองสามอย่างสำหรับการจัดการกรณีที่จำนวนผู้ร่วมใช้เกินจำนวนตัวชี้ว่าง วิธีหนึ่งคือการยกเลิกการใช้งานผู้ร่วมใช้รายใดรายหนึ่ง โดยใช้ตัวชี้ของผู้ใช้รายนั้นสำหรับผู้ร้องขอรายใหม่ แม้ว่าวิธีนี้อาจมีค่าใช้จ่ายสูงในกรณีที่บล็อกมีผู้อ่านจำนวนมาก เช่น ล็อก อีกวิธีหนึ่งคือการมีกลุ่มตัวชี้ว่างแยกต่างหากสำหรับบล็อกทั้งหมด วิธีนี้มักได้ผล เนื่องจากจำนวนบล็อกที่ใช้ร่วมกันโดยโปรเซสเซอร์จำนวนมากมักไม่มากนัก
สรุปเนื้อหา
ข้อมูลสำคัญจากบทความ
ข้อมูลสำคัญเกี่ยวกับ ความสอดคล้องของแคชตามไดเร็กทอรี
ใน วิศวกรรมคอมพิวเตอร์ การ รักษาความสอดคล้องของแคชแบบใช้ไดเร็กทอรี เป็น กลไกการรักษาความสอดคล้องของแคช ประเภทหนึ่งโดยใช้ไดเร็กทอรีในการจัดการแคชแทนการใช้ บัสสนูปปิ้ง...
รูปแบบเวกเตอร์บิตเต็มรูปแบบ
ในรูปแบบเวกเตอร์บิตแบบเต็ม สำหรับแต่ละ บรรทัดแคช ที่เป็นไปได้ ใน หน่วยความจำ จะใช้บิตเพื่อติดตามว่าโปรเซสเซอร์แต่ละตัวมี บรรทัด นั้นเก็บไว้ใน แคช หรือ ไม่ รูปแบบเวกเตอร์บิตแบบเต็มเป็นโครงสร้างที่ง่ายที่สุดในการใช้งาน แต่มีความสามารถในการปรับขนาดได้น้อยที่สุด...
รูปแบบเวกเตอร์บิตหยาบ
รูปแบบเวกเตอร์บิตหยาบมีโครงสร้างคล้ายกับรูปแบบเวกเตอร์บิตเต็ม แม้ว่าแทนที่จะติดตามหนึ่งบิตต่อโปรเซสเซอร์สำหรับทุกแคชไลน์ ไดเร็กทอรีจะจัดกลุ่มโปรเซสเซอร์หลายตัวเข้าเป็น โหนด โดยจัดเก็บว่าแคชไลน์นั้นถูกจัดเก็บไว้ในโหนดหรือโปรเซสเซอร์...
รูปแบบไดเร็กทอรีแบบเบาบาง
แคชจะจัดเก็บเพียงส่วนย่อยของบล็อกในหน่วยความจำหลัก ณ เวลาใดเวลาหนึ่งเท่านั้น ดังนั้น ข้อมูลส่วนใหญ่ในไดเร็กทอรีจึงเป็นของบล็อกที่ไม่ได้ถูกแคชไว้ ในรูปแบบไดเร็กทอรีแบบสปาร์ส...