กลับไปหน้าบทความ

อ่าน 8 นาที

บัฟเฟอร์การค้นหาการแปล

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

บัฟเฟอร์การค้นหาการแปล

ใน การออกแบบ คอมพิวเตอร์และโปรเซสเซอร์บัฟเฟอร์การแปลแบบมองด้านข้าง ( TLB ) คือแคชหน่วย ความจำ ที่เก็บการแปลล่าสุดของที่อยู่หน่วยความจำเสมือน ไปยัง ที่อยู่หน่วย ความจำทางกายภาพใช้เพื่อลดเวลาที่ใช้ในการเข้าถึงตำแหน่งหน่วยความจำของผู้ใช้[ 1 ]อาจเรียกว่าแคชการแปลที่อยู่ เป็นส่วนหนึ่งของหน่วยจัดการหน่วยความจำ (MMU) ของชิป TLB อาจอยู่ระหว่างCPUและแคช CPUระหว่างแคช CPU และหน่วยความจำหลัก หรือระหว่างระดับต่างๆ ของแคชหลายระดับ โปรเซสเซอร์เดสก์ท็อป แล็ปท็อป และเซิร์ฟเวอร์ส่วนใหญ่มี TLB อย่างน้อยหนึ่งตัวในฮาร์ดแวร์การจัดการหน่วยความจำ และมักจะมีอยู่ในโปรเซสเซอร์ใดๆ ที่ใช้ หน่วยความจำเสมือน แบบเพจหรือแบบเซกเมนต์

บางครั้ง TLB ถูกนำไปใช้เป็นหน่วยความจำที่สามารถระบุที่อยู่ตามเนื้อหา (CAM) คีย์การค้นหา CAM คือที่อยู่เสมือน และผลการค้นหาคือที่อยู่ทางกายภาพหากที่อยู่ที่ต้องการมีอยู่ใน TLB การค้นหา CAM จะให้ผลลัพธ์ที่ตรงกันอย่างรวดเร็ว และสามารถใช้ที่อยู่ทางกายภาพที่ดึงมาเพื่อเข้าถึงหน่วยความจำได้ นี่เรียกว่า TLB hit หากที่อยู่ที่ต้องการไม่อยู่ใน TLB จะเรียกว่า miss และการแปลจะดำเนินต่อไปโดยการค้นหาในตารางเพจในกระบวนการที่เรียกว่าpage walkการค้นหาเพจใช้เวลานานเมื่อเทียบกับความเร็วของโปรเซสเซอร์ เนื่องจากเกี่ยวข้องกับการอ่านเนื้อหาของตำแหน่งหน่วยความจำหลายตำแหน่งและใช้เพื่อคำนวณที่อยู่ทางกายภาพ หลังจากที่กำหนดที่อยู่ทางกายภาพโดยการค้นหาเพจแล้ว การแมปที่อยู่เสมือนไปยังที่อยู่ทางกายภาพจะถูกป้อนลงใน TLB ตัวอย่างเช่น PowerPC 604 มี TLB แบบ set-associativeสองทางสำหรับการโหลดและจัดเก็บข้อมูล[ 2 ]โปรเซสเซอร์บางตัวมี TLB ของคำสั่งและที่อยู่ข้อมูลที่แตกต่างกัน

ภาพรวม

การทำงานทั่วไปของ TLB [ 3 ]

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

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

ในสถาปัตยกรรมฮาร์วาร์ดหรือสถาปัตยกรรมฮาร์วาร์ดที่ดัดแปลงอาจมีพื้นที่แอดเดรสเสมือนแยกต่างหากหรือฮาร์ดแวร์การเข้าถึงหน่วยความจำสำหรับคำสั่งและข้อมูล ซึ่งอาจนำไปสู่ ​​TLB ที่แตกต่างกันสำหรับแต่ละประเภทการเข้าถึง ได้แก่บัฟเฟอร์ค้นหาการแปลคำสั่ง (ITLB) และบัฟเฟอร์ค้นหาการแปลข้อมูล (DTLB) ประโยชน์ต่างๆ ได้รับการพิสูจน์แล้วด้วย TLB ข้อมูลและคำสั่งที่แยกจากกัน[ 4 ]

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

