pvIOMMU: Hyper-V đưa DMA protection vào Linux guest¶
Microsoft vừa đưa driver IOMMU para-virtualized cho Linux guest trên Hyper-V vào nhánh -next, nhắm tới Linux 7.4. Driver này giải quyết vấn đề gì, thiết kế ra sao và còn những điểm nào cần chú ý?
1. Tin gì vừa xảy ra?¶
Microsoft đưa driver IOMMU para-virtualized (Kconfig HYPERV_PVIOMMU, file hv-iommu-guest) vào nhánh -next của IOMMU subsystem, nhắm tới Linux 7.4. Merge window của 7.4 mở vào cuối tháng 10/2026 [1].
- Tác giả chính: Yu Zhang (Microsoft), có Easwar Hariharan và Wei Liu đồng phát triển.
- Lịch sử: RFC v1 ngày 9/12/2025 [3], v2 vào tháng 7/2026 [2], v4 trước khi vào
-next[4].
Sai lệch về thời gian trong bài gốc
Bài Phoronix [1] viết RFC xuất hiện từ tháng 12/2023 ("ba năm" tới khi ra stable), nhưng thread trên mailing list cho thấy RFC v1 là tháng 12/2025, nên thực tế khoảng một năm. Nhiều khả năng bài viết nhầm năm.
2. Driver này để làm gì?¶
Driver cho phép Linux guest chạy trên Hyper-V có:
- DMA protection trong kernel cho thiết bị được assign vào guest.
- Assign thiết bị xuống user-space (VFIO) ngay trong guest.
Driver chạy trên cả Intel VT-d và AMD IOMMU. Đã test với NVMe và accelerator DSA của Intel.
Đây là mảnh ghép cho hướng passthrough thiết bị: kiến trúc Hyper-V đẩy I/O của guest qua root partition (xem Hypervisor & Hyper-V), nên các hướng như DDA/VFIO và pvIOMMU được dùng để guest nói chuyện trực tiếp với thiết bị mà vẫn được bảo vệ.
3. Thiết kế¶
- Guest tự dựng page table stage-1 kiểu x86 bằng các helper IO page table dùng chung, độc lập với driver Intel/AMD.
- Hyper-V nest page table này với stage-2 của host, nên thao tác map trong guest không gây VM exit.
- Thao tác unmap vẫn phải VM exit để flush IOTLB. Bản đầu dùng flush theo domain; page-selective invalidation để series sau.
4. Điểm cần chú ý từ review¶
- Có góp ý về lỗi log lúc boot khi kernel bật
CONFIG_HYPERV_PVIOMMUnhưng host không hỗ trợ pvIOMMU. - Các thiết bị VMBus (storvsc, netvsc) không đi qua pvIOMMU; chỉ thiết bị được assign mới dùng nó.