CCoW: การเพิ่มประสิทธิภาพการคัดลอกเมื่อเขียนโดยพิจารณาจากตำแหน่งเชิงพื้นที่ในปริมาณงานส่วนที่ 3
Apr 02, 2024
3. การออกแบบ CCoW
ในส่วนนี้ ก่อนอื่นเราจะแนะนำแรงจูงใจเบื้องหลังการปรับปรุงการคัดลอกเมื่อเขียน และอธิบายแนวคิดพื้นฐานของการคัดลอกเมื่อเขียนตามความครอบคลุม (CCoW) จากนั้นเราจะอธิบายวิธีที่ CCoW จับภาพบริเวณดังกล่าวภายใต้สถานการณ์ที่แตกต่างกัน และการปรับให้เหมาะสมเพื่อจับภาพบริเวณดังกล่าวด้วยค่าใช้จ่ายที่ต่ำ
หน่วยความจำคือความสามารถของผู้คนในการรับ จัดเก็บ และเรียกค้นข้อมูล ความทรงจำของผู้คนก็จะแตกต่างกันไปในสถานการณ์ที่แตกต่างกัน ในบทความนี้ เราจะสำรวจความสัมพันธ์ระหว่างหน่วยความจำในสถานการณ์ต่างๆ
ประการแรกคือสถานการณ์การเรียนรู้ การเรียนรู้เป็นวิธีการสำคัญสำหรับมนุษย์ในการได้รับความรู้และทักษะ ในกระบวนการเรียนรู้ ความจำมีบทบาทสำคัญ หากคุณมีความจำที่แข็งแกร่ง คุณจะเชี่ยวชาญความรู้ใหม่ได้เร็วขึ้นและรักษาความรู้ที่เรียนรู้ได้ง่ายขึ้น ดังนั้นในสถานการณ์การเรียนรู้ เราจำเป็นต้องทำให้การคิดของเราชัดเจนและมีสมาธิ เพื่อปรับปรุงความจำให้ดีขึ้น
ประการที่สองคือฉากการท่องเที่ยว การเดินทางทำให้เราได้สัมผัสกับวัฒนธรรมและสภาพแวดล้อมที่แตกต่างกัน ซึ่งช่วยเติมเต็มขอบเขตอันไกลโพ้นของเราอย่างมาก ในระหว่างการเดินทาง เราสามารถได้รับความรู้ทางวัฒนธรรมที่หลากหลายโดยการจดจำที่ตั้งทางภูมิศาสตร์ ผู้คน ประเพณี และข้อมูลอื่นๆ ดังนั้นในฉากการเดินทางเราจึงต้องสังเกตอย่างรอบคอบและสัมผัสประสบการณ์นั้นเพื่อพัฒนาความจำของเราให้ดียิ่งขึ้น
เป็นฉากการทำงานอีกแล้ว ในที่ทำงานเราจำเป็นต้องจัดการกับข้อมูลจำนวนมาก เช่น ข้อมูลผู้ติดต่อ งาน แผนงาน ฯลฯ หากความจำของเราไม่แข็งแรงพอก็จะส่งผลต่อประสิทธิภาพการทำงานและความสำเร็จของเรา ดังนั้น ในสถานการณ์การทำงาน เราจำเป็นต้องบันทึกและจัดระเบียบให้ดี และพยายามจำกัดขอบเขตของ "การเชื่อมต่อข้อมูล" ให้แคบลงให้มากที่สุด ด้วยวิธีนี้เราจะสามารถพัฒนาความจำของเราได้ดีขึ้น
ในที่สุดก็มีฉากชีวิต มนุษย์จำเป็นต้องจดจำสิ่งต่างๆ ในแต่ละวัน เช่น ที่อยู่ หมายเลขโทรศัพท์ งานในวันนั้น และอื่นๆ ถ้าความจำเราไม่ดีพอ ปัญหาในชีวิตก็จะตามมามากมาย ดังนั้นในฉากชีวิต เราจึงต้องฝึกความสามารถในการจดจำของเรา เราสามารถปรับปรุงความจำของเราได้โดยการสร้างการคิดเชิงเชื่อมโยงและพูดซ้ำอย่างเงียบๆ
โดยสรุป หน่วยความจำในสถานการณ์ต่างๆ มีความเกี่ยวข้องกันอย่างใกล้ชิด เราสามารถพัฒนาความจำของเราและบรรลุประสิทธิภาพที่ดีขึ้นในสถานการณ์ต่างๆ ผ่านการฝึกฝนอย่างตั้งใจและมีสมาธิ ขอให้เราดำเนินชีวิตและอาชีพที่ดีขึ้นด้วยทัศนคติในแง่ดี จะเห็นได้ว่าเราต้องปรับปรุงความจำ และ Cistanche Deserticola สามารถปรับปรุงความจำได้อย่างมาก เนื่องจาก Cistanche Deserticola ยังสามารถควบคุมความสมดุลของสารสื่อประสาท เช่น การเพิ่มระดับของอะเซทิลโคลีนและปัจจัยการเจริญเติบโต สารเหล่านี้มีความสำคัญมากต่อความจำและการเรียนรู้ นอกจากนี้ Cistanche Deserticola ยังช่วยเพิ่มการไหลเวียนของเลือดและส่งเสริมการส่งออกซิเจน ซึ่งช่วยให้สมองได้รับสารอาหารและพลังงานที่เพียงพอ ซึ่งจะช่วยปรับปรุงความมีชีวิตชีวาและความอดทนของสมอง