การเพิ่มประสิทธิภาพทั่วไปสำหรับแคชที่ระบุที่อยู่ทางกายภาพคือการค้นหา TLB ควบคู่ไปกับการเข้าถึงแคช ในแต่ละการอ้างอิงหน่วยความจำเสมือน ฮาร์ดแวร์จะตรวจสอบ TLB เพื่อดูว่าหมายเลขหน้าถูกเก็บไว้หรือไม่ ถ้าใช่ แสดงว่าพบ TLB แล้ว และจะทำการแปลงที่อยู่ หมายเลขเฟรมจะถูกส่งคืนและใช้ในการเข้าถึงหน่วยความจำ ถ้าหมายเลขหน้าไม่อยู่ใน TLB จะต้องตรวจสอบตารางหน้า ขึ้นอยู่กับ CPU การดำเนินการนี้สามารถทำได้โดยอัตโนมัติในฮาร์ดแวร์หรือใช้การขัดจังหวะไปยังระบบปฏิบัติการ เมื่อได้รับหมายเลขเฟรมแล้ว สามารถใช้ในการเข้าถึงหน่วยความจำได้ นอกจากนี้ เรายังเพิ่มหมายเลขหน้าและหมายเลขเฟรมลงใน TLB เพื่อให้สามารถค้นหาได้อย่างรวดเร็วในการอ้างอิงครั้งถัดไป หาก TLB เต็มแล้ว จะต้องเลือกบล็อกที่เหมาะสมสำหรับการแทนที่ มีวิธีการแทนที่ที่แตกต่างกัน เช่น LRU ( least recently used ), FIFO ( first in, first out ) เป็นต้น โปรดดูส่วน การแปลงที่อยู่ในบทความเกี่ยวกับแคชสำหรับรายละเอียดเพิ่มเติมเกี่ยวกับการระบุที่อยู่เสมือนที่เกี่ยวข้องกับแคชและ TLB

ผลกระทบต่อประสิทธิภาพการทำงาน

ผังงาน[ 5 ]แสดงการทำงานของบัฟเฟอร์การค้นหาการแปล เพื่อความง่าย จึงไม่ได้กล่าวถึงขั้นตอนข้อผิดพลาดของเพจ

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

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

หาก ชุดข้อมูลที่ใช้ในการทำงานของเพจไม่พอดีกับ TLB (Trusted Load Balancer) จะเกิด TLB thrashing ขึ้นซึ่งจะเกิด TLB miss บ่อยครั้ง โดยแต่ละเพจที่ถูกแคชใหม่จะไปแทนที่เพจที่จะถูกใช้งานอีกครั้งในไม่ช้า ทำให้ประสิทธิภาพลดลงในลักษณะเดียวกับที่เกิด thrashing ในแคชคำสั่งหรือแคชข้อมูล TLB thrashing สามารถเกิดขึ้นได้แม้ว่า จะไม่มี thrashing ในแคชคำสั่งหรือแคชข้อมูล ก็ตาม เนื่องจากแคชเหล่านี้มีขนาดต่างกัน คำสั่งและข้อมูลจะถูกแคชในบล็อกขนาดเล็ก ( cache lines ) ไม่ใช่ทั้งเพจ แต่การค้นหาที่อยู่จะทำในระดับเพจ ดังนั้น แม้ว่าชุดข้อมูลที่ใช้ในการทำงานของโค้ดและข้อมูลจะพอดีกับแคช แต่หากชุดข้อมูลเหล่านั้นถูกกระจายไปหลายเพจ ชุดข้อมูลที่ใช้ในการทำงานของที่อยู่เสมือนอาจไม่พอดีกับ TLB ทำให้เกิด TLB thrashing ดังนั้น การกำหนดขนาด TLB ที่เหมาะสมจึงต้องพิจารณาไม่เพียงแต่ขนาดของแคชคำสั่งและแคชข้อมูลที่เกี่ยวข้องเท่านั้น แต่ยังต้องพิจารณาด้วยว่าแคชเหล่านั้นถูกกระจายไปหลายเพจอย่างไร

TLB หลายตัว

เช่นเดียวกับแคช TLB อาจมีหลายระดับ ซีพียูสามารถ (และในปัจจุบันมักจะ) สร้างขึ้นด้วย TLB หลายตัว ตัวอย่างเช่น TLB L1 ขนาดเล็ก (อาจเป็นแบบ fully associative) ที่เร็วมาก และ TLB L2 ขนาดใหญ่กว่าซึ่งช้ากว่าเล็กน้อย เมื่อใช้ TLB สำหรับคำสั่ง (ITLB) และ TLB สำหรับข้อมูล (DTLB) ซีพียูอาจมี TLB สามตัว (ITLB1, DTLB1, TLB2) หรือสี่ตัว

