การเติบโตของ Virtualization ที่รวดเร็ว ส่วนหนึ่งมาจากเรื่องการแบ่งปัน Resource เช่น RAM เป็นต้น ใน Hyper-V ได้ออกแบบให้แบ่ง Memory แบบ Dynamic ได้ และอีกเรื่องที่จะได้เรียนรู้คือการทำงานของ OS ตอนที่เครื่อง Boot/Start หรือ Restart มันต้องการ Memory มากเป็นช่วงเวลาสั้นๆ เมื่อเสร็จขั้น Boot มันจะคืน Memory ในส่วนที่ใช้งานแสร็จหรือไม่ต้องการแล้วออกมา หลังจากนั้น Application ก็จะดึง Memory ไปใช้งาน ซึ่งขึ้นอยู่กับว่า Application จะใช้มากหรือน้อยตามหน้าที่ของมัน ก่อนไปต่อขอพาไปทำความรู้จักกับ Hyper-V Dynamic Memory พื้นฐานกันก่อน
Hyper-V Dynamic Memory
หลักการทำงานของ Virtualization ที่มักถูกเรียกว่า Consolidation หรือการรวมหลายๆ Virtual Machine (VM) มาอยู่บน Server เดียวกัน ยิ่งสร้าง VM ได้มาก การลงทุนก็ยิ่งคุ้ม ในส่วนของ RAM (Memory) บน Server ที่มีจำนวนจำกัด เมื่อเป็นอย่างนี้ Virtualization จะจัดการปัญหานี้ได้อย่างไร? ดังนั้น ตอนนี้เราจะศึกษาเรื่องของ RAM ตามหลักแล้ว การแบ่ง RAM ให้ VM จำนวนเท่าไร ใช้วิธีประเมินเพื่อวางแผนตามความต้องการจริง ในส่วนนี้ Windows ก็มีกลไกกำหนดค่า RAM ที่เหมาะสมด้วย ทำให้ Windows รู้เองว่าตอนไหนที่ต้องการ RAM และต้องการจำนวนเท่าไร ในระบบ Virtualization ได้แบ่งได้สะดวก ทำได้แม้หลักร้อย Megabyte ไปจนถึงหลาย Gigabyte เมื่อ Application มาใช้ RAM จะมี 2 เรื่องคือ การขอใช้ (Allocate) และการคืน (Recycle) การแบ่ง RAM ใน Virtualization ให้ VM ทำได้ 2 แบบคือ
- Fix/Static ให้เป็นจำนวนคงที่ไปเลย ถ้าจะแก้ต้อง Shutdown VM
- Dynamic ให้แบบยืดหยุ่น โดยกำหนดช่วงค่า Minimum และ Maximum
เมื่อ Dynamic ปรับขนาดได้และต้องแบ่งกันเพื่อความคุ้ม จึงเป็นที่มาของ Hyper-V Dynamic Memory โดยมี Parameter ที่สำคัญคือ
1. Startup RAM | – Memory ที่แบ่งให้ VM ใช้งานในช่วงที่ Start VM – ค่า Parameter นี้ ใช้ทั้ง Fix ( ถ้า Fix จะใช้จำนวนนี้ไปตลอด) และ Dynamic (ใช้ตอน Start/Boot VM) |
2. Minimum RAM | เมื่อ VM Start เสร็จขนาดของ RAM จะถูกปรับเป็น Minimum |
3. Maximum RAM | ระหว่างการทำงาน RAM อาจเพิ่มหรือลดได้ ในช่วงของ Minimum และ Maximum |
4. Memory weight | ลำดับ Priority ของ VM ในการขอ RAM ถ้ามี RAM จะดูตรงนี้ว่าจะให้ VM ที่ Priority สูงก่อน |
5. Buffer | จำนวน RAM สำรองที่ Host แบ่งให้กับ VM หน่วยเป็น % คำนวณจาก RAM ปัจจุบันที่ VM ได้รับ |
การใช้ Dynamic Memory นั้นต้องศึกษาว่า OS ของ VM มีความสามารถ Hot-Add memory หรือการสั่งเพิ่ม/ลดขนาดของ Memory ในขณะที่เครื่องกำลังทำงานอยู่โดยไม่ต้อง reboot ได้หรือไม่ ดูได้จาก (Windows version support dynamic memory) ด้านล่าง เป็นภาพ Memory ของ Virutal Machine Setting
ภาพด้านล่างแสดงให้เห็นช่วง Start VM ช่อง Assign Memory คือ RAM ที่ VM ได้มีขนาด 2048 ในขณะที่ค่า Memory Damand มีเพียง 491 MB
ภาพด้านล่าง แสดงให้เห็นว่าเมื่อ Start เสร็จ VM จะเปลี่ยนไปใช้ค่า Minimum Memory (RAM) และ Assign Memory (RAM) มีขนาดมากกว่า Demand เนื่องจากค่า Buffer 20% แต่ตัวเลขจริงบน Hyper-V Manager อาจขยับไปบ้าง เพราะ Memory ตัวเลขเปลี่ยนบ่อย
Smart Paging File
เรารู้แล้วว่าตอนที่ VM Start หรือ Reboot มันต้องการ RAM มากเป็นเวลาสั้นๆ ในขณะที่ Minimum RAM ของ Dynamic RAM อาจไม่พอซึ่งมีผลให้เครื่องช้า จึงมี Parameter – Startup RAM ไว้ช่วยตอน Reboot ในภาพด้านล่าง แสดงให้เห็นว่า เครื่องตัวอย่างมีค่า Memory Parameter คือ Startup = 2048MB, Minimum = 512MB และ Maximum = 4096MB
จากภาพ ช่วงที่ 1 เครื่องต้องการ RAM 2048 MB เพื่อ Start VM เมื่อเสร็จแล้ว เข้าสู่การทำงานปกติในขั้นตอนที่ 2 มันจะคืน RAM แล้วไปจนเหลือแค่ค่า Minimum RAM ถ้า Host มี VM จำนวนมากใช้ RAM จนเกือบหมดแล้ว ทำให้จำนวน RAM ที่ว่างๆ เหลือน้อยกว่าค่า Startup ใน Hyper-V มีความสิ่งที่เรียกว่า Smart Paging File มันสร้างมาครั้งแรกใน Windows Server 2012 เพื่อช่วยป้องกันปัญหา Startup RAM ไม่พอ ดังนั้น Smart Paging File คือ การใช้ File บน Disk มาทำหน้าที่เป็น RAM เนื่องจาก RAM จริงๆ มีไม่พอสำหรับ Startup RAM นั่นเอง ต้องจำไว้ว่ามันไม่ใช่ Paging File ของ Windows ข้อดีของมันคือแก้ขัดเวลา RAM ไม่พอ ข้อเสียคือมันช้า การระบุ Location Folder ก็ใช้ hard disk ธรรมดานี่แหละ ไม่จำเป็นต้องเป็น SSD เพราะใช้แค่ตอน Restart
Smart Page File จะถูกใช้งานเมื่อเครื่อง Hyper-V Host อยู่ในสถานะการนี้คือ
– เมื่อ Start VM แต่ Physical RAM มีไม่พอ (เพราะเครื่องอื่นเอาไปใช้หมดแล้ว)
Hyper-V ไม่ใช้ Smart Paging File เมื่อ
– Start VM จาก Save State
– VM Migrate ข้ามเครื่อง
สรุป
Smart Page File เป็นผลต่อเนื่องมาจาก Hyper-V Dynamic Memory เรื่องนี้ทำให้เราได้เรียนรู้ว่าความคิดและวิธีแก้ปัญหาของ Microsoft เรื่องการ Start VM หรือ Boot ว่าช่วงแรก Windows/OS ต้องการ RAM มาก ทำให้ใน Hyper-V ต้องมี Paramater – Startup RAM มาช่วย Dynamic Memory อาจมีบางครั้งที่ Minimum RAM อาจพอให้เครื่อง VM ที่ต้องการใช้งาน ทำการ Start ขึ้นมาทำงานได้ แต่ตอนที่ Start ต้องการ RAM เท่ากับจำนวน Startup RAM จึงใช้ File บน Disk แก้ปัญหา RAM ไม่พอ
แถม
เรื่อง Dynamic Memory มีชื่อเรียกกลางๆ ว่า Memory Overcomitt โดยที่ VMware ทำเรื่องนี้มาก่อน ดูผิวเผินอาจดูเป็นเรื่องเดียวกัน แต่การ Implement นั้นแตกต่างกันอยากมาก พอจะสรุปได้ดังนี้
ความสามารถ | Microsoft Dynamic Memory | VMware Memory Overcommit |
แบ่ง RAM ให้ VM เกินจำนวนที่มีอยู่จริง | Hyper-V อนุญาตให้ใช้ RAM ตามที่มีอยู่จริง (Hardware is limit) | ใช้ได้ |
Requirement | VM ต้อง Support การใช้ Dynamic Memory | ไม่จำกัด |
ความสามารถนี้มีเฉพาะ VMware เท่านั้น | เห็นต่าง ไม่จำเป็นต้องทำ เพราะทำแล้วมีผลกระทบต่อ Performance และคิดว่า RAM ราคาถูกลง | – Tranparent Page Sharing – Memory compression |