คลิกรู้อาหารเสริมเพื่อเพิ่มความจำ
3.1. แรงจูงใจ
ตามที่กล่าวไว้ข้างต้น กลไกการคัดลอกเมื่อเขียนมีบทบาทสำคัญในการนำคุณสมบัติหน่วยความจำเสมือนไปใช้งานในระบบปฏิบัติการสมัยใหม่ อย่างไรก็ตาม ข้อดีของมันในแง่ของพื้นที่ได้ลดลงในสภาพแวดล้อมการประมวลผลสมัยใหม่และเวิร์กโหลดที่เน้นการเขียน ซึ่งเป็นเรื่องปกติในศูนย์ข้อมูล [21,22]
เทคโนโลยีหน่วยความจำที่เกิดขึ้นใหม่ เช่น หน่วยความจำจัดเก็บข้อมูล (SCM) และหน่วยความจำถาวรช่วยเพิ่มความหนาแน่นของข้อมูลสำหรับโมดูลหน่วยความจำ ในขณะที่ลดต้นทุนต่อหน่วยข้อมูล
ปัจจุบันนี้ การสร้างโหนดที่มีหน่วยความจำขนาดใหญ่ในระดับเทราไบต์มีราคาถูกกว่าที่เคย นอกจากนี้ ผู้ให้บริการคลาวด์ยังรายงานว่าโหนดในศูนย์ข้อมูลประสบปัญหาการใช้งานหน่วยความจำเหลือน้อย ส่งผลให้หน่วยความจำไม่ได้ใช้ 40–50% [23–26] ในสถานการณ์เช่นนี้ จะเป็นไปได้ที่จะแลกเปลี่ยนพื้นที่หน่วยความจำกับประสิทธิภาพในระบบที่มีความสำคัญต่อประสิทธิภาพ [27] ข้อได้เปรียบในแง่ของประสิทธิภาพก็ลดลงเช่นกัน
ประโยชน์ด้านประสิทธิภาพของการคัดลอกเมื่อเขียนสามารถกำหนดลักษณะตามความถี่และประสิทธิภาพของการจัดการข้อบกพร่องของเพจ ในขณะที่วางไข่กระบวนการลูก สิทธิ์ในการเขียนไปยังทุกหน้าจะถูกละทิ้ง จากมุมมองของความถูกต้องเป็นสิ่งที่หลีกเลี่ยงไม่ได้ อย่างไรก็ตาม จะทำให้เกิดข้อบกพร่องของเพจบ่อยครั้งหลังจากการแยก ในการให้บริการคำขอเขียนแต่ละรายการ พายุแห่งการเขียนเพจฟอลต์นี้ไม่เพียงแต่เกิดขึ้นกับกระบวนการลูกเท่านั้น แต่ยังรวมถึงกระบวนการหลักด้วย
ที่แย่กว่านั้นคือ เวลาในการจัดการข้อบกพร่องของหน้าไม่ได้ดีขึ้นเมื่อเร็ว ๆ นี้ แต่มีแนวโน้มว่าจะนานขึ้นเนื่องจากเหตุผลด้านความปลอดภัย ในอดีต พื้นที่ที่อยู่เคอร์เนลทั้งหมดถูกแมปอย่างต่อเนื่องไปยังส่วนหนึ่งของพื้นที่ที่อยู่กระบวนการผู้ใช้
อย่างไรก็ตาม เค้าโครงพื้นที่ที่อยู่นี้อนุญาตให้กระบวนการผู้ใช้ที่เป็นอันตรายอ่านข้อมูลสำคัญในพื้นที่ที่อยู่เคอร์เนลโดยอ้อม โดยใช้ประโยชน์จากการดำเนินการเก็งกำไรในโปรเซสเซอร์ [28,29]
เพื่อบรรเทาช่องโหว่ด้านความปลอดภัยที่สำคัญดังกล่าว ระบบปฏิบัติการสมัยใหม่จึงใช้การแยกตารางเพจเคอร์เนล (KPTI) โดยทั่วไป เฉพาะส่วนที่จำกัดของพื้นที่ที่อยู่เคอร์เนลเท่านั้นที่ถูกแมปกับพื้นที่ที่อยู่ของกระบวนการ และส่วนที่เหลือของพื้นที่ที่อยู่เคอร์เนลจะถูกแมปแบบไดนามิกและยกเลิกการแมประหว่างการจัดการการขัดจังหวะและการเรียกของระบบ ซึ่งจะต้องมาพร้อมกับการฟลัชชิ่ง TLB ซึ่งจะทำให้ประสิทธิภาพของระบบลดลงอย่างมาก
ในงานนี้ เรามุ่งหวังที่จะลดค่าใช้จ่ายในการคัดลอกเมื่อเขียนโดยใช้ประโยชน์จากพื้นที่ของการอ้างอิงหน่วยความจำ ในปัจจุบัน การคัดลอกเมื่อเขียนเกิดขึ้นต่อหน้า และทุกครั้งที่เกิดข้อบกพร่องของหน้า ระบบปฏิบัติการควรเข้ามาเกี่ยวข้อง แนวคิดหลักของเราคือการลดความถี่ของการมีส่วนร่วมของระบบปฏิบัติการโดยใช้ประโยชน์จากพื้นที่เชิงพื้นที่ของการเข้าถึงหน่วยความจำ มีการเข้าถึงเพจ Ifa เพื่อเขียน ส่วนเพจใกล้เคียงก็มีแนวโน้มที่จะเข้าถึงเพื่อเขียนได้ในไม่ช้า
ดังนั้น หากเราดำเนินการคัดลอกเมื่อเขียนไม่เพียงแต่สำหรับหน้าที่ผิดพลาดเท่านั้น แต่ยังรวมถึงหน้าที่ใกล้เคียงร่วมกันด้วย (เช่น คัดลอกหน้าที่ใกล้เคียงไว้ล่วงหน้า) เราสามารถตัดจำหน่ายค่าใช้จ่ายสำหรับการคัดลอกเมื่อเขียนในระหว่างการจัดการข้อบกพร่องของหน้า อย่างไรก็ตาม เราควรระมัดระวังไม่ให้คัดลอกหน้าใกล้เคียงทั้งหมดแบบสุ่มสี่สุ่มห้า
หากหน้าที่คัดลอกถูกเขียนในภายหลัง ค่าใช้จ่ายที่เกิดขึ้นสำหรับสำเนาล่วงหน้าจะได้รับการชำระคืน อย่างไรก็ตาม หากหน้าที่คัดลอกไม่ได้ถูกเขียนในภายหลัง การคัดลอกล่วงหน้าจะมีค่าใช้จ่ายเพิ่มเติมในแง่ของเวลาและพื้นที่เท่านั้น