ตัวอย่างเช่น สถาปัตยกรรมไมโคร NehalemของIntelมี L1 DTLB แบบ set associative สี่ทางที่มี 64 รายการสำหรับหน้า 4 KiB และ 32 รายการสำหรับหน้า 2/4 MiB, L1 ITLB ที่มี 128 รายการสำหรับหน้า 4 KiB โดยใช้การเชื่อมโยงแบบสี่ทางและ 14 รายการแบบ fully associative สำหรับหน้า 2/4 MiB (ทั้งสองส่วนของ ITLB ถูกแบ่งแบบคงที่ระหว่างสองเธรด) [ 7 ]และ L2 TLB แบบรวม 512 รายการสำหรับหน้า 4 KiB [ 8 ]ทั้งสองแบบเป็นการเชื่อมโยงแบบสี่ทาง[ 9 ]

TLB บางตัวอาจมีส่วนแยกกันสำหรับเพจขนาดเล็กและเพจขนาดใหญ่ ตัวอย่างเช่น สถาปัตยกรรมไมโคร Intel Skylakeแยกรายการ TLB สำหรับเพจขนาด 1 GiB ออกจากรายการสำหรับเพจขนาด 4 KiB/2 MiB [ 10 ]

TLB-การจัดการผิดพลาด

ในสถาปัตยกรรมสมัยใหม่ มีวิธีการจัดการกับข้อผิดพลาด TLB อยู่ 3 วิธี ได้แก่:

  • ด้วยการจัดการ TLB ด้วยฮาร์ดแวร์ CPU จะตรวจสอบตารางเพจ โดยอัตโนมัติ (โดยใช้ รีจิสเตอร์ CR3บนสถาปัตยกรรมx86เป็นต้น) เพื่อดูว่ามีรายการในตารางเพจที่ถูกต้องสำหรับที่อยู่เสมือนที่ระบุหรือไม่ หากมีรายการอยู่ รายการนั้นจะถูกนำเข้ามาใน TLB และจะลองเข้าถึง TLB อีกครั้ง คราวนี้การเข้าถึงจะสำเร็จ และโปรแกรมสามารถดำเนินการต่อไปได้ตามปกติ หาก CPU ไม่พบรายการที่ถูกต้องสำหรับที่อยู่เสมือนในตารางเพจ มันจะส่งข้อยกเว้นข้อผิดพลาดของเพจ ซึ่งระบบปฏิบัติการต้องจัดการ การจัดการข้อผิดพลาดของเพจมักเกี่ยวข้องกับการนำข้อมูลที่ร้องขอเข้ามาในหน่วยความจำทางกายภาพ การตั้งค่ารายการในตารางเพจเพื่อแมปที่อยู่เสมือนที่เกิดข้อผิดพลาดไปยังที่อยู่ทางกายภาพที่ถูกต้อง และดำเนินการต่อโปรแกรม ด้วย TLB ที่จัดการด้วยฮาร์ดแวร์ รูปแบบของรายการใน TLB จะไม่ปรากฏให้เห็นแก่ซอฟต์แวร์ และสามารถเปลี่ยนแปลงได้จาก CPU หนึ่งไปยังอีก CPU หนึ่งโดยไม่ทำให้ระบบปฏิบัติการสูญเสียความเข้ากันได้
  • ในการจัดการ TLB ด้วยซอฟต์แวร์ การพลาด TLB จะทำให้เกิด ข้อยกเว้น การพลาด TLBและรหัสระบบปฏิบัติการมีหน้าที่ในการตรวจสอบตารางเพจและค้นหารายการตารางเพจที่เหมาะสม จากนั้นระบบปฏิบัติการจะโหลดข้อมูลจากรายการตารางเพจนั้นลงใน TLB และเริ่มต้นโปรแกรมใหม่จากคำสั่งที่ทำให้เกิดการพลาด TLB เช่นเดียวกับการจัดการ TLB ด้วยฮาร์ดแวร์ หากระบบปฏิบัติการไม่พบการแปลที่ถูกต้องในตารางเพจ จะเกิดข้อผิดพลาดของเพจขึ้น และระบบปฏิบัติการต้องจัดการตามนั้น ชุดคำสั่งของ CPU ที่มีการจัดการ TLB ด้วยซอฟต์แวร์มีคำสั่งที่อนุญาตให้โหลดรายการลงในช่องใดก็ได้ใน TLB รูปแบบของรายการ TLB ถูกกำหนดเป็นส่วนหนึ่งของสถาปัตยกรรมชุดคำสั่ง (ISA) [ 11 ]
  • ในกรณีของ TLB ที่จัดการโดยเฟิร์มแวร์ หากเกิด TLB miss จะทำให้เกิดการแจ้งเตือนไปยังเฟิร์มแวร์ของระบบ ซึ่งมีหน้าที่ในการตรวจสอบตารางเพจและค้นหาข้อมูลในตารางเพจที่เหมาะสม คล้ายกับที่ตัวจัดการ TLB miss ทำในกรณีของ TLB ที่จัดการโดยซอฟต์แวร์ ในกรณีของ TLB ที่จัดการโดยเฟิร์มแวร์ รูปแบบของรายการใน TLB นั้นไม่สามารถมองเห็นได้โดยซอฟต์แวร์ของระบบ และสามารถเปลี่ยนแปลงได้ในแต่ละ CPU โดยไม่ทำให้ระบบปฏิบัติการเสียความเข้ากันได้

