Skip to content

Virtualization Overview

Trang tổng quan về các kỹ thuật ảo hóa: máy ảo (hypervisor), container và các mô hình lai giữa hai loại này, kèm góc nhìn cho hệ thống nhúng. Chi tiết từng công nghệ nằm ở các trang con, xem mục "Bản đồ tài liệu" ở cuối trang.

Virtualization là gì

Virtualization (ảo hóa) là kỹ thuật thêm một lớp trừu tượng giữa tài nguyên (CPU, RAM, thiết bị, hệ điều hành) và thứ sử dụng nó, để nhiều môi trường độc lập có thể chia sẻ cùng một tài nguyên thật. Lợi ích chính:

  • Cô lập: lỗi hoặc sự cố ở một môi trường không lan sang môi trường khác.
  • Tận dụng phần cứng: nhiều workload chạy trên một máy thay vì mỗi workload một máy.
  • Tái lập môi trường: cùng một image/VM chạy giống nhau trên nhiều máy, phù hợp CI và môi trường build.
  • Di chuyển và sao lưu: snapshot, clone, migrate workload dễ hơn so với máy thật.

Các mức ảo hóa

So sánh VM và container

Mức Cái được ảo hóa Công nghệ tiêu biểu
Phần cứng (máy ảo) Cả máy: CPU, RAM, thiết bị. Mỗi VM chạy một OS đầy đủ KVM, Xen, Hyper-V, ESXi, VirtualBox
Hệ điều hành (container) Không gian tiến trình, mạng, filesystem trên cùng một kernel Docker, Podman, LXC
Runtime / ngôn ngữ Môi trường thực thi mã JVM, WebAssembly

Cần phân biệt ảo hóa với giả lập (emulation). Ảo hóa chạy mã guest trực tiếp trên CPU thật (có hỗ trợ phần cứng), còn giả lập dịch từng lệnh của một kiến trúc khác nên chậm hơn. Ví dụ QEMU ở chế độ TCG là giả lập (chạy ARM trên x86), còn QEMU kết hợp KVM là ảo hóa (chạy x86 trên x86, ARM trên ARM) với tốc độ gần native.

Hypervisor và máy ảo

Hypervisor (VMM) là phần mềm tạo và quản lý máy ảo, quyết định VM nhìn thấy CPU, RAM và thiết bị nào.

  • Type 1 (bare-metal) chạy trực tiếp trên phần cứng; Type 2 (hosted) chạy như ứng dụng trên OS có sẵn. Ranh giới mờ với KVM và Hyper-V, xem Các loại hypervisor.
  • Kỹ thuật ảo hóa CPU: full virtualization, para-virtualization (guest biết mình đang được ảo hóa và gọi hypercall hoặc dùng virtio), và hardware-assisted. Hardware-assisted là mặc định hiện nay, dựa trên Intel VT-x, AMD-V và trên ARM là exception level EL2.
  • Thiết bị: giả lập thiết bị thật, dùng thiết bị para-virtual (virtio, VMBus), hoặc passthrough thiết bị vật lý vào VM (VFIO, SR-IOV).

Chi tiết xem nhóm Nền tảng (CPU, memory, I/O) và Hypervisor & Hyper-V, KVM & QEMU.

Containerization

Container là tiến trình (hoặc nhóm tiến trình) được cô lập, dùng chung kernel với host. Container không phải một loại máy ảo thu nhỏ mà là các tính năng cô lập của kernel Linux được đóng gói lại:

Cơ chế Vai trò
Namespace (pid, net, mnt, uts, ipc, user, cgroup) Mỗi container có "view" riêng về process, mạng, mount, hostname, user
cgroups Giới hạn và tính tài nguyên: CPU, RAM, I/O, số process
Capabilities Chia nhỏ quyền root thành từng quyền riêng, cho phép bỏ bớt quyền không cần
seccomp, LSM (AppArmor, SELinux) Lọc syscall và áp dụng chính sách truy cập
Union filesystem (overlayfs) Xếp chồng các layer của image, thêm một lớp ghi cho mỗi container

Hệ sinh thái được chuẩn hóa bởi OCI (Open Container Initiative) với image spec và runtime spec. Các thành phần thường gặp:

  • Container runtime cấp thấp: runc (tạo container theo OCI runtime spec).
  • Container runtime cấp cao: containerd, CRI-O (quản lý image, vòng đời container).
  • Công cụ cho người dùng: Docker Engine, Podman.
  • Orchestration: Kubernetes, Docker Compose cho các hệ thống nhiều container.

