Skip to content

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