เมื่อคุณดูแลจัดการ VMs ที่ทำงานบนโฮสต์การจำลองเสมือน (VMWare ESXi หรือ Hyper-V) และวิเคราะห์ปัญหาด้านประสิทธิภาพ คุณมักจะต้องเผชิญกับสถานการณ์เมื่อขนาดของหน่วยความจำที่พร้อมใช้งานใน guest OS นั้นน้อยกว่าที่ระบบปฏิบัติการเห็น (หรือถูกกำหนดให้ มัน). ตัวอย่างเช่น หน่วยความจำ 8 GB ถูกจัดสรรให้กับเครื่องเสมือน Task Manager แสดงว่า 1 GB ว่างแม้ว่ากระบวนการที่ทำงานอยู่ทั้งหมดจะใช้พื้นที่น้อยกว่า 3 GB 4 GB ที่เหลืออยู่ที่ไหน?
ตามกฎแล้ว ลักษณะการทำงานนี้เกิดจากการใช้คุณลักษณะหน่วยความจำเกินในไฮเปอร์ไวเซอร์
หน่วยความจำเกิน เป็นคุณลักษณะไฮเปอร์ไวเซอร์ที่ช่วยให้คุณสามารถจัดสรรหน่วยความจำให้กับเครื่องเสมือนได้มากกว่าที่มีอยู่บนโฮสต์จริง แต่ไม่มีการรับประกันใด ๆ ว่าหน่วยความจำที่ร้องขอทั้งหมดสามารถจัดสรรได้ในช่วงเวลาหนึ่ง การคอมมิตหน่วยความจำมากเกินไปทำให้สามารถจัดสรรเครื่องเสมือนได้หนาแน่นมากขึ้นเนื่องจากการกระจายหน่วยความจำแบบไดนามิกระหว่าง VM โดยขึ้นอยู่กับโหลดของโฮสต์ปัจจุบัน (ทรัพยากรของ VM ที่ไม่ได้ใช้งานอาจถูกแจกจ่ายระหว่างที่โหลดมากขึ้น)
กลไกหนึ่งในการนำหน่วยความจำมาใช้มากเกินไปใน VMWare คือ Memory Ballooning . ใน Hyper-V คุณลักษณะเดียวกันนี้ใช้งานโดย Dynamic Memory .
หมายเหตุ . อย่างไรก็ตาม ทั้ง VMWare และ Microsoft ใช้การบีบอัดหน่วยความจำอย่างกว้างขวางและมีประสิทธิภาพเพื่อประหยัดทรัพยากรหน่วยความจำ (นี่เป็นหนึ่งในการนำเทคโนโลยีหน่วยความจำ overcommit ไปใช้งาน)ในการคอมมิตหน่วยความจำ VMWare ESXi (การเพิ่มหน่วยความจำเสมือน) ถูกใช้งานโดย vmmemctl.sys ไดรเวอร์ (รวมอยู่ในเครื่องมือ VMware) ซึ่งสามารถจับภาพหน่วยความจำกายภาพโดยการสร้างกระบวนการปลอม (เช่นการพองบอลลูน) ในนั้นหากจำเป็น ดังนั้น จำนวนหน่วยความจำที่ถูกใช้งานจะไม่สามารถใช้งานได้กับแอปพลิเคชันอื่นใน guest OS และไฮเปอร์ไวเซอร์สามารถกระจายหน่วยความจำว่างระหว่าง VM อื่นได้ ในหน่วยความจำ Hyper-V Dynamic dmvsc.sys ใช้ไดรเวอร์จากบริการการรวม (ส่วนประกอบ Dynamic Memory VSC) การตั้งค่าหน่วยความจำมากเกินไปได้รับการจัดการโดยผู้ดูแลระบบไฮเปอร์ไวเซอร์
คุณจะตรวจจับได้อย่างไรจากภายใน guest VM ว่ามีหน่วยความจำกายภาพจริงน้อยกว่าที่ระบบปฏิบัติการของแขกเห็น
ลองพิจารณาวิธีการตรวจสอบว่ามีไดรเวอร์บอลลูนในระบบปฏิบัติการ Windows ของแขกหรือไม่ และมีขนาดเท่าใด มาวิเคราะห์ตัวอย่างนี้กัน
หน่วยความจำ 8 GB ถูกจัดสรรให้กับ VM ที่ใช้งาน Windows Server 2012 R2 ของแขก ตัวจัดการงานแสดงว่ามีการใช้หน่วยความจำ 93% (หน่วยความจำ 7.4 GB ว่างอยู่) อย่างไรก็ตาม หากคุณสรุปจำนวนหน่วยความจำที่ใช้โดยกระบวนการที่ทำงานอยู่ทั้งหมด คุณอาจได้ข้อสรุปที่ไม่คาดคิดว่ามีการใช้หน่วยความจำเพียง 2.5 GB เท่านั้น 5 GB ที่เหลืออยู่ที่ไหน? ทั้ง Task Manager และ Resource Monitor ไม่สามารถตอบคำถามนี้ได้
เพื่อให้เข้าใจว่าเกิดอะไรขึ้นกับหน่วยความจำ คุณต้องใช้ RamMap เครื่องมือโดย Mark Russinovich (ในกรณีก่อนหน้านี้ ฉันได้แสดงวิธีใช้เครื่องมือนี้เพื่อวินิจฉัยปัญหาเกี่ยวกับการใช้หน่วยความจำสูงโดย metafile บน Windows Server) ดาวน์โหลดเครื่องมือจากเว็บไซต์ของ Microsoft (https://technet.microsoft.com/en-us/library/ff700229.aspx) และเรียกใช้ด้วยสิทธิ์ของผู้ดูแลระบบ หลังจากนั้นใน จำนวนการใช้ คุณจะเห็นว่าหน่วยความจำส่วนใหญ่ (5.4 GB) ถูกใช้โดย Driver Locked วัตถุ
นี่คือหน่วยความจำที่ไฮเปอร์ไวเซอร์ครอบครองและแจกจ่ายระหว่างเครื่องเสมือนอื่น ๆ โดยใช้ไดรเวอร์บอลลูนในระบบปฏิบัติการของแขก หมายความว่าโฮสต์ไฮเปอร์ไวเซอร์มีหน่วยความจำไม่เพียงพอ หรือผู้ดูแลระบบไฮเปอร์ไวเซอร์ใช้นโยบายขีดจำกัดหน่วยความจำสำหรับ VM นี้
สถิติหน่วยความจำ VM ปัจจุบันใน Hyper-V อาจแสดงโดยตัวนับประสิทธิภาพแยกต่างหากในตัวตรวจสอบประสิทธิภาพ:
- หน่วยความจำแบบไดนามิก Hyper-V –> หน่วยความจำที่มองเห็นได้ของผู้เยี่ยมชม
- หน่วยความจำไดนามิก Hyper-V –> หน่วยความจำกายภาพ
หากต้องการปิดการทำงานนี้ ผู้ดูแลระบบไฮเปอร์ไวเซอร์ต้องปิดใช้งาน เปิดใช้งานหน่วยความจำแบบไดนามิก ตัวเลือกในการตั้งค่า Hyper-V ของ VM (หรือเพิ่มมูลค่าการจองขั้นต่ำ)
หากใช้โฮสต์ VMWare ESXi คุณสามารถจองหน่วยความจำเพิ่มเติมสำหรับเครื่องเสมือนนี้ได้ใน การตั้งค่าทรัพยากร หรือสำรองหน่วยความจำทั้งหมด – สำรองหน่วยความจำแขกทั้งหมด (ล็อคทั้งหมด)