Memory Virtualization¶
Guest tưởng mình quản lý toàn bộ RAM vật lý, nhưng thực tế hypervisor cấp phát và kiểm soát từng vùng. Trang này nói về ánh xạ địa chỉ cho CPU và cho thiết bị DMA.
Ba lớp địa chỉ¶
| Lớp | Tên | Ai quản lý |
|---|---|---|
| GVA | Guest virtual address | Guest OS (page table của guest) |
| GPA | Guest physical address (với guest là "RAM vật lý") | Hypervisor |
| HPA | Host physical address (RAM thật) | Hypervisor |
Guest OS dịch GVA sang GPA, hypervisor dịch GPA sang HPA. Bài toán là thực hiện cả hai bước mà không phải trap mỗi lần guest sửa page table.
Shadow page table và nested paging¶
- Shadow page table (phần mềm): hypervisor giữ một page table "bóng" ánh xạ thẳng GVA sang HPA và đồng bộ mỗi khi guest sửa page table của nó. Phải trap mọi thao tác sửa page table nên chi phí cao.
- Nested paging (phần cứng, hai giai đoạn): MMU tự dịch hai tầng, guest sửa page table thoải mái không cần trap. Hypervisor chỉ bị gọi khi gặp lỗi ở tầng GPA sang HPA.
| Kiến trúc | Tên cơ chế |
|---|---|
| Intel | EPT (Extended Page Tables) |
| AMD | NPT / RVI (Nested Page Tables) |
| ARMv8-A | Stage-2 translation (VTTBR_EL2) |
| RISC-V | G-stage translation |
Nhược điểm của nested paging là một lần TLB miss phải duyệt bảng trang hai tầng (page walk 2D), tốn nhiều truy cập bộ nhớ hơn. Cách giảm: dùng huge page ở cả hai tầng, và TLB gắn nhãn theo VM (VPID trên Intel, ASID/VMID trên AMD và ARM) để không phải flush TLB mỗi lần đổi VM.
Quản lý RAM giữa các VM¶
- Overcommit: tổng RAM cấp cho các VM lớn hơn RAM thật, dựa vào việc VM thường không dùng hết.
- Ballooning: driver trong guest "thổi" bóng để lấy lại trang không dùng trả cho host.
- Page sharing (KSM trên Linux): gộp các trang giống nhau giữa các VM.
- Huge page: giảm TLB miss, hay dùng cho VM cần hiệu năng hoặc độ trễ ổn định. Cách cấp huge page 1G và ràng buộc NUMA cho VM xem Real-time KVM tuning.
Hệ nhúng thường không overcommit: RAM được chia cứng cho từng guest lúc cấu hình (xem Partitioning hypervisor).
IOMMU: bảo vệ bộ nhớ trước DMA¶
Nested paging chỉ kiểm soát truy cập bộ nhớ từ CPU. Thiết bị có DMA vẫn có thể đọc/ghi RAM tùy ý nếu không bị chặn, nên khi gán thiết bị cho VM cần IOMMU để dịch và giới hạn địa chỉ DMA của thiết bị đó, giống như một MMU cho thiết bị.
| Kiến trúc | IOMMU |
|---|---|
| Intel | VT-d |
| AMD | AMD-Vi |
| ARM | SMMU |
| RISC-V | RISC-V IOMMU |
IOMMU là điều kiện cần của passthrough an toàn (I/O Virtualization). Với Hyper-V, xem bài pvIOMMU: Hyper-V đưa DMA protection vào Linux guest.