สถาปัตยกรรมMIPSระบุ TLB ที่จัดการโดยซอฟต์แวร์[ 12 ]

สถาปัตยกรรมSPARC V9อนุญาตให้ใช้งาน SPARC V9 โดยไม่มี MMU, MMU ที่มี TLB ที่จัดการโดยซอฟต์แวร์ หรือ MMU ที่มี TLB ที่จัดการโดยฮาร์ดแวร์[ 13 ]และสถาปัตยกรรม UltraSPARC 2005 กำหนดให้ใช้ TLB ที่จัดการโดยซอฟต์แวร์[ 14 ]

สถาปัตยกรรมItaniumมีตัวเลือกในการใช้ TLB ที่จัดการโดยซอฟต์แวร์หรือฮาร์ดแวร์[ 15 ]

สถาปัตยกรรมAlphaมี TLB ที่จัดการโดยเฟิร์มแวร์ โดยโค้ดการจัดการ TLB ผิดพลาดจะอยู่ในPALcodeแทนที่จะอยู่ในระบบปฏิบัติการ เนื่องจาก PALcode สำหรับโปรเซสเซอร์อาจเป็นแบบเฉพาะโปรเซสเซอร์และเฉพาะระบบปฏิบัติการ ทำให้ PALcode เวอร์ชันต่างๆ สามารถใช้งานรูปแบบตารางเพจที่แตกต่างกันสำหรับระบบปฏิบัติการต่างๆ ได้ โดยไม่จำเป็นต้องระบุรูปแบบ TLB และคำสั่งในการควบคุม TLB โดยสถาปัตยกรรม[ 16 ]

TLB ทั่วไป

นี่คือระดับประสิทธิภาพทั่วไปของ TLB: [ 17 ]

  • ขนาด: 12 บิต – 4,096 รายการ
  • เวลาตอบสนอง: 0.5 – 1 รอบสัญญาณนาฬิกา
  • โทษสำหรับการพลาด: 10 – 100 รอบนาฬิกา
  • อัตราความผิดพลาด: 0.01 – 1% (20–40% สำหรับแอปพลิเคชันที่มีข้อมูลเบาบาง/กราฟ)

อัตราวงจรหน่วยความจำที่มีประสิทธิภาพโดยเฉลี่ยถูกกำหนดเป็นรอบ โดยที่คือจำนวนรอบที่จำเป็นสำหรับการอ่านหน่วยความจำคืออัตราการพลาด และคือเวลาการเข้าถึงในรอบ หากการเข้าถึง TLB ใช้เวลา 1 รอบสัญญาณนาฬิกา การพลาดใช้เวลา 30 รอบสัญญาณนาฬิกา การอ่านหน่วยความจำใช้เวลา 30 รอบสัญญาณนาฬิกา และอัตราการพลาดคือ 1% อัตราวงจรหน่วยความจำที่มีประสิทธิภาพโดยเฉลี่ยคือ(31.29 รอบสัญญาณนาฬิกาต่อการเข้าถึงหน่วยความจำ) [ 18 ]

