CCoW: การเพิ่มประสิทธิภาพการคัดลอกเมื่อเขียนโดยพิจารณาจากตำแหน่งเชิงพื้นที่ในปริมาณงานส่วนที่ 2

Apr 02, 2024

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

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

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

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

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

increase brain power

คลิกรู้วิธีปรับปรุงการทำงานของสมอง

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

โดยปกติแล้ว TLB ของสถาปัตยกรรมสมัยใหม่สามารถเก็บได้ประมาณ 500 ถึง 2,000 รายการ [6,7] รายการจะถูกจัดทำดัชนีโดยฮาร์ดแวร์เพื่อให้แกนประมวลผลสามารถค้นหาการแปลได้อย่างรวดเร็ว ด้วยการใช้ประโยชน์จากพื้นที่ของการอ้างอิงหน่วยความจำ การแปลที่อยู่จำนวนมากสามารถทำได้โดยไม่ต้องผ่านตารางเพจ (เรียกว่า TLB Hit)

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

เพื่อเอาชนะข้อจำกัดนี้ สถาปัตยกรรมบางอย่างสนับสนุนขนาดเพจเพิ่มเติมที่ใหญ่กว่าขนาดของเพจฐาน 4 KB ตัวอย่างเช่น สถาปัตยกรรม Intel สมัยใหม่รองรับขนาดเพจ 2 MB และ 1 GB [7] ด้วยขนาดหน้าที่ใหญ่เช่นนี้ การแปลที่อยู่เดียวสามารถครอบคลุมช่วงที่อยู่ที่กว้างขึ้น เพิ่มความครอบคลุมอย่างมีประสิทธิภาพที่ TLB สามารถให้ได้ด้วยจำนวนรายการเท่ากัน

ตัวอย่างเช่น ระบบที่มีรายการ 1,024 TLB และขนาดเพจพื้นฐาน 4 KB สามารถให้ความครอบคลุม TLB ได้ที่ 4 MB ในขณะที่จำนวนรายการเท่ากันที่มีเพจขนาดใหญ่ 1 GB จะให้การครอบคลุม 1 TB Linux ใช้เพจขนาดใหญ่ในรูปแบบของเพจขนาดใหญ่แบบโปร่งใส (THP) ตามชื่อที่แนะนำ Linux จัดเตรียมกระบวนการผู้ใช้ด้วยหน้าขนาดใหญ่โดยปริยายทุกครั้งที่เป็นไปได้

หากไม่ได้เปิดใช้งาน THP Linux จะจัดสรรหน่วยความจำให้กับกระบวนการในหน่วยเพจพื้นฐานขนาด 4 KB หากเปิดใช้งาน THP Linux จะพยายามจัดสรรเพจขนาดใหญ่ (ขนาด 2 MB) แทนเพจฐาน เพื่อให้สามารถแมปเพจแบบหยาบได้ รายละเอียดขนาดใหญ่นี้ช่วยให้สามารถแบ่งปันเพจได้อย่างมีประสิทธิภาพระหว่างกระบวนการหลักและลูกผ่านทางแยก ในกรณีที่ไม่สามารถจัดสรรเพจจำนวนมากได้ในขณะนี้ Linux จะถอยกลับไปใช้การจัดสรรเพจหลัก Linux จะสแกนพื้นที่ที่อยู่ของกระบวนการเป็นระยะๆ เพื่อค้นหาหน้าฐานและรวมเป็นหน้าขนาดใหญ่

improve your memory

มีการศึกษาที่พยายามส่งเสริมเพจขนาดใหญ่เพื่อประสิทธิภาพในขณะที่ปกปิดข้อบกพร่องเพิ่มเติม Ingens [12,13] เสนอให้เตรียมหน้าขนาดใหญ่แบบอะซิงโครนัสนอกเส้นทางวิกฤติ

Hawkeye [14] นำเสนอแผนการเลื่อนระดับเพจขนาดใหญ่แบบละเอียดโดยอิงตามรูปแบบการเข้าถึงหน่วยความจำ เพื่อเพิ่มประสิทธิภาพสูงสุดด้วยการเลื่อนระดับเพจจำนวนน้อยที่สุด จู้และคณะ [15] สรุปกระบวนการใช้เพจขนาดใหญ่ และเพิ่มประสิทธิภาพวงจรชีวิตของเพจขนาดใหญ่ ส่วนและคณะ [16] อนุญาตให้มีช่องโหว่ในหน้าขนาดใหญ่ ให้ความยืดหยุ่นในการจัดการหน่วยความจำสำหรับหน้าขนาดใหญ่

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

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

