ตารางเพจกำลังถูกแคชหรือไม่?


12

บนไมโครโปรเซสเซอร์ที่มีการจัดการ TLB ฮาร์ดแวร์ (พูด Intel x86-64) หาก TLB miss เกิดขึ้นและโปรเซสเซอร์กำลังเดินตารางหน้าหน่วยความจำเหล่านี้ (ชิป) เข้าถึงการเข้าถึงลำดับชั้นแคช (L1, L2 เป็นต้น) )?


ไม่มีอะไรเกี่ยวข้องกับการออกแบบอิเล็กทรอนิกส์ คำถามจะถูกปิด
Leon Heller

8
มันถามว่าชิปตัวใดทำงานอย่างไรฉันคิดว่ามันอยู่ในหัวข้อ
Olin Lathrop

5
@OlinLathrop: ฉันเห็นด้วย: ฉันคิดว่ารายละเอียดในระดับต่ำของวงจรรวมอยู่ในหัวข้อ
davidcary

ฉันต้องยอมรับว่าหากไม่มีสิ่งอื่นใดการดีบักฟังก์ชั่นของโปรเซสเซอร์ของเราเป็นขั้นตอนสำคัญในการได้รับการออกแบบระบบที่กำหนดอย่างเหมาะสม นี่ใกล้เข้ามาถึงขอบเขตของเรา แต่ดูเหมือนข้างใน
Kortuk

คำตอบ:


8

ใช่เท่าที่ฉันสามารถบอกได้เกี่ยวกับโปรเซสเซอร์ Intel x86-64 เมื่อมี TLB miss เกิดขึ้นและโปรเซสเซอร์กำลังเดินตารางหน้าหน่วยความจำแบบ off-chip เหล่านั้นจะเข้าสู่ลำดับชั้นของแคช

