Một trong các nhiệm vụ kiểm tra yêu cầu cài đặt vai trò ảo hóa Hyper-V trên máy ảo Windows 10 (cũng áp dụng cho Windows Server 2016) chạy trên host VMware ESXi. Điều này có nghĩa là tôi cần cung cấp ảo hóa lồng nhau (nested virtualization) cho Hyper-V trên VMware ESXi.
Khái niệm ảo hóa lồng nhau
Ảo hóa lồng nhau cho phép chạy một hypervisor bên trong máy ảo đang chạy trên hypervisor khác. Trong Hyper-V, hỗ trợ đầy đủ cho ảo hóa lồng nhau xuất hiện từ Windows Server 2016 / Windows 10 Anniversary Update. Còn VMware đã hỗ trợ công nghệ này từ lâu (xuất hiện từ ESXi 5.0).
Tôi có host ảo hóa VMware ESXi 6.0 chạy máy ảo Windows 10 1709.
Vấn đề khi cài đặt Hyper-V
Khi cố gắng cài đặt vai trò hypervisor Hyper-V (thành phần gọi là Hyper-V Hypervisor) từ Control Panel → Programs & Features → Turn Windows features on or off, tùy chọn này bị vô hiệu hóa. Lý do là:
Hyper-V cannot be installed: The processor does not have the required virtualization capabilities

Bật ảo hóa lồng nhau cho máy ảo
Để bật ảo hóa lồng nhau cho VM với hệ điều hành khách Windows 10, hãy mở cài đặt máy ảo bằng vSphere Web Client (VM phải tắt). Trong mục CPU, chọn tùy chọn "Expose hardware assisted virtualization to the guest OS" (Tùy chọn này không có trong vCenter C# thin client).

Lưu ý. Trên các phiên bản ESXi cũ không có tùy chọn này và trên VMware Workstation desktop, bạn có thể bật ảo hóa lồng nhau bằng cách thêm các tùy chọn sau vào file cấu hình máy ảo (*.vmx):
hypervisor.cpuid.v0 = "FALSE"
mce.enable = "TRUE"
vhv.enable = "TRUE"

Trong VMware vSphere Client, các tùy chọn này có thể thêm tại: Options → General → Configuration Parameters. Thêm hai hàng mới với cùng tham số (Add Row).

Lỗi thứ hai: Thiếu hỗ trợ SLAT
Khởi động máy ảo Windows 10 và thử cài đặt vai trò Hyper-V lại. Lúc này Windows không còn phát hiện nó đang chạy trong hypervisor khác, nhưng xuất hiện lỗi mới:
Hyper-V cannot be installed: the processor does not support second level address translation (SLAT).
Điều này nghĩa là bên cạnh hỗ trợ ảo hóa, bộ xử lý VM phải hỗ trợ công nghệ SLAT (Second Level Address Translation), tức là ảo hóa các trang bộ nhớ và kiểm soát trực tiếp bởi hệ điều hành khách. Với Intel, tính năng này gọi là Extended Page Tables (EPT), AMD gọi là Rapid Virtualization Indexing (RVI).

Kiểm tra hỗ trợ SLAT
Đảm bảo bộ xử lý (vCPU) hỗ trợ SLAT bằng lệnh:
systeminfo
Kết quả trong phần Hyper-V Requirements sẽ trả về không hỗ trợ SLAT:
Second Level Address Translation: No

Cấu hình bộ xử lý ảo để hỗ trợ SLAT
Trong trường hợp này, cần thay đổi tham số bộ xử lý máy ảo. Trong mục CPU/MMU Virtualization của vSphere Web Client, chọn Hardware CPU and MMU.

Trong vSphere Client phiên bản cũ, tùy chọn tương tự nằm ở tab Options → CPU/MMU Virtualization và gọi là 'Use Intel VT-x/AMD-V for instruction set virtualization and Intel EPT/AMD RVI for MMU virtualization'.

Khởi động lại máy ảo Windows 10 và kiểm tra xem bộ xử lý đã hỗ trợ SLAT chưa. Sau đó bạn có thể cài đặt tất cả các thành phần của vai trò Hyper-V và chạy các máy ảo khác bên trong VM Windows 10 này.