ดังนั้น ในการจัดการ CoW บนเพจขนาดใหญ่ หน้าขนาดใหญ่จะถูกแบ่งออกเป็นเพจพื้นฐาน และคัดลอกเฉพาะเพจที่ผิดพลาดเท่านั้น การแบ่งหน้าขนาดใหญ่ใช้เวลานานพอสมควร ส่งผลให้มีการจัดการข้อผิดพลาดของหน้ายาวเป็นระยะๆ ในแง่นี้ แอปพลิเคชันบางตัว แม้แต่แอปพลิเคชันที่ใช้หน่วยความจำมาก ก็ไม่แนะนำให้ใช้เพจขนาดใหญ่เพื่อประสิทธิภาพที่เสถียรและการใช้หน่วยความจำ [4,18]

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

improving brain function

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

2.2. ทางแยกและการคัดลอกเมื่อเขียน

Fork เป็นหนึ่งในการเรียกระบบมาตรฐาน POSIX เพื่อสร้างกระบวนการใหม่ เมื่อกระบวนการเรียกใช้การเรียกของระบบ fork กระบวนการใหม่จะถูกสร้างขึ้นเป็นลูกของกระบวนการที่เรียก

ภายใต้ประทุนระบบปฏิบัติการจะสร้างกระบวนการลูกโดยการทำซ้ำพื้นที่ที่อยู่ทั้งหมดของกระบวนการโทร นี่หมายความว่ากระบวนการลูกควรเริ่มต้นด้วยข้อมูลเดียวกันกับกระบวนการหลัก

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

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

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

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

Kernel Same-Page Merging (KSM) เป็นเทคนิคในการขจัดความซ้ำซ้อนของเพจเดียวกันในระบบ ระบบปฏิบัติการจะสแกนหน้าต่างๆ ในระบบเพื่อระบุหน้าที่มีข้อมูลที่เหมือนกัน เมื่อพบเพจดังกล่าว ระบบปฏิบัติการจะเรียกคืนทั้งหมดยกเว้นเพจเดียวและอัพเดตตารางเพจที่เกี่ยวข้องเพื่อแชร์เพจที่เหลือ

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

Redis หนึ่งในบริการจัดเก็บคีย์-ค่าในหน่วยความจำยอดนิยม [4] ก็เป็นหนึ่งในกรณีดังกล่าว [19] Redisis ได้รับการออกแบบมาเพื่อเก็บข้อมูลไว้ในหน่วยความจำเป็นหลักเพื่อให้มีปริมาณงานสูงและมีความหน่วงต่ำ

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

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

กระบวนการดั้งเดิมสามารถสร้างสแน็ปช็อตอื่นได้ในลักษณะเดียวกัน และเมื่อระบบขัดข้อง Redis สามารถกู้คืนได้โดยการอ่านสแน็ปช็อตล่าสุด แม้ว่าทางแยกจะเป็นการเรียกระบบอันล้ำค่า แต่โอเวอร์เฮดก็ถูกวิพากษ์วิจารณ์

supplements to boost memory

บาวมันน์ และคณะ [20] วิเคราะห์ทางแยกและพบว่าทางแยกทำให้ประสิทธิภาพลดลงในแอปพลิเคชันสมัยใหม่ ตัวอย่างเช่น เมื่อแอปพลิเคชันสมัยใหม่มีความซับซ้อนมากขึ้น ระบบปฏิบัติการควรพิจารณากรณีพิเศษประมาณ 25 กรณีเพื่อเริ่มการประมวลผลการเรียกระบบ fork เพื่อให้สอดคล้องกับข้อกำหนด POSIX พวกเขาสรุปปัญหาของการเรียกระบบ fork และแนะนำคุณสมบัติที่การเรียกระบบ fork ควรมีสำหรับคอมพิวเตอร์สมัยใหม่

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


For more information:1950477648nn@gmail.com

คุณอาจชอบ