แคชฟิสิคัลและเวอร์ชวลแตกต่างกันอย่างไร


11

ฉันมีปัญหาในการเข้าใจแคชเสมือนจริง ๆ ฉันเข้าใจหน่วยความจำเสมือน

หาก CPU ต้องการเข้าถึงหน่วยความจำเท่าที่ฉันเข้าใจมันจะส่งที่อยู่เสมือนไปยัง MMU ซึ่งใช้ตารางหน้าเพื่อระบุที่อยู่หน่วยความจำกายภาพ

ตอนนี้เช่นเดียวกับที่ซีพียูส่งที่อยู่ที่แตกต่างกัน (เพียงแค่จุดสิ้นสุดของที่อยู่เสมือน) ซึ่งประกอบด้วยชุดไม่มี แท็กและออฟเซ็ตไปยังแคชซึ่งจะใช้งานได้หากอยู่ในแคช

แคชเสมือนต่างจากนี้อย่างไร

ป้อนคำอธิบายรูปภาพที่นี่


2
คุณหมายถึงแคชที่จัดทำขึ้นจริง (จัดทำดัชนี / ติดแท็กจริง) หรือไม่
Paul A. Clayton

โดยพื้นฐานแล้วฉันหมายถึงความแตกต่างระหว่างที่อยู่แคชเสมือนกับที่อยู่แคชจริงคืออะไร (ฉันอยู่ภายใต้การแสดงผลที่อยู่แคชทางกายภาพอยู่ในรูปแบบ (setno. (ดัชนี), (หมายเลขบรรทัด) แท็กและชดเชย)
OneTwo

ดูกระดาษสำรวจปี 2017ของฉันบน TLBที่ฉันพูดคุยและเปรียบเทียบสี่ตัวเลือกการกำหนดที่อยู่แคช (PIPT, VIPT, VIVT, PIVT) กับตัวเลข นี่จะตอบคำถามของคุณ แคช VIVT โดยทั่วไปจะเรียกว่าแคชเสมือน
user984260

คำตอบ:


20

มีสี่วิธีในการระบุที่อยู่แคชขึ้นอยู่กับว่าบิตที่อยู่เสมือนหรือฟิสิคัลที่ใช้สำหรับการทำดัชนีและ / หรือสำหรับการแท็ก

เนื่องจากการจัดทำดัชนีแคชเป็นเวลาที่สำคัญที่สุด (เนื่องจากวิธีทั้งหมดในชุดสามารถอ่านแบบขนานและวิธีการที่เหมาะสมที่เลือกตามการเปรียบเทียบแท็ก) แคชมักจะทำดัชนีด้วยที่อยู่เสมือนช่วยให้การทำดัชนีเริ่มต้นก่อนที่อยู่ การแปลเสร็จสมบูรณ์ อย่างไรก็ตามหากใช้บิตเพียงเล็กน้อยในหน้าออฟเซ็ตสำหรับการจัดทำดัชนี (เช่นแต่ละวิธีมีขนาดไม่ใหญ่กว่าขนาดหน้ากระดาษและโมดูโลแบบง่ายของขนาดวิธีการจัดทำดัชนี1 ) ดังนั้นการจัดทำดัชนีนี้จะใช้ที่อยู่จริง ไม่ใช่เรื่องแปลกที่ L1 จะเพิ่มความสัมพันธ์เป็นหลักเพื่อให้แคชที่ใหญ่กว่านั้นถูกทำดัชนีโดยที่อยู่จริง

ในขณะที่การจัดทำดัชนีตามที่อยู่ทางกายภาพเป็นไปได้ด้วยวิธีที่มีขนาดใหญ่กว่าขนาดหน้า (เช่นโดยการทำนายบิตที่มีนัยสำคัญมากขึ้นหรือกลไกการแปลอย่างรวดเร็วให้บิตเหล่านั้นโดยใช้ความล่าช้าของการจัดทำดัชนี ไม่ได้ทำกันทั่วไป

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

(vhints ที่ใช้โดย Pentium 4 data cache ให้ความได้เปรียบในการตอบสนองนี้โดยใช้ชุดย่อยของบิตที่อยู่เสมือนที่พร้อมใช้งานก่อนหน้านี้เพื่อเลือกวิธีการเก็งกำไร)

(ในยุคของ MMU ภายนอกที่เป็นตัวเลือกแท็กที่อยู่เสมือนอาจดึงดูดความสนใจเป็นพิเศษในการผลักดันการแปลเกือบทั้งหมดนอกการออกแบบแคช)

แม้ว่าดัชนีที่ทำดัชนีและแท็กที่ติดแท็กจริงจะมีความได้เปรียบในการตอบสนองอย่างมีนัยสำคัญ แต่พวกเขายังแนะนำศักยภาพในการใช้นามแฝงที่แผนที่เสมือนที่อยู่เดียวกันกับที่อยู่ทางกายภาพที่แตกต่างกัน (homonyms) การจัดทำดัชนีและการแท็กด้วยที่อยู่ทางกายภาพเพื่อหลีกเลี่ยงการใช้นามแฝง

ปัญหา homonym แก้ไขค่อนข้างง่ายโดยใช้ตัวระบุพื้นที่ที่อยู่ (ASIDs) (การล้างแคชเมื่อเปลี่ยนพื้นที่ที่อยู่จะรับประกันได้ว่าไม่มี homonyms แต่มีราคาค่อนข้างแพงอย่างน้อยการล้างบางส่วนจะต้องใช้เมื่อ ASID ถูกนำมาใช้ใหม่สำหรับพื้นที่ที่อยู่อื่น แต่ ASID แบบ 8 บิตสามารถหลีกเลี่ยงการล้างที่อยู่ส่วนใหญ่ การเปลี่ยนแปลงพื้นที่) โดยทั่วไป ASID จะได้รับการจัดการโดยระบบปฏิบัติการ แต่บางระบบมีการตรวจสอบฮาร์ดแวร์สำหรับการใช้ ASID ซ้ำตามที่อยู่พื้นฐานของตารางหน้า

ปัญหาคำพ้องความหมายยากต่อการแก้ไข ในแคชมิสที่อยู่ทางกายภาพของนามแฝงที่เป็นไปได้ใด ๆ จะต้องถูกตรวจสอบเพื่อตรวจสอบว่ามีชื่อแทนอยู่ในแคชหรือไม่ หากการหลีกเลี่ยงนามแฝงในการจัดทำดัชนี - โดยการทำดัชนีด้วยที่อยู่ทางกายภาพหรือโดยระบบปฏิบัติการที่รับประกันว่านามแฝงจะมีบิตเดียวกันในดัชนี (การระบายสีหน้า) - ดังนั้นจะต้องทำการตรวจสอบเพียงชุดเดียวเท่านั้น ด้วยการย้ายคำพ้องความหมายใด ๆ ที่ตรวจพบไปยังชุดที่ระบุโดยที่อยู่เสมือนที่เพิ่งใช้งานล่าสุดนามแฝงจะถูกหลีกเลี่ยงในอนาคต (จนกว่าจะมีการจับคู่ที่แตกต่างกันของที่อยู่ทางกายภาพเดียวกัน)

ในการแมปแคชที่ติดแท็กโดยตรงโดยไม่ต้องใช้นามแฝงดัชนีการทำให้เป็นเรื่องง่ายขึ้นเป็นไปได้ เนื่องจากคำพ้องความหมายที่เป็นไปได้จะขัดแย้งกับคำร้องขอและถูกขับไล่ออกดังนั้นการเขียนกลับที่จำเป็นของบรรทัดสกปรกจึงสามารถทำได้ก่อนที่จะจัดการกับแคชมิส (ดังนั้นคำพ้องจะอยู่ในหน่วยความจำ บัฟเฟอร์การเขียนกลับสามารถตรวจสอบได้ก่อนที่จะติดตั้งสายแคชที่ดึงมาจากหน่วยความจำ (หรือแคชระดับสูงกว่า) ไม่จำเป็นต้องตรวจสอบนามแฝงที่ไม่ได้แก้ไขเนื่องจากเนื้อหาหน่วยความจำจะเหมือนกับในแคชเพียงทำการจัดการโดยไม่จำเป็น วิธีนี้จะช่วยหลีกเลี่ยงความต้องการแท็กทางกายภาพเพิ่มเติมสำหรับแคชทั้งหมดและทำให้การแปลค่อนข้างช้า

หากไม่มีการหลีกเลี่ยงการรับประกันนามแฝงในดัชนีดังนั้นแม้แต่แคชที่ติดแท็กทางกายภาพก็จำเป็นต้องตรวจสอบชุดอื่น ๆ ที่อาจมีชื่อแทน (สำหรับบิตที่ไม่ใช่ทางกายภาพของดัชนีหนึ่งการตรวจสอบแคชครั้งที่สองในชุดทางเลือกเดียวอาจยอมรับได้ซึ่งจะคล้ายกับการหลอกเชื่อมโยงแบบหลอก)

สำหรับแคชที่ติดแท็กแทบจะสามารถให้แท็กที่อยู่จริงได้อีกชุด แท็กเหล่านี้จะเข้าถึงได้เฉพาะเมื่อพลาดและสามารถใช้สำหรับ I / O และการเชื่อมโยงกันของแคชแบบมัลติโปรเซสเซอร์ (เนื่องจากทั้งคำขอที่ไม่ได้รับและคำขอเชื่อมโยงกันค่อนข้างหายากการแบ่งปันนี้จึงไม่เป็นปัญหา)

Athlon ของ AMD ซึ่งใช้การติดแท็กทางกายภาพกับการจัดทำดัชนีเสมือนเป็นชุดของแท็กแยกต่างหากสำหรับโพรบการเชื่อมโยงและการตรวจหาชื่อแทน เนื่องจากบิตแอดเดรสเพียงอย่างเดียวเสมือนจริงสามตัวถูกใช้สำหรับการทำดัชนีจึงต้องมีชุดตรวจสอบเจ็ดชุดสำหรับนามแฝงที่เป็นไปได้ที่พลาด เนื่องจากสิ่งนี้สามารถทำได้ในขณะที่รอการตอบสนองจากแคช L2 นี่ไม่ได้เพิ่มเวลาแฝงและสามารถใช้แท็กชุดพิเศษสำหรับคำขอเชื่อมโยงกันซึ่งบ่อยครั้งมากขึ้นเนื่องจากการผูกขาดแคช L2

สำหรับแคช L1 ที่มีการจัดทำดัชนีขนาดใหญ่ทางเลือกในการตรวจสอบชุดเพิ่มเติมจำนวนมากจะเป็นการจัดหาแคชการแปลทางกายภาพเป็นเสมือน ใน miss (หรือ probe coherence) ที่อยู่จริงจะถูกแปลเป็นเสมือนที่อยู่ที่อาจใช้ในแคช เนื่องจากการจัดเตรียมรายการแคชการแปลสำหรับแต่ละบรรทัดแคชจะไม่สามารถใช้งานได้จึงจำเป็นต้องใช้วิธีในการทำให้บรรทัดแคชไม่ถูกต้องเมื่อการแปลถูกแปล

หากนามแฝง (อย่างน้อยที่อยู่ที่สามารถเขียนได้) รับประกันได้ว่าจะไม่เกิดขึ้นเช่นในระบบปฏิบัติการที่อยู่พื้นที่เดียวทั่วไปข้อเสียเปรียบเพียงอย่างเดียวของแคชที่จ่าหน้าคือค่าใช้จ่ายแท็กพิเศษจากข้อเท็จจริงที่ว่าที่อยู่เสมือนในระบบดังกล่าว ใหญ่กว่าที่อยู่จริง ฮาร์ดแวร์ที่ออกแบบมาสำหรับพื้นที่ที่อยู่เดียวระบบปฏิบัติการสามารถใช้บัฟเฟอร์ lookaside แทนการอนุญาตบัฟเฟอร์การแปล lookaside การหน่วงเวลาการแปลจนกว่าแคชระดับสุดท้ายจะพลาด


1ดัชนีความสัมพันธ์แบบเบ้ทำดัชนีวิธีต่าง ๆ ของแคชด้วยแฮชที่แตกต่างกันโดยยึดตามบิตมากกว่าที่จำเป็นสำหรับการทำดัชนีแบบโมดูโลที่มีขนาดเท่ากัน สิ่งนี้มีประโยชน์ในการลดความขัดแย้งที่เกิดขึ้น สิ่งนี้สามารถแนะนำปัญหานามแฝงที่จะไม่ปรากฏในแคช modulo-indexed ที่มีขนาดและความสัมพันธ์เดียวกัน


"ไม่ใช่เรื่องแปลกที่ L1 จะเพิ่มความสัมพันธ์เป็นหลักเพื่อให้แคชที่ใหญ่กว่านั้นถูกทำดัชนีโดยที่อยู่จริง" คุณหมายถึง virtual ที่นั่น? เช่นเดียวกับในการรักษาจำนวนบิตของตัวเลือกการตั้งค่าให้ต่ำพอที่จะอยู่ภายในหน้าเว็บ (และไม่จำเป็นต้องแปล) ดังนั้นแคชจึงสามารถติดแท็กเสมือนจริงที่มีการติดแท็กดัชนีเพื่อลดเวลาแฝง หรือคุณกำลังเรียกบิตเหล่านั้นด้านล่างหน้าออฟเซต "ที่อยู่ทางกายภาพ" หรือไม่
Peter Cordes

1
@PeterCordes ฉันเรียกออฟเซ็ตภายในส่วนของที่อยู่ทางกายภาพ (สำหรับบิตเหล่านั้นเสมือน === ทางกายภาพ) หากมีการเน้นความหน่วงแฝงอาจมีแนวโน้มที่จะเรียกการจัดทำดัชนีเช่นนั้น หากมีการเน้นที่การไม่มีปัญหานามแฝงอาจมีแนวโน้มที่จะเรียกการจัดทำดัชนีทางกายภาพดังกล่าว
Paul A. Clayton

ขอบคุณ คุณได้รับแจ้งเมื่อฉันติดแท็กคุณในเธรดอื่นบนstackoverflow.com/questions/33974193/หรือไม่? ฉันหวังว่าจะได้รับคำตอบจากผู้เชี่ยวชาญเกี่ยวกับแคช L2 / L3 ที่จัดทำดัชนีโดยทั่วไปหรือไม่ดังนั้นพวกเขาจึงมีขนาดใหญ่โดยไม่จำเป็นต้องมีการเชื่อมโยงขนาดใหญ่ (ฉันถือว่าใช่เพราะพวกเขาไม่ได้ตรวจสอบจนกว่าจะถึง L1 พลาดซึ่งเกิดขึ้นหลังจาก TLB ดังนั้นที่อยู่ phys จึงพร้อมใช้งาน) มีสิ่งที่น่าสงสัยอีกสองสามอย่างที่เกิดขึ้นในการสนทนาเช่นกัน
Peter Cordes
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.