สวิตช์พื้นที่แอดเดรส

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

กลยุทธ์อื่นๆ หลีกเลี่ยงการล้าง TLB เมื่อมีการสลับบริบท ได้แก่: (a) ระบบปฏิบัติการที่มีพื้นที่แอดเดรสเดียวใช้การแมปเสมือนไปยังทางกายภาพเดียวกันสำหรับทุกกระบวนการ (b) CPU บางตัวมีรีจิสเตอร์รหัสกระบวนการ และฮาร์ดแวร์จะใช้รายการ TLB ก็ต่อเมื่อตรงกับรหัสกระบวนการปัจจุบันเท่านั้น

ตัวอย่างเช่น ในAlpha 21264แต่ละรายการ TLB จะถูกติดแท็กด้วยหมายเลขพื้นที่แอดเดรส (ASN) และเฉพาะรายการ TLB ที่มี ASN ตรงกับงานปัจจุบันเท่านั้นที่จะถือว่าถูกต้อง สำหรับตัวอย่างอื่น ในIntel Pentium Proแฟล็กการเปิดใช้งานเพจทั่วโลก (PGE) ในรีจิสเตอร์CR4และแฟล็กทั่วโลก (G) ของรายการไดเร็กทอรีเพจหรือตารางเพจสามารถใช้เพื่อป้องกันไม่ให้เพจที่ใช้บ่อยถูกทำให้ไม่ถูกต้องโดยอัตโนมัติใน TLB เมื่อมีการสลับงานหรือโหลดรีจิสเตอร์ CR3 ตั้งแต่สถาปัตยกรรมไมโคร Westmere ปี 2010 โปรเซสเซอร์ Intel 64 ยังรองรับ ตัวระบุบริบทกระบวนการ (PCID) 12 บิตซึ่งอนุญาตให้เก็บรักษารายการ TLB สำหรับพื้นที่แอดเดรสเชิงเส้นหลายพื้นที่ โดยใช้เฉพาะรายการที่ตรงกับ PCID ปัจจุบันสำหรับการแปลงแอดเดรส[ 20 ] [ 21 ]

ในขณะที่การล้าง TLB แบบเลือกเฉพาะส่วนสามารถทำได้ใน TLB ที่จัดการด้วยซอฟต์แวร์ แต่ใน TLB ฮาร์ดแวร์บางประเภท (เช่น TLB ในIntel 80386 ) มีเพียงตัวเลือกเดียวคือการล้าง TLB ทั้งหมดเมื่อมีการสลับพื้นที่แอดเดรส ส่วน TLB ฮาร์ดแวร์อื่นๆ (เช่น TLB ในIntel 80486และโปรเซสเซอร์ x86 รุ่นต่อมา และ TLB ใน โปรเซสเซอร์ ARM ) อนุญาตให้ล้างรายการแต่ละรายการจาก TLB โดยใช้ดัชนีแอดเดรสเสมือนได้

การล้าง TLB ถือเป็นกลไกความปลอดภัยที่สำคัญสำหรับการแยกหน่วยความจำระหว่างกระบวนการ เพื่อให้แน่ใจว่ากระบวนการหนึ่งไม่สามารถเข้าถึงข้อมูลที่เก็บไว้ในหน้าหน่วยความจำของอีกกระบวนการหนึ่งได้ การแยกหน่วยความจำมีความสำคัญอย่างยิ่งในระหว่างการสลับระหว่างกระบวนการเคอร์เนลของระบบปฏิบัติการที่มีสิทธิ์พิเศษและกระบวนการของผู้ใช้ ดังที่เน้นย้ำโดย ช่องโหว่ด้านความปลอดภัย Meltdownกลยุทธ์การบรรเทาผลกระทบ เช่นการแยกตารางหน้าเคอร์เนล (KPTI) อาศัยการล้าง TLB ที่ส่งผลกระทบต่อประสิทธิภาพอย่างมาก และได้รับประโยชน์อย่างมากจากการจัดการรายการ TLB แบบเลือกที่เปิดใช้งานโดยฮาร์ดแวร์ เช่น PCID [ 22 ]

เวอร์ชวลไลเซชันและ x86 TLB

