ในเดือนนี้ วิศวกรของ Google ได้เริ่มโพสต์แพตช์ใหม่สำหรับระบบย่อยการจัดการหน่วยความจำ Linux และส่วนประกอบที่เกี่ยวข้องสำหรับฟีเจอร์ที่เรียกว่า Working Set Reporting
ฟังก์ชันการรายงานชุดการทำงานสร้างขึ้นจาก MGLRU และมีวัตถุประสงค์เพื่อจัดการกับ VM หรือคอนเทนเนอร์ที่มีความมุ่งมั่นมากเกินไป ชุดโปรแกรมแก้ไข RFC ล่าสุดสรุปสิ่งต่างๆ ดังนี้:
พื้นหลัง
==========
สำหรับทั้งไคลเอ็นต์และเซิร์ฟเวอร์ เวิร์กโหลดสามารถคอนเทนเนอร์ด้วยเครื่องเสมือน คอนเทนเนอร์ kubernetes หรือ memcgs ปริมาณงานแตกต่างกันระหว่างเซิร์ฟเวอร์และไคลเอนต์งานเซิร์ฟเวอร์มีรอยเท้าหน่วยความจำที่คาดเดาได้มากกว่า และกังวลเกี่ยวกับความเสถียรและประสิทธิภาพ เทคนิคหนึ่งคือการเรียกคืนเชิงรุก ซึ่งจะเรียกคืนหน่วยความจำก่อนแรงดันหน่วยความจำ และทำให้เห็นจำนวนหน่วยความจำว่างจริงในเครื่อง
แอปพลิเคชันของไคลเอ็นต์จะระเบิดอย่างรวดเร็วและคาดเดาไม่ได้ เนื่องจากแอปพลิเคชันจะตอบสนองต่อการโต้ตอบของผู้ใช้ ระบบจำเป็นต้องตอบสนองต่อเหตุการณ์ที่น่าสนใจอย่างรวดเร็วและตระหนักถึงการใช้พลังงาน
เครื่องจักรที่ทำงานหนักเกินไปสามารถปรับขนาดรอยเท้าของคอนเทนเนอร์ได้ ผ่าน memory.max/high, virtio-balloon เป็นต้น
อุปกรณ์บอลลูนเป็นกลไกทั่วไปสำหรับการแบ่งปันหน่วยความจำระหว่าง VM ของผู้เยี่ยมชมและโฮสต์ ซึ่งมีประโยชน์อย่างยิ่งในสถานการณ์ multi-VM ที่หน่วยความจำมี overcommit และจำเป็นต้องมีการเปลี่ยนแปลงไดนามิกกับขนาดหน่วยความจำ VM เมื่อเวิร์กโหลดเปลี่ยนแปลงบนระบบ ขณะนี้อุปกรณ์บอลลูนมีคุณสมบัติหลายอย่างที่ช่วยในการแบ่งปันทรัพยากรหน่วยความจำระหว่างแขกและโฮสต์ (เช่น คำใบ้หน้าฟรี สถิติ การรายงานหน้าฟรี) สำหรับโปรแกรมโฮสต์คอนโทรลเลอร์ที่ได้รับมอบหมายให้เพิ่มประสิทธิภาพทรัพยากรหน่วยความจำในสภาพแวดล้อมแบบหลาย VM จะต้องใช้เครื่องมือเหล่านี้เพื่อตอบคำถามสองข้อ:1. เวลาที่เหมาะสมในการปรับเปลี่ยนบอลลูนคือเวลาใด?
2. ควรเปลี่ยนลูกโป่งด้วยราคาเท่าไหร่?โครงการแรกในการพัฒนาความสามารถ”บอลลูนอัตโนมัติ”เสร็จสิ้นในปี 2013 เมื่อไม่นานมานี้ มีการสร้างอุปกรณ์ VIRTIO เพิ่มเติม (virtio-mem, virtio-pmem) ซึ่งมีเครื่องมือเพิ่มเติมสำหรับตัวเลข ของกรณีการใช้งานซึ่งแต่ละข้อดีและข้อเสีย ข้อเสนอก่อนหน้านี้เพื่อขยาย MGLRU ด้วยอินเทอร์เฟซชุดการทำงานเน้นที่กรณีการใช้งานเซิร์ฟเวอร์ แต่ใช้ไม่ได้กับไคลเอนต์
ข้อเสนอ
==========
โครงสร้างการรายงานชุดการทำงานแบบรวมที่ทำงานสำหรับทั้งเซิร์ฟเวอร์และไคลเอ็นต์ มันเกี่ยวข้องกับฮิสโตแกรมต่อโหนดบนโฮสต์ ฮิสโตแกรมต่อ memcg และส่วนขยายไดรเวอร์ virtio-balloonมีสองวิธีในการทำงานกับการรายงานชุดการทำงาน: ตามเหตุการณ์และการสอบถาม โฮสต์คอนโทรลเลอร์สามารถรับการแจ้งเตือนจากการเรียกคืน ซึ่งสร้างรายงาน หรือคอนโทรลเลอร์สามารถค้นหาฮิสโตแกรมได้โดยตรง
แพตช์ 1 แนะนำกลไกการรายงาน Working Set และอินเทอร์เฟซโฮสต์ ดูส่วนรายละเอียดสำหรับ
แพตช์ 2 ขยายโปรแกรมควบคุม virtio-balloon พร้อมการรายงานชุดการทำงาน
RFC เริ่มต้นสร้างขึ้นจาก MGLRU และมีวัตถุประสงค์เพื่อเป็นหลักฐานของแนวคิดสำหรับการอภิปรายและการปรับแต่ง ที.เจ. และฉันมีเป้าหมายที่จะสนับสนุน LRU ที่ใช้งาน/ไม่ใช้งานและการประเมินชุดการทำงานจากพื้นที่ผู้ใช้ เรากำลังทำงานกับสคริปต์สาธิตและรับตัวเลขบางส่วนด้วย
นอกเหนือจากการเปลี่ยนแปลงการจัดการหน่วยความจำเคอร์เนลของ Linux แล้ว ยังมี แพทช์ QEMU สำหรับ VirtIO Balloon เพื่อเพิ่มคุณลักษณะการรายงานชุดการทำงาน
“กรณีการใช้งานคือโฮสต์ที่มีหน่วยความจำมากเกินไปและ VM อย่างน้อย 1 เครื่อง เป้าหมายคือการได้รับข้อมูลที่ทันเวลาและแม่นยำเกี่ยวกับการใช้หน่วยความจำโดยรวม เพื่อกระตุ้นกิจกรรมการเรียกคืนที่เหมาะสม เนื่องจากในอุปกรณ์ไคลเอ็นต์บางตัวจะใช้ กรณีที่ VM อาจต้องการหน่วยความจำโดยรวมจำนวนมากในช่วงระยะเวลาหนึ่ง แต่จากนั้นเข้าสู่ช่วงเวลาที่ไม่มีเสียงซึ่งส่งผลให้มี Cold Page จำนวนมากใน Guest
ขณะนี้อุปกรณ์บอลลูนมีคุณสมบัติมากมายที่จะ ช่วยในการแบ่งปันทรัพยากรหน่วยความจำระหว่างผู้เยี่ยมชมและโฮสต์ (เช่น คำแนะนำหน้าฟรี สถิติ การรายงานหน้าฟรี) ดังที่กล่าวไว้ในสไลด์ 12 ใน [1] บอลลูนไม่มีกลไกที่ดีในการเรียกคืนแคชของผู้เยี่ยมชม กรณีการใช้งานของเรามีทั้งแคชเพจทั่วไป และ”แคชของแอปพลิเคชัน”พร้อมหน่วยความจำที่ควรทิ้งในช่วงเวลาที่หน่วยความจำทั้งระบบมีแรงกดดัน ในบางกรณี virtio-pmem สามารถเป็นวิธีการสำหรับโฮสต์ควบคุมแคชของแขก แต่ก็มี ผลกระทบด้านความปลอดภัยที่ไม่พึงประสงค์”
จากนั้นยังมี เสนอการอัปเดตข้อมูลจำเพาะ VirtIO ที่ส่งออกไปเมื่อสัปดาห์ที่แล้วเพื่อการอภิปราย
หรือเพื่อให้เห็นภาพรวมได้ง่ายขึ้นของฟังก์ชันการรายงานชุดการทำงานนี้ วิศวกรของ Google ที่เกี่ยวข้องได้แชร์สไลด์จาก LSF/MM/BPF 2023 ของพวกเขาเพื่อพูดคุยเกี่ยวกับคุณลักษณะที่เสนอนี้:
การแจ้งเตือน กลไกสำหรับรายงานรายงานชุดการทำงานยังคงอยู่ระหว่างการพัฒนา เป็นเรื่องที่น่าสนใจอย่างยิ่งที่จะได้เห็นสิ่งที่เกิดขึ้นจากโครงการริเริ่มการรายงานชุดการทำงานนี้