ฉันยังคงคลุมเครืออยู่เล็กน้อยในรายละเอียดบางอย่างและฉันหวังว่าคำตอบอื่น ๆ จะเติมให้เต็ม - ไม่มีคู่มือ Intel หรือ AMD ที่อธิบายการเดินหน้าด้วยรายละเอียดที่น่ายินดีใช่หรือไม่ ความเข้าใจของฉันคือ:

  • ที่อยู่เสมือนในการลงทะเบียนที่อยู่บางอย่างจะถูกส่งไปยัง TLB ที่รวดเร็วก่อนที่จะถูกแปลงเป็นที่อยู่ทางกายภาพ - ที่อยู่ในพีซีจะถูกส่งไปยัง L1 ITLB ที่อยู่ในการลงทะเบียนอื่น ๆ จะถูกส่งไปยัง L1 DTLB .
  • หากการค้นหาครั้งแรกนั้นพลาดระดับ TLB ที่ช้ากว่าและมีขนาดใหญ่กว่านั้นจะพยายาม (L2 TLB นี้แบ่งออกเป็น ITLB และ DTLB ด้วยหรือเป็นแคช TLB แบบรวมหรือไม่มีระดับ TLB เพิ่มเติม - L3 หรือไม่ L4)
  • หากการค้นหา TLB ล้มเหลวอย่างสมบูรณ์และ x86 และ x86-64 VHPT วอล์คเกอร์ถูกปิดใช้งาน CPU จะส่งสัญญาณข้อผิดพลาด TLB miss ซึ่งถูกดักจับโดยเคอร์เนลระบบปฏิบัติการ ความเข้าใจของฉันคือว่าในทางปฏิบัติซีพียูที่ไม่ใช่ x86 ทุกคนทำสิ่งเดียวกัน - จัดการ TLB ที่คิดถึงซอฟต์แวร์ทั้งหมด หากเปิดใช้งานโปรเซสเซอร์ x86 และ x86-64 มีตัวช่วยตาราง VHPT ที่ช่วยฮาร์ดแวร์ซึ่งจัดการขั้นตอนต่อไป (ชิป x86 และ x86-64 มีหนึ่งบิตที่ปิดใช้งาน VHPT ทั้งหมดหรือมีบิตจำนวนมากที่สามารถเปิดใช้งาน VHPT สำหรับช่วงที่อยู่บางช่วงและปิดการใช้งาน VHPT สำหรับช่วงที่อยู่อื่น ๆ ได้บิตเหล่านั้นอยู่ที่ไหน)
  • หากการค้นหา TLB ล้มเหลวโดยสิ้นเชิงที่อยู่เสมือน V1 (อาจเป็นโหมดผู้ใช้) เดิมจะถูกแปลงเป็น V2 ซึ่งเป็นที่อยู่เสมือนของรายการตารางหน้า PTE ที่เก็บหมายเลขหน้าจริงของ V1
  • เนื่องจาก V2 เป็นที่อยู่เสมือนอีกครั้ง CPU ต้องผ่านการแปลที่อยู่เสมือนกับทางกายภาพตามปกติยกเว้นว่าจะข้าม L1 และไปที่ L2
  • ฮาร์ดแวร์ค้นหาที่อยู่เสมือน V2 ใน TLB พร้อมกับดึงข้อมูล PTE นั้นจากแคช L2 (ทำดัชนีจริง)
  • เนื่องจาก V2 ไม่ใช่ที่อยู่ของคำสั่งจึงไม่ผ่านแคชคำสั่ง L1 และเนื่องจาก V2 ไม่ใช่ที่อยู่ของข้อมูลผู้ใช้ปกติจึงไม่ผ่านแคชข้อมูล L1 V2 จะถูกป้อนเข้าใน L2 unified cache (คำสั่งรวม + data + PTE cache) ดูแคช "ลำดับชั้นเช่น"
  • หากแคช L2 (หรือ L3 หรือแคชอื่น ๆ ที่มีการทำดัชนี) มี PTE ดังนั้น VHPT จะดึง PTE จากหน่วยความจำแคชและติดตั้ง PTE สำหรับ V1 ใน TLB และใช้ที่อยู่ทางกายภาพใน PTE นั้นเพื่อแปล ที่อยู่เสมือนเดิม V1 ลงในที่อยู่ RAM จริงในที่สุดก็ดึงข้อมูลหรือคำแนะนำทั้งหมดในฮาร์ดแวร์โดยไม่ได้รับความช่วยเหลือจากระบบปฏิบัติการใด ๆ
  • หากทุกระดับของแคชที่ทำดัชนีแทบล้มเหลว แต่การค้นหา TLB ที่สองนี้สำเร็จสำหรับ V2 แล้ว VHPT ดึง PTE จากแคชที่จัดทำดัชนีทางกายภาพหรือจากหน่วยความจำหลักติดตั้ง PTE สำหรับ V1 ใน TLB และที่อยู่จริงในนั้น PTE ใช้เพื่อแปลที่อยู่เสมือนจริง V1 เป็นที่อยู่ RAM จริงในที่สุดก็ดึงข้อมูลหรือคำสั่งนั้นทั้งหมดในฮาร์ดแวร์โดยไม่ได้รับความช่วยเหลือจากระบบปฏิบัติการใด ๆ
  • หากการค้นหา TLB ที่สองล้มเหลวฮาร์ดแวร์ VHPT walker จะเลิกใช้ VHPT TRANSLATION FAULT
  • เมื่อ VHPT TRANSLATION FAULT เกิดขึ้น CPU จะจับกับระบบปฏิบัติการ ระบบปฏิบัติการต้องคิดออกว่ามีอะไรผิดพลาดและแก้ไขได้บ้าง
  • (a) บางทีหน้าที่มี V2 นั้นถูกสลับไปที่ดิสก์ดังนั้น OS จึงอ่านมันเป็น RAM และเริ่มต้นคำสั่งที่ล้มเหลวอีกครั้งหรือ
  • (b) บางทีโปรแกรม buggy กำลังพยายามอ่านหรือเขียนหรือดำเนินการตำแหน่งที่ไม่ถูกต้องและระบบปฏิบัติการยุติกระบวนการหรือ
  • (c) เทคนิคอื่น ๆ อีกมากมายที่ผู้เขียนระบบปฏิบัติการใช้เพื่อใช้กลไกนี้เพื่อดักจับการเข้าถึงประเภทต่างๆ - โหลดหน้าเว็บที่มี V1 ซึ่งอาจสลับกับดิสก์ กับดักต่าง ๆ ที่ใช้ในการดีบักโปรแกรมใหม่ เพื่อจำลอง "W ^ X" บน CPU ที่ไม่สนับสนุนโดยตรง เพื่อสนับสนุนการคัดลอกเมื่อเขียน; เป็นต้น