Chi tiết từng cơ chế xem Container Internals, công cụ xem Docker.

So sánh VM và container

Tiêu chí Máy ảo Container
Kernel Mỗi VM một kernel riêng Dùng chung kernel host
Hệ điều hành guest Bất kỳ OS nào hỗ trợ kiến trúc đó Phải tương thích kernel host (container Linux cần kernel Linux)
Độ cô lập Mạnh, ở mức phần cứng ảo Yếu hơn, kernel là bề mặt tấn công chung
Khởi động Giây đến phút Mili giây đến giây
Kích thước GB (cả OS) MB đến vài trăm MB (chỉ ứng dụng và thư viện)
Overhead Cao hơn (kernel guest, giả lập thiết bị) Gần native
Dùng phù hợp Cần OS/kernel khác, cô lập mạnh, multi-tenant Đóng gói ứng dụng, môi trường build, CI, microservice

Hai loại này thường được kết hợp: container chạy bên trong VM trên cloud, hoặc dùng VM để tăng cô lập cho container.

Mô hình lai: container trong micro-VM

Để kết hợp tốc độ của container với độ cô lập của VM, một số dự án chạy mỗi container (hoặc pod) trong một VM rất nhẹ:

  • Kata Containers: tuân theo OCI, mỗi pod chạy trong một VM nhẹ với kernel riêng.
  • Firecracker: VMM tối giản dựa trên KVM, khởi động micro-VM trong thời gian rất ngắn, dùng cho serverless.
  • gVisor: không dùng VM mà chặn syscall của container bằng một kernel chạy ở user space.

Ảo hóa trong hệ thống nhúng

Với embedded Linux, ảo hóa xuất hiện ở hai hướng khác nhau:

Hypervisor trên SoC

  • Mục tiêu thường là mixed-criticality: chạy Linux (giao diện, mạng, ứng dụng) cạnh RTOS hoặc firmware thời gian thực (điều khiển, an toàn) trên cùng SoC, với cô lập rõ giữa hai bên.
  • Kiến trúc ARM có exception level EL2 dành cho hypervisor, bên dưới là EL3 (secure monitor) và TrustZone. Tham khảo thêm bài Secure boot & TrustZone ở mục Embedded Security.
  • Một số giải pháp: Xen on ARM, KVM trên ARM, Jailhouse (partitioning hypervisor: chia cứng CPU, RAM, thiết bị cho từng "cell" thay vì lập lịch chia sẻ), ACRN, Hyper-V với Linux làm root partition (mshv).

Container cho phát triển và triển khai

  • Đóng gói toolchain và môi trường build (Petalinux, Yocto) để mọi máy và CI dùng cùng một môi trường, xem Docker cho môi trường build.
  • Triển khai ứng dụng lên thiết bị bằng container, kết hợp OTA update. Phù hợp thiết bị có đủ RAM, storage và kernel có hỗ trợ namespace, cgroups, overlayfs.
  • Chạy image kiến trúc khác trên máy dev bằng QEMU user-mode (binfmt_misc, xem QEMU cross-arch) để build hoặc thử nghiệm cho ARM trên máy x86.

Chọn công nghệ nào

Nhu cầu Gợi ý
Cần kernel hoặc OS khác với host Máy ảo
Cần cô lập mạnh giữa các bên không tin nhau Máy ảo hoặc micro-VM (Kata, Firecracker)
Môi trường build lặp lại được, CI Container
Đóng gói và triển khai ứng dụng nhanh, nhẹ Container
VM có yêu cầu độ trễ thấp (real-time, vRAN trên server x86) KVM tuning real-time và vRAN trên VM: pin vCPU, huge page 1G, SR-IOV VF, DPDK
Chia cứng tài nguyên SoC cho Linux và RTOS, có yêu cầu real-time Partitioning hypervisor (Jailhouse, Xen, ...)
Thử nghiệm phần mềm cho kiến trúc khác trên máy dev Giả lập (QEMU)

Bản đồ tài liệu

Nền tảng

Hypervisor

Container

Sandbox & micro-VM

Real-time & vRAN

  • Real-time KVM tuning: isolcpus/nohz_full, pin vCPU và emulator thread, huge page 1G, NUMA, đo cyclictest trong guest.
  • vRAN trên VM: SR-IOV VF cho fronthaul, DPDK trong guest, PTP qua VF, checklist triển khai.

Ứng dụng cho embedded

Đọc thêm