หนึ่งในงานทดสอบที่ต้องทำคือการติดตั้งบทบาทการเสมือนจริง Hyper-V บนเครื่องเสมือน Windows 10 (ใช้ได้กับ Windows Server 2016 เช่นกัน) ที่ทำงานบนโฮสต์ VMware ESXi ซึ่งหมายความว่าจำเป็นต้องเปิดใช้งานการเสมือนจริงแบบซ้อน (Nested Virtualization) ของ Hyper-V บน VMware ESXi
ความเข้าใจเกี่ยวกับการเสมือนจริงแบบซ้อน (Nested Virtualization)
Nested Virtualization ช่วยให้สามารถรันไฮเปอร์ไวเซอร์ภายในเครื่องเสมือนที่ทำงานบนไฮเปอร์ไวเซอร์อีกตัวหนึ่งได้ ใน Hyper-V รองรับการเสมือนจริงแบบซ้อนเต็มรูปแบบตั้งแต่ Windows Server 2016 / Windows 10 Anniversary Update ส่วน VMware เทคโนโลยีนี้ทำงานมานานแล้ว (ปรากฏตั้งแต่ ESXi 5.0)
ผมมีโฮสต์เสมือนจริง VMware ESXi 6.0 ที่รันเครื่องเสมือน Windows 10 1709
ปัญหา: ตัวเลือก Hyper-V ไม่สามารถเลือกได้
เมื่อพยายามติดตั้งบทบาทไฮเปอร์ไวเซอร์ Hyper-V (ชื่อคอมโพเนนต์คือ Hyper-V Hypervisor) จาก Control Panel → Programs & Features → Turn Windows features on or off ตัวเลือกนี้กลับไม่สามารถใช้งานได้ (Inactive) เหตุผลคือ:
Hyper-V cannot be installed: The processor does not have the required virtualization capabilities
ขั้นตอนที่ 1: เปิดใช้งานการเปิดเผยการเสมือนจริงด้วยฮาร์ดแวร์ให้ Guest OS
เพื่อเปิดใช้งานการเสมือนจริงแบบซ้อนสำหรับ VM นี้ที่มี Guest OS เป็น Windows 10 ให้เปิดการตั้งค่าเครื่องเสมือนโดยใช้ vSphere Web Client (VM ต้องอยู่ในสถานะ Power Off) ในส่วน CPU ให้ติ๊กถูกตัวเลือก "Expose hardware assisted virtualization to the guest OS" (ตัวเลือกนี้ไม่มีใน vCenter C# Thin Client)
หมายเหตุ ใน ESXi เวอร์ชันก่อนหน้าที่ไม่มีตัวเลือกนี้ และใน VMware Workstation แบบเดสก์ท็อป สามารถเปิดใช้งานการเสมือนจริงแบบซ้อนได้โดยการเพิ่มตัวเลือกต่อไปนี้ลงในไฟล์การตั้งค่าเครื่องเสมือน (*.vmx):
hypervisor.cpuid.v0 = "FALSE"
mce.enable = "TRUE"
vhv.enable = "TRUE"ใน VMware vSphere Client สามารถเพิ่มตัวเลือกเหล่านี้ได้ที่: Options → General → Configuration Parameters → กด Add Row เพื่อเพิ่มแถวใหม่ 2 แถว
ขั้นตอนที่ 2: แก้ไขปัญหา SLAT (Second Level Address Translation)
เริ่มเครื่องเสมือน Windows 10 และลองติดตั้งบทบาท Hyper-V อีกครั้ง ตอนนี้ Windows ไม่ได้ตรวจพบว่ากำลังรันภายในไฮเปอร์ไวเซอร์อีกตัว แต่ข้อผิดพลาดใหม่ปรากฏขึ้น:
Hyper-V cannot be installed: the processor does not support second level address translation (SLAT).
หมายความว่า นอกจากการรองรับการเสมือนจริงแล้ว CPU ของ VM ยังต้องรองรับเทคโนโลยี SLAT คือการเสมือนจริงหน่วยความจำและควบคุมโดยตรงจาก Guest OS ในศัพท์ของ Intel เรียกว่า Extended Page Tables (EPT) และ AMD เรียกว่า Rapid Virtualization Indexing (RVI)
ตรวจสอบการรองรับ SLAT
ใช้คำสั่งต่อไปนี้เพื่อตรวจสอบ:
systeminfo
ในส่วน Hyper-V Requirements ควรจะแสดงว่าไม่มีการรองรับ SLAT:
Second Level Address Translation: No
เปลี่ยนการตั้งค่า CPU/MMU Virtualization
ในส่วน CPU/MMU Virtualization ของ vSphere Web Client ให้เลือก Hardware CPU and MMU
ใน Thin vSphere Client ตัวเลือกเดียวกันอยู่ที่แท็บ Options → ส่วน CPU/MMU Virtualization ชื่อว่า 'Use Intel VT-x/AMD-V for instruction set virtualization and Intel EPT/AMD RVI for MMU virtualization'
เริ่มเครื่องเสมือน Windows 10 อีกครั้งและตรวจสอบว่า CPU รองรับ SLAT แล้ว หลังจากนั้นจึงสามารถติดตั้งคอมโพเนนต์ทั้งหมดของบทบาท Hyper-V และรันเครื่องเสมือนอื่นๆ ภายใน Windows 10 VM นี้ได้