เกิดอะไรขึ้นกับเนื้อหาแคชในการสลับบริบท


50

ในตัวประมวลผลแบบมัลติคอร์จะเกิดอะไรขึ้นกับเนื้อหาของแคชของคอร์ (เช่น L1) เมื่อมีการสลับบริบทเกิดขึ้นบนแคชนั้น

พฤติกรรมขึ้นอยู่กับสถาปัตยกรรมหรือเป็นพฤติกรรมทั่วไปตามด้วยผู้ผลิตชิปทั้งหมดหรือไม่

คำตอบ:


42

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

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

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

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

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

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


2
ข้อมูลมาก หากคุณสามารถเพิ่มตัวอย่างของวิธีการนี้ในสถาปัตยกรรมจริงมันจะดียิ่งขึ้น
JohnTortugo

2
@JohnTortugo สิ่งที่ฉันเขียนสอดคล้องอย่างใกล้ชิดกับสิ่งที่คุณสามารถทำได้บน ARMv7 (เช่น CPU ของสมาร์ทโฟนของคุณ) (สถาปัตยกรรมเดียวที่ฉันเคยเขียนรหัสการจัดการ MMU) ฉันคาดว่าแพลตฟอร์มอื่น ๆ เช่น x86 จะค่อนข้างคล้ายกัน แต่ฉันไม่สามารถเขียนเกี่ยวกับพวกเขาได้ หากคุณกำลังมองหาข้อมูลที่เป็นรูปธรรมเกี่ยวกับแพลตฟอร์มจริงวิทยาการคอมพิวเตอร์ไม่ได้เป็นเว็บไซต์ที่ถูกต้องคุณสามารถขอได้ที่กองมากเกินหรือวิศวกรรมไฟฟ้าหรือEmbeddedd (เสนอ)
Gilles 'หยุดชั่วร้าย'

10

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

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

ฮิวริสติกสามารถใช้งานได้ง่ายเหมือน LRU (ใช้น้อยที่สุดเมื่อเร็ว ๆ นี้) แต่ด้วย CPU ที่ทันสมัยฮิวริสติกส์นั้นซับซ้อนกว่ามาก

ดูคู่มือผู้พัฒนาซอฟท์แวร์สถาปัตยกรรมIntel® 64 และ IA-32 เล่มที่ 3บทที่ 11 อธิบายถึงแคชหน่วยความจำและกลไกการควบคุมแคช เอเอ็มดีมีในบทที่ 7 ของคู่มือเล่ม 2 AMD64 สถาปัตยกรรมของโปรแกรมเมอร์: การเขียนโปรแกรมระบบ สำหรับซีพียูที่ใช้ ARM นั้นดูเหมือนว่า PDF นั้นจะมีให้สำหรับลูกค้าที่ลงทะเบียนเท่านั้น


คุณสามารถให้การอ้างอิงสำหรับย่อหน้าแรกได้หรือไม่? หรือเอกสารที่เชื่อมโยงอ้างถึงปัญหานี้หรือไม่?
กราฟิลส์

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

1
@ ราฟาเอลฉันเขียนว่า "โดยทั่วไป" เพราะด้วยโปรเซสเซอร์ที่ฉันเจอแคชในตัวเองไม่มีความรู้เกี่ยวกับเธรดกระบวนการบริบท ฯลฯ มันตอบสนองต่อการเข้าถึงหน่วยความจำ หากแคชข้อมูลถูกลบทิ้งและแคชคำสั่งไม่ถูกต้องบนสวิตช์บริบทแสดงว่าระบบปฏิบัติการที่ทริกเกอร์การกระทำนี้ไม่ใช่แคช หากคุณติดตั้งระบบปฏิบัติการอื่นลักษณะการทำงานนี้อาจเปลี่ยนแปลง
uli

@Gilles ครั้งหนึ่งฉันพยายามที่จะให้คำตอบสั้น ๆ และตัดสินใจที่จะไม่เขียนเกี่ยวกับหน่วยความจำเสมือนเพราะนี่เกี่ยวข้องกับระบบปฏิบัติการในทันที และมีช่วงเวลาที่ต้องพิจารณาด้วย “ ไม่มีอะไรเปลี่ยนแปลง” อาจเป็นคำตอบสำหรับช่วงเวลาระหว่างการสลับบริบทและการเข้าถึงหน่วยความจำครั้งถัดไปเนื่องจากเนื้อหาแคชอาจไม่ถูกต้อง แต่ไม่มีการเปลี่ยนแปลงเลย
uli
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.