Partitioning Hypervisor¶
Hypervisor cho hệ nhúng và mixed-criticality: chia cứng CPU, RAM và thiết bị của SoC cho từng "partition" thay vì lập lịch chia sẻ như hypervisor cho server.
Khác biệt so với hypervisor thông thường¶
| Hypervisor tổng quát (KVM, Hyper-V) | Partitioning hypervisor | |
|---|---|---|
| CPU | vCPU chia sẻ, lập lịch động | Mỗi partition sở hữu core riêng |
| RAM | Có thể overcommit | Chia tĩnh lúc cấu hình |
| Thiết bị | Giả lập, virtio, passthrough | Gán cứng cho partition |
| Mục tiêu | Mật độ, linh hoạt | Cô lập, độ trễ dự đoán được, dễ chứng nhận |
| Kích thước mã | Lớn | Nhỏ, dễ kiểm chứng |
Mô hình điển hình trên SoC: một partition chạy Linux (giao diện, mạng, ứng dụng), partition còn lại chạy RTOS hoặc firmware điều khiển/an toàn, hypervisor bảo đảm bên này lỗi không làm hỏng bên kia. Trên ARM, hypervisor chạy ở EL2 (CPU Virtualization) và dùng Stage-2 cùng SMMU để chặn truy cập trái phép của CPU và của DMA (Memory Virtualization).
Jailhouse¶
- Hypervisor dạng partitioning của Siemens, mã nhỏ, chạy cạnh Linux thay vì thay thế Linux.
- Linux khởi động trước, sau đó nạp module và Jailhouse "nhấc" Linux thành root cell. Phần tài nguyên còn lại được tách thành các non-root cell chạy RTOS, bare-metal app hoặc Linux khác (gọi là inmate).
- Không có scheduler: mỗi cell sở hữu CPU riêng, hypervisor chỉ cấu hình bảng trang (stage-2/EPT) và IOMMU để cách ly.
- Cấu hình cell mô tả bằng file C (vùng nhớ, CPU, thiết bị, ngắt).
- Giao tiếp giữa các cell qua ivshmem (bộ nhớ chia sẻ kiểu thiết bị PCI ảo).
Xen¶
- Type 1 hypervisor, chạy trực tiếp trên phần cứng; Dom0 (thường là Linux) quản lý các domain khác DomU.
- Có bản cho ARM, dùng nhiều trong automotive và embedded. Tính năng đáng chú ý cho nhúng: dom0less (boot các domain ngay từ device tree mà không cần Dom0 quản lý lúc khởi động) và các scheduler như
null(gán cứng vCPU lên pCPU) hoặc RTDS (real-time). - Phức tạp và nặng hơn Jailhouse nhưng linh hoạt hơn (có lập lịch, migrate, thiết bị para-virtual).
Các lựa chọn khác¶
- ACRN: hypervisor nhẹ cho IoT/automotive, nhắm tới x86.
- Bao: hypervisor partitioning tĩnh cho ARM/RISC-V, mã rất nhỏ.
- seL4 và các hypervisor dựa trên microkernel: dùng khi cần chứng minh hình thức (formal verification).
- KVM vẫn dùng được trên SoC ARM nếu chấp nhận kernel Linux nằm trong TCB và không đòi hỏi real-time khắt khe, xem KVM & QEMU.
AMP, partitioning và hypervisor¶
Không phải SoC nào cũng cần hypervisor. Nếu SoC có lõi không đồng nhất (ví dụ Cortex-A chạy Linux và Cortex-M/R chạy RTOS), Linux có thể dùng remoteproc để nạp firmware và RPMsg (OpenAMP) để giao tiếp mà không cần ảo hóa. Cách này đơn giản, nhưng cô lập chỉ dựa vào phần cứng của SoC (firewall, MPU) và không bảo vệ được chống lại một lõi lỗi nếu phần cứng không hỗ trợ.
Tham khảo¶
- Jailhouse
- Xen on ARM
- Bao hypervisor
- Cơ chế trust của SoC: Secure boot và TrustZone