Nested Virtualization ให้คุณรัน Hypervisor ภายใน Virtual Machine Windows 10 ได้นำเสนอ Nested Virtualization ไม่ว่าคุณจะต้องการหรือไม่ นี่คือข้อมูลที่น่าสนใจ
Container ใน Container: เกี่ยวกับ Nested Virtualization ใน Windows
ก่อนหน้านี้ สร้าง Parallel Containers ได้เท่าที่ RAM จะรองรับ ใช้เพื่อวัตถุประสงค์ต่างๆ Microsoft เปิดตัวฟีเจอร์ Nested Virtualization ใน Insider Build 10565 ฟีเจอร์นี้อนุญาตสร้าง Containers ภายใน Containers แม้ฟีเจอร์ยังไม่สมบูรณ์ แต่ควรทราบข้อมูลดังนี้
Virtualization ด้วย Hyper-V
Windows รองรับ Docker (ที่นี่อาจหมายถึง Docker containers) สร้าง Simple Containers ใช้แบบ Parallel หรือสร้าง Hyper-V Containers ที่ดีกว่า Simple Containers แม้สร้าง Windows Containers แบบ Parallel ได้ แต่บ่อยครั้งใช้ Libraries และ Resources ร่วมกัน ทำให้ "Bad" Containers จับ Resources ไม่ปล่อยให้ Containers อื่นใช้ นำไปสู่การแข็งตัว (Deadlock) นั่นคือข้อจำกัดที่นำไปสู่ Hyper-V Containers
Hyper-V Containers สร้างทุกอย่างแยกต่างหากสำหรับแต่ละ Virtual Environment รวมถึง OS ถูกสร้างใหม่ให้แอปที่รันใน Virtual Compartment นั้น ไม่มี Shared Virtual Resources จึงไม่มี Conflict
Nested Virtualization ใน Windows ทำได้ผ่าน Hyper-V Microsoft ระบุว่าตอนนี้ Nested Virtualization จะทำงานกับ Hyper-V Containers เท่านั้น ต้องระวัง: สร้าง Container หนึ่ง แล้วสร้างอีกตัวภายในตัวแรก ถ้าพยายาม Hypervisor อื่น หรือสร้าง Hyper-V Container แบบ Parallel กับตัวที่มีอยู่ อาจไม่ได้ ต้องสงสัย: Parallel Containers ไม่ได้ทำใน Windows แล้วหรือ? จะพูดในส่วนต่อไป
Nested Virtualization – คืออะไร และ怎么实现 (Implementation)
เหมือนที่กล่าว สร้าง Hyper-V Containerได้ Container นี้จะบล็อก Hypervisors อื่นไม่ให้เห็น มันจะปรากฏเป็น CPU และ CPU จริงอาจมองไม่เห็นจาก Hypervisors อื่น จึงไม่สามารถสร้าง Container อื่นแบบ Parallel ได้ คำถามคือ สร้าง Hyper-V Containers หลายตัวแบบ Parallel ได้ไหม? หรือสร้างได้แค่ภายใน Container ตัวแรก?
Blog ของ Microsoft ระบุ: เมื่อสร้าง Hyper-V Container แล้ว จะไม่ให้ Hypervisors อื่นติดตั้ง Hyper-V Containers เพิ่ม เพราะมองไม่เห็น Real CPU ไม่สามารถสร้าง Containers เพิ่มนอกจาก Container ที่สร้างไว้แล้ว? ตอนรัน Virtualizers อื่น จะคิดว่า Container นั้นคือ CPU จริง และสร้าง Virtual Container ภายใน Container นั้น
นั่นคือ Nested Virtualization – Containers ใน Containers – แต่ละตัวอิสระจากกัน: ไม่มี Shared Libraries หรือ Drivers 聽起來ดี แต่ยังมีข้อสงสัยเรื่อง Parallel Containers รูปภาพจาก Microsoft แสดงการทำงานของ Nested Virtualization
เรื่อง Implementation ของ Nested Virtualization มีปัจจัยหลายอย่างต้องตรวจสอบ:
- ปริมาณ RAM (จำกัด: สร้าง Containers ได้เท่าที่ RAM รองรับ)
- Processor รองรับไหม? (MS ระบุรองรับเฉพาะ Intel VT-X ตอนนี้)
- Dynamic Memory ต้องปิด
- ติดตาม Runtime Memory และอื่นๆ
ยังมีหลาย Issues Microsoft อาจแก้ในภายหลัง แต่พัฒนา PowerShell Script เรียกจาก GitHub ให้ลองได้
Windows 11/10 รองรับ Nested Virtualization ไหม?
รองรับ ทั้ง Windows 11 และ Windows 10 รองรับ Nested Virtualization สำคัญ: ไม่ใช่ฟีเจอร์ซอฟต์แวร์ แต่เป็นฟีเจอร์ฮาร์ดแวร์ ฮาร์ดแวร์คอมพิวเตอร์ต้องรองรับ SLAT (Second Level Address Translation) ถ้าไม่รองรับ จะใช้ Nested Virtualization ไม่ได้
เปิดใช้งาน Nested Virtualization ใน Windows 11/10 ยังไง?
ถ้าใช้ Hyper-V สร้าง VM อาจไม่ต้อง Enable ตั้งเพิ่ม ถ้าใช้ VirtualBox หรือ VMware สร้าง VM หาตั้งค่าที่เกี่ยวข้อง เปิดก่อนรัน VM เพื่อสร้างและใช้ VM อีกตัวภายใน Virtual OS
ดูรายละเอียดการสร้าง Nested Virtualization Containers ใน Windows 10 และเพิ่มเติมที่ MSDN Blog Post