แผนภาพในหน้า 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 พลาด"


ฉันรักคำตอบ แต่ฉันอาจเป็นหนึ่งในหลาย ๆ คนที่ไม่มีความเชี่ยวชาญที่จำเป็นในการรู้สึกสะดวกสบายให้สิ่งที่อาจ upvote สมควรสมควร ขณะที่ผู้เชี่ยวชาญรายอื่นยืนยันฉันจะให้ตัวแทนที่คุณได้รับ
Kortuk

ฉันไม่เชื่อว่าสิ่งนี้ถูกต้อง Bullet 1 + 2 เกี่ยวกับการค้นหา TLB นั้นถูกต้อง AFAICT แต่ 3 ไม่ใช่ หน้าตารางเดินบน x86 (หรือ x86-64) ไม่ได้รับการจัดการในซอฟต์แวร์ (มีข้อยกเว้นดูภายหลัง) แต่ในฮาร์ดแวร์ คือเมื่อซีพียูกำหนดว่าไม่สามารถแก้ไขที่อยู่โดยใช้ TLB ตัวมันเองจะเดินไปที่หน้าตารางเริ่มต้นที่ตารางที่ชี้โดยการลงทะเบียน CR3 เฉพาะในกรณีที่การแก้ปัญหานี้ไม่ประสบความสำเร็จมันจะเรียกใช้ตัวจัดการข้อบกพร่องของเพจของ CPU ข้อยกเว้นคือส่วนขยายการจำลองเสมือนซึ่งในบางโหมดไฮเปอร์ไวเซอร์จะแก้ไขข้อบกพร่องของเพจที่เกิดขึ้นในเกสต์
Morty

ฉันไม่คิดว่า x86 มีวิธีการอัปเดตซอฟต์แวร์ TLB ISAs ที่อนุญาตการจัดการแบบ soft-TLB มีคำแนะนำพิเศษสำหรับ SW เพื่อแก้ไขรายการ TLB แต่ฉันไม่คิดว่า x86 มีสิ่งนั้นนอกจากinvlpgจะทำให้การแคช TLB ใด ๆ เป็นโมฆะสำหรับการเพิ่ม virt ที่กำหนด หากทางแยก HW ไม่พบรายการสำหรับที่อยู่เสมือนนั้นหรือการอนุญาตของรายการนั้นไม่อนุญาตให้เข้าถึงคุณจะได้รับการ#PFยกเว้น ระบบปฏิบัติการนั้นจัดการโดยการอัปเดตตารางหน้า (อาจเกิดขึ้นหลังจากเพจจิ้งข้อมูลจากดิสก์หรือทำ copy-on-write) จากนั้นกลับมาทำงานต่อเพื่อโหลด / จัดเก็บข้อผิดพลาดจะทำงานอีกครั้งและ HW pagewalk จะประสบความสำเร็จ
Peter Cordes


4

ฉันมักจะเห็นด้วยว่าสิ่งนี้เป็นของสถาปัตยกรรมคอมพิวเตอร์ 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 ที่ไม่ต่อเนื่องกันชนิดใหม่ได้ถูกเพิ่มเข้ามาระบบปฏิบัติการบางระบบก็พังเพราะมันมีข้อสันนิษฐานโดยปริยายว่านี่ไม่ใช่การทำแคช


คอมพ์ใหม่ โค้ง. ข้อเสนอ seเริ่มต้นเพียง "3 เดือนที่ผ่านมา" ฉันคิดว่ามีรุ่นก่อนหน้านี้ที่ไม่เคยทำให้มันออกจากพื้นที่ 51 (มีผู้ติดตามไม่เพียงพอ)
Paul A. Clayton
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.