ด้วยการเกิดขึ้นของเวอร์ชวลไลเซชันสำหรับการรวมเซิร์ฟเวอร์ ความพยายามมากมายจึงมุ่งเน้นไปที่การทำให้สถาปัตยกรรม x86 ง่ายต่อการสร้างเวอร์ชวลไลเซชันและเพื่อให้มั่นใจถึงประสิทธิภาพที่ดีขึ้นของเครื่องเสมือนบนฮาร์ดแวร์ x86 [ 23 ] [ 24 ]

โดยปกติแล้ว รายการใน x86 TLB จะไม่เกี่ยวข้องกับพื้นที่แอดเดรสเฉพาะ แต่จะอ้างอิงถึงพื้นที่แอดเดรสปัจจุบันโดยปริยาย ดังนั้น ทุกครั้งที่มีการเปลี่ยนแปลงพื้นที่แอดเดรส เช่น การสลับบริบท จะต้องล้าง TLB ทั้งหมด การรักษาแท็กที่เชื่อมโยงแต่ละรายการใน TLB กับพื้นที่แอดเดรสในซอฟต์แวร์ และการเปรียบเทียบแท็กนี้ในระหว่างการค้นหา TLB และการล้าง TLB นั้นมีค่าใช้จ่ายสูงมาก โดยเฉพาะอย่างยิ่งเนื่องจาก x86 TLB ได้รับการออกแบบให้ทำงานด้วยความหน่วงต่ำมากและทำงานในฮาร์ดแวร์ทั้งหมด ในปี 2551 ทั้งIntel ( Nehalem ) [ 25 ]และAMD ( SVM ) [ 26 ]ได้นำแท็กมาใช้เป็นส่วนหนึ่งของรายการ TLB และฮาร์ดแวร์เฉพาะที่ตรวจสอบแท็กในระหว่างการค้นหา ระบบปฏิบัติการบางระบบไม่ได้ใช้แท็กเหล่านี้อย่างเต็มที่ในทันที แต่ Linux 4.14 เริ่มใช้แท็กเหล่านี้เพื่อระบุพื้นที่แอดเดรสที่ใช้ล่าสุด เนื่องจาก PCID 12 บิต (4095 ค่าที่แตกต่างกัน) ไม่เพียงพอสำหรับงานทั้งหมดที่ทำงานบน CPU ที่กำหนด[ 27 ]

ดูเพิ่มเติม

  • บัฟเฟอร์การค้นหาการแปลเสมือนบนPatentscope
ดึงข้อมูลมาจาก " https://en.wikipedia.org/w/index.php?title=Translation_lookaside_buffer&oldid=1360129643 "

สรุปเนื้อหา

ข้อมูลสำคัญจากบทความ

ข้อมูลสำคัญเกี่ยวกับ บัฟเฟอร์การค้นหาการแปล

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

ภาพรวม

TLB (Through-Level Load) มีจำนวนช่องคงที่ที่บรรจุ รายการ ตารางเพจ และรายการตารางเซกเมนต์ รายการตารางเพจจะแมปที่อยู่เสมือนไปยัง ที่อยู่ทางกายภาพ และที่อยู่ตารางตัวกลาง ในขณะที่รายการตารางเซกเมนต์จะแมปที่อยู่เสมือนไปยังที่อยู่เซกเมนต์ ที่อยู่ตารางตัวกลาง...

ผลกระทบต่อประสิทธิภาพการทำงาน

CPU ต้องเข้าถึงหน่วยความจำหลักเมื่อเกิดข้อผิดพลาดในแคชคำสั่ง แคชข้อมูล หรือ TLB กรณีที่สาม (กรณีที่ง่ายที่สุด) คือ ข้อมูลที่ต้องการนั้น อยู่ ในแคชอยู่แล้ว แต่ข้อมูลสำหรับการแปลงจากหน่วยความจำเสมือนเป็นหน่วยความจำจริงนั้นไม่ได้อยู่ใน TLB...

TLB หลายตัว

เช่นเดียวกับแคช TLB อาจมีหลายระดับ ซีพียูสามารถ (และในปัจจุบันมักจะ) สร้างขึ้นด้วย TLB หลายตัว ตัวอย่างเช่น TLB L1 ขนาดเล็ก (อาจเป็นแบบ fully associative) ที่เร็วมาก และ TLB L2 ขนาดใหญ่กว่าซึ่งช้ากว่าเล็กน้อย เมื่อใช้ TLB สำหรับคำสั่ง (ITLB) และ TLB...