ดังนั้นจึงจำเป็นอย่างยิ่งที่จะต้องระบุหน้าเป้าหมายที่เหมาะสมเพื่อคัดลอก วิธีการที่คล้ายกันถูกนำมาใช้เพื่อลดค่าใช้จ่ายในการจัดการข้อผิดพลาดของหน้าให้เหลือน้อยที่สุด Linux ใช้คุณลักษณะที่เรียกว่า 'fault around' ในขณะที่จัดการกับข้อบกพร่องของเพจ Linux จะเริ่มต้นการจัดการข้อบกพร่องของเพจสำหรับเพจที่อยู่รอบๆ เพจที่มีข้อบกพร่อง [2] อย่างไรก็ตาม คุณลักษณะนี้ใช้กับข้อบกพร่องของเพจการอ่านสำหรับขอบเขตหน่วยความจำที่สำรองไฟล์เท่านั้น
เนื่องจากแนวคิดที่เสนอมุ่งเน้นไปที่การเขียนข้อบกพร่องของหน้าสำหรับหน้าที่ไม่ระบุชื่อ เราไม่สามารถโต้แย้งได้ว่าแนวทางของเราแตกต่างจากคุณลักษณะการแก้ไขข้อบกพร่อง การออกแบบที่ล้ำสมัยจำนวนมาก [12–17] ได้รับการเสนอเพื่อเพิ่มประสิทธิภาพการใช้งาน หน้าใหญ่ในระบบปฏิบัติการ
โดยทั่วไป ระบบเหล่านี้ นำเสนอโครงร่างเพื่อระบุเพจที่เหมาะสมที่สุดที่จะแปลงเป็นเพจขนาดใหญ่ และเพื่อเลื่อนระดับอย่างมีประสิทธิภาพ (เช่น แปลงเพจพื้นฐานเป็นเพจขนาดใหญ่) หรือลดระดับจาก (เช่น แปลงเพจขนาดใหญ่เป็นเพจฐาน) หน้าใหญ่
อย่างไรก็ตาม โดยไม่คำนึงถึงโครงร่างที่เสนอ การคัดลอกเมื่อเขียนจะดำเนินการในรายละเอียดของเพจพื้นฐานเท่านั้น หลังจากแบ่งเพจขนาดใหญ่ออกเป็นเพจฐานหากจำเป็น ดังนั้นคุณลักษณะด้านประสิทธิภาพการคัดลอกเมื่อเขียนจึงเหมือนกับระบบ Linux เริ่มต้นที่มีกลไก transparent huge page (THP) ในทางตรงกันข้าม รูปแบบที่เรานำเสนอนั้นมีเอกลักษณ์เฉพาะตัว โดยจะดำเนินการคัดลอกเมื่อเขียนที่รายละเอียดที่แตกต่างกันตามระดับท้องถิ่นในการเข้าถึงหน่วยความจำ
3.2. การระบุตำแหน่งเชิงพื้นที่
เพื่อให้บรรลุผลตามโครงการที่เสนอ เราควรพิจารณาประเด็นที่ท้าทายสองประเด็น ประการแรก หน้าเป้าหมายควรได้รับการระบุอย่างแม่นยำและทันท่วงที เพื่อให้ประโยชน์ของ precopy ได้สูงสุด ในขณะที่ค่าใช้จ่ายสำหรับ precopy จะลดลง
เมื่อผู้เขียนคัดลอกเพจแล้ว เพจนั้นจะไม่ทำให้เกิดข้อบกพร่องของเพจอีกต่อไป ซึ่งหมายความว่าระบบสูญเสียโอกาสในการเพิ่มประสิทธิภาพการเข้าถึงการเขียน ดังนั้นระบบควรจะสามารถคาดการณ์การใช้งานเพจในอนาคตได้ เพื่อกำหนดว่าเพจไหนควรคัดลอกและเพจใดไม่ควร ประการที่สอง การระบุเพจเป้าหมายควรมีค่าใช้จ่ายต่ำ เนื่องจาก OSscan ไม่สามารถให้การประมวลผลที่ใช้เวลานานในระบบย่อยการจัดการหน่วยความจำที่มีความสำคัญต่อประสิทธิภาพการทำงาน
ตามที่กล่าวไว้ในส่วนที่ 2 คุณลักษณะหน่วยความจำเสมือนจำนวนมากในระบบปฏิบัติการสมัยใหม่นั้นใช้กลไกการคัดลอกเมื่อเขียน ดังนั้น ค่าใช้จ่ายอาจมีมากกว่าประโยชน์ของการคัดลอกเมื่อเขียนที่ได้รับการปรับปรุงอย่างง่ายดาย หากการใช้งานโดยรวมไม่มีประสิทธิภาพเพียงพอ
เพื่อคาดการณ์อนาคตของเพจ ขั้นแรกเราจะรวบรวมประวัติของส้อมสำหรับกระบวนการของผู้ใช้ โดยเฉพาะอย่างยิ่ง ระบบปฏิบัติการจะตรวจสอบจำนวนส้อมที่แต่ละกระบวนการเรียกใช้ การนับกระบวนการที่ต่ำหมายความว่ามีโอกาสเพียงเล็กน้อยที่จะใช้ประโยชน์จากกระบวนการ และระบบปฏิบัติการไม่จำเป็นต้องติดตามข้อบกพร่องของเพจการเขียนสำหรับกระบวนการนี้อย่างสมบูรณ์
ในทางตรงกันข้าม เมื่อกระบวนการเรียกใช้การเรียกระบบ fork มากกว่าขีดจำกัด ระบบสามารถคาดหวังโอกาสในการเพิ่มประสิทธิภาพได้ สิ่งนี้เกิดขึ้นกับ Redis ซึ่งจะเรียกใช้ส้อมเป็นระยะเพื่อถ่ายภาพในหน่วยความจำหรือกับเชลล์สคริปต์ที่แยกคำสั่งบรรทัดคำสั่งหลายคำสั่ง ในการตอบสนอง ระบบจะเริ่มติดตามข้อบกพร่องของเพจสำหรับกระบวนการ

