บนไมโครโปรเซสเซอร์ที่มีการจัดการ TLB ฮาร์ดแวร์ (พูด Intel x86-64) หาก TLB miss เกิดขึ้นและโปรเซสเซอร์กำลังเดินตารางหน้าหน่วยความจำเหล่านี้ (ชิป) เข้าถึงการเข้าถึงลำดับชั้นแคช (L1, L2 เป็นต้น) )?
บนไมโครโปรเซสเซอร์ที่มีการจัดการ TLB ฮาร์ดแวร์ (พูด Intel x86-64) หาก TLB miss เกิดขึ้นและโปรเซสเซอร์กำลังเดินตารางหน้าหน่วยความจำเหล่านี้ (ชิป) เข้าถึงการเข้าถึงลำดับชั้นแคช (L1, L2 เป็นต้น) )?
คำตอบ:
ใช่เท่าที่ฉันสามารถบอกได้เกี่ยวกับโปรเซสเซอร์ Intel x86-64 เมื่อมี TLB miss เกิดขึ้นและโปรเซสเซอร์กำลังเดินตารางหน้าหน่วยความจำแบบ off-chip เหล่านั้นจะเข้าสู่ลำดับชั้นของแคช
ฉันยังคงคลุมเครืออยู่เล็กน้อยในรายละเอียดบางอย่างและฉันหวังว่าคำตอบอื่น ๆ จะเติมให้เต็ม - ไม่มีคู่มือ Intel หรือ AMD ที่อธิบายการเดินหน้าด้วยรายละเอียดที่น่ายินดีใช่หรือไม่ ความเข้าใจของฉันคือ:
แผนภาพในหน้า 2 ของ Thomas W. Barr, Alan L. Cox, Scott Rixner "การแปลแคช: ข้าม, อย่าเดิน (ตารางหน้า)" ที่ลากเส้นระหว่าง "รายการที่เก็บไว้โดย MMU cache" และ "รายการที่จัดเก็บโดย L2 data cache" (นี่อาจเป็นกระดาษที่มีประโยชน์สำหรับผู้ที่ออกแบบซีพียูใหม่ซึ่งเป็นหัวข้อในเรื่อง "การออกแบบอิเล็กทรอนิกส์" โดยสิ้นเชิง)
Stephane Eranian และ David Mosberger "หน่วยความจำเสมือนในเคอร์เนล IA-64 Linux" และ Ulrich Drepper "สิ่งที่โปรแกรมเมอร์ทุกคนควรรู้เกี่ยวกับหน่วยความจำ" (นี่อาจเป็นกระดาษที่มีประโยชน์สำหรับคนที่เขียนระบบปฏิบัติการที่จัดการกับตารางหน้า IA-64 ซึ่งเป็นหัวข้อนอกสำหรับ ED - อาจจะเป็น Stack Overflow กับ"ปฏิบัติการ - แท็กระบบ "หรือแท็ก" osdev "หรือวิกิ OSDev.org จะเป็นสถานที่ที่ดีกว่าสำหรับหัวข้อนั้น)
ตาราง A-10 ในหน้า 533 ของ Intel "คู่มือนักพัฒนาซอฟท์แวร์สถาปัตยกรรมIntel® 64 และ IA-32" "PAGE_WALKS.CYCLES ... สามารถบอกได้ว่าการเดินหน้าส่วนใหญ่พอใจกับแคชหรือทำให้แคช L2 พลาด"
invlpg
จะทำให้การแคช TLB ใด ๆ เป็นโมฆะสำหรับการเพิ่ม virt ที่กำหนด หากทางแยก HW ไม่พบรายการสำหรับที่อยู่เสมือนนั้นหรือการอนุญาตของรายการนั้นไม่อนุญาตให้เข้าถึงคุณจะได้รับการ#PF
ยกเว้น ระบบปฏิบัติการนั้นจัดการโดยการอัปเดตตารางหน้า (อาจเกิดขึ้นหลังจากเพจจิ้งข้อมูลจากดิสก์หรือทำ copy-on-write) จากนั้นกลับมาทำงานต่อเพื่อโหลด / จัดเก็บข้อผิดพลาดจะทำงานอีกครั้งและ HW pagewalk จะประสบความสำเร็จ
ฉันมักจะเห็นด้วยว่าสิ่งนี้เป็นของสถาปัตยกรรมคอมพิวเตอร์ stackexchange ไม่ใช่การแลกเปลี่ยนทางอิเล็กทรอนิกส์ แต่เนื่องจากนี่คือที่นี่:
@davidcary ถูกต้อง
ประวัติบางส่วน:
ตารางเพจ Intel x86 ไม่ได้ถูกแคชจนถึง P5 หรือ Pentium แม่นยำยิ่งขึ้นการเข้าถึงหน่วยความจำแบบตารางเพจไม่ได้ถูกแคชข้ามแคช เนื่องจากเครื่องส่วนใหญ่ในช่วงเวลานั้นเป็นการเขียนข้อมูลพวกเขาจึงได้รับค่าที่สอดคล้องกับแคช แต่พวกเขาไม่ได้สอดแนมแคช
P6, aka Pentium Pro และ AFAIK การเดินหน้าตัวประมวลผลที่ตามมาทั้งหมดได้รับอนุญาตให้เข้าถึงแคชและใช้ค่าที่ดึงมาจากแคช ดังนั้นพวกเขาจึงทำงานกับแคชเขียนกลับ (แน่นอนคุณสามารถวางตารางหน้าในหน่วยความจำที่ไม่สามารถลบได้ที่กำหนดไว้เช่นโดย MTRRs แต่นั่นเป็นการสูญเสียประสิทธิภาพอย่างมากถึงแม้ว่ามันจะมีประโยชน์สำหรับการดีบั๊กระบบปฏิบัติการ)
โดยวิธีการนี้ "การเข้าถึงหน่วยความจำแบบตารางเพจสามารถเข้าถึงแคชข้อมูล" แยกจาก "รายการตารางหน้าอาจถูกเก็บ (แคช) ใน TLB Ttranslation Lookaside Buffer)" ในเครื่องบางเครื่อง TLB เรียกว่า "แคชการแปล"
ปัญหาที่เกี่ยวข้องอีกประการหนึ่งคือโหนดภายในของตารางหน้าอาจถูกแคชไว้ในโครงสร้างข้อมูลที่มีโครงสร้างคล้าย TLB เช่น PDE-cache
ข้อแตกต่างที่สำคัญอย่างหนึ่ง: แคชข้อมูลสอดคล้องกันและสอดแนม แต่แคช TLB และ PDE ไม่ได้สอดแนมนั่นคือไม่สอดคล้องกัน บรรทัดล่างคือเนื่องจากตารางหน้าอาจถูกแคชใน TLB และแคช PDE ที่ไม่เกี่ยวข้องกันและอื่น ๆ ซอฟต์แวร์จะต้องล้างรายการแต่ละรายการหรือกลุ่มจำนวนมากอย่างชัดเจน (เช่น TLB ทั้งหมด) เมื่อรายการตารางหน้าอาจเป็นเช่นนั้น แคชถูกเปลี่ยน อย่างน้อยเมื่อมีการเปลี่ยนแปลงในลักษณะ "อันตราย" ให้เปลี่ยนจาก RW-> R-> I หรือเปลี่ยนที่อยู่
ฉันคิดว่ามันยุติธรรมที่จะพูดว่าทุกครั้งที่มีการเพิ่มแคชแบบ TLB ที่ไม่ต่อเนื่องกันชนิดใหม่ได้ถูกเพิ่มเข้ามาระบบปฏิบัติการบางระบบก็พังเพราะมันมีข้อสันนิษฐานโดยปริยายว่านี่ไม่ใช่การทำแคช