ต่อไป เราเสนอวิธีการทำนายโอกาสในการปรับให้เหมาะสมจากประวัติ โดยสมมติว่าพฤติกรรมโดยรวมของแอปพลิเคชันไม่เปลี่ยนแปลงอย่างมีนัยสำคัญ ด้วยเหตุนี้ เราจึงแบ่งพื้นที่ที่อยู่ของกระบวนการออกเป็นภูมิภาคที่มีขนาดคงที่ แต่ละภูมิภาคจะดูแลรักษาบิตแมป โดยที่แต่ละบิตจะสอดคล้องกับหน้าในภูมิภาคนั้น กระบวนการเกิดขึ้นพร้อมกับการล้างบิตแมปทั้งหมด เช่นเดียวกับพื้นที่หน่วยความจำเสมือน (VMA) ที่เพิ่งเติมข้อมูลใหม่ เมื่อพาร์เตอร์ VMA ทั้งหมดไม่ได้รับการแมป บิตแมปในช่วงที่อยู่ที่เกี่ยวข้องก็จะถูกปล่อยออกมาด้วย
บิตแมปได้รับการจัดสรรสำหรับส่วนของ VMA ที่มีการเติมข้อมูลเท่านั้น และข้อมูลเพจขนาด 14 KB จะถูกสรุปเป็นหนึ่งบิต ดังนั้น โอเวอร์เฮดของพื้นที่สำหรับบิตแมปซิสจะอยู่ที่ประมาณ 0.003% ของพื้นที่แอดเดรสที่มีประชากร ในตอนแรก การเขียนจะถูกประมวลผลผ่านการคัดลอกเมื่อเขียนตามที่เป็นอยู่
การเข้าถึงการเขียนติดอยู่กับตัวจัดการข้อบกพร่องของเพจ โดยที่รายการบิตแมปที่เกี่ยวข้องถูกตั้งค่า เมื่อเวลาผ่านไป บิตแมปจะจับการเข้าถึงภูมิภาคได้อย่างมีประสิทธิภาพ และเราสามารถวัดระดับความครอบคลุมได้ ความครอบคลุมของภูมิภาคจะคำนวณเป็นเปอร์เซ็นต์ของหน้าที่คัดลอกเมื่อเขียนจากหน้าทั้งหมดในภูมิภาค ดังนี้:
![]()
สมมติว่าระบบใช้เพจขนาด 4 KB และพื้นที่ที่อยู่ถูกแบ่งออกเป็นภูมิภาคขนาด 2 MB
จากนั้น แต่ละภูมิภาคจะมี 512 4 KB หน้า หากคัดลอก 300 หน้าในการเขียน ความครอบคลุมของภูมิภาคคือ 300/512 × 100=58.6% ยิ่งความครอบคลุมของภูมิภาคสูงเท่าใด ภูมิภาคก็จะได้รับประโยชน์จากโอกาสในการเพิ่มประสิทธิภาพของสำเนาล่วงหน้ามากขึ้นเท่านั้น ข้อมูลความครอบคลุมนี้จะถูกส่งผ่านทางแยกและใช้เป็นตัวชี้วัดเพื่อพิจารณาประโยชน์ของการคัดลอกหน้าเว็บใกล้เคียง
โดยเฉพาะอย่างยิ่ง หากขอบเขตความทรงจำมีความครอบคลุมสูง หน้าต่างๆ ในภูมิภาคนั้นมีแนวโน้มที่จะได้รับการคัดลอกเมื่อเขียนในที่สุด ดังนั้นจึงจะเป็นประโยชน์ในการคัดลอกเพจอื่น ๆ ในภูมิภาคในขณะที่ประมวลผลข้อบกพร่องของเพจการเขียนสำหรับเพจ ในขณะที่โอกาสในการเพิ่มประสิทธิภาพในการคัดลอกเพจล่วงหน้าจะมีน้อยหากความครอบคลุมต่ำ ดังนั้นเฉพาะหน้าที่ผิดพลาดเท่านั้นที่จะถูกคัดลอกเมื่อเขียนโดยตัวจัดการ pagefault
จากนี้ไป เราจะเรียกโครงการนี้ว่า Copy-on-write หรือ CCoW ตามความครอบคลุมสำหรับบทความส่วนที่เหลือ รูปที่ 1 แสดงให้เห็นแนวคิดของ CCoW มีสองภูมิภาค ภูมิภาค 0 และ 1 โดยแต่ละภูมิภาคประกอบด้วยหกหน้า
หน้าที่มีเฉดสีเขียวจะถูกเติมด้วยการคัดลอกเมื่อเขียน เมื่อกระบวนการเรียกใช้การเรียกระบบ fork ให้อนุญาตการเขียนสำหรับทุกหน้า รวมถึงหน้าสีเขียว ที่จะถูกทิ้งระหว่างทางแยก สมมติว่าเกณฑ์ในการพิจารณาภูมิภาคที่มีตำแหน่งสูงคือ 60% ในภูมิภาค 0 มีการคัดลอกสี่หน้า (หน้า 1, 2, 3 และ 4) ที่ถูกเขียนก่อนทางแยก โดยให้ความคุ้มครอง 4/6=66%
ดังนั้น ภูมิภาคนี้จึงถือว่ามีตำแหน่งเชิงพื้นที่สูงและหน้าทั้งหมดจะถูกคัดลอกเพื่อจัดการกับข้อบกพร่องของหน้าสำหรับหน้าที่ 3 โดยมีการแรเงาเป็นสีแดง ในขณะที่ภูมิภาคตอนล่างให้ความคุ้มครอง 33% เนื่องจากสองในหกหน้าได้รับการคัดลอกเมื่อเขียนก่อนที่จะแยก
ดังนั้นภูมิภาคนี้จึงมีความครอบคลุมต่ำกว่าเกณฑ์ ซึ่งบ่งบอกถึงพื้นที่เชิงพื้นที่ต่ำในภูมิภาค ดังนั้น เมื่อเข้าถึงเพจ 9 เพื่อเขียน เฉพาะเพจที่ผิดพลาดเท่านั้นที่จะถูกคัดลอกเมื่อเขียนในตัวจัดการข้อบกพร่องของเพจ เช่นเดียวกับขั้นตอนการคัดลอกเมื่อเขียนปกติ

For more information:1950477648nn@gmail.com






