尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

华为欧拉系统以及jailhouse虚拟化技术介绍

华为欧拉系统以及jailhouse虚拟化技术介绍 前言8月份开始接触到了华为的欧拉系统和可以在欧拉系统使用的虚拟化技术jailhouse。使用后不仅感叹虚拟化技术的精妙与国产开源系统的强大。因此想要介绍下欧拉系统和系统中经常使用的jailhouse技术一.欧拉系统介绍1.简单介绍openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目面向数字基础设施四大核心场景服务器、云计算、边缘计算、嵌入式全面支持 ARM、x86、RISC-V、LoongArch、PowerPC、SW-64 等多样性计算架构。欧拉的最大优点它突破了传统操作系统与特定芯片架构绑定的模式通过自研的统一内核和架构适配层100%支持ARM、x86、RISC-V、LoongArch龙芯、PowerPC等全部主流通用计算架构。同时欧拉系统针对服务器、云计算等场景进行了大量垂直优化性能表现突出。根据社区数据其性能优于主流操作系统约15%。主流操作系统比如ubuntu,debian这些由于需要兼用在各个硬件上需要适配几乎所有硬件因此它们在性能优化这部分会做出让步而欧拉大部分用在服务器、云计算、工业控制部分在这些场景下把性能做到了极致。2.和常见系统横向对比对比对象共同点欧拉的差异点CentOS / RHEL 系同为 RPM dnf/yum 体系目录布局、systemd、服务管理基本一致迁移成本低厂商与社区提供 x2openEuler 等迁移工具CentOS 停服后国内大量存量系统正往这个方向迁移国产芯片适配由社区承担Ubuntu / Debian 系都是通用 Linux软件生态庞大也都有实时内核方案包管理体系不同deb/apt vs rpm/dnf欧拉强在国内硬件适配、行业认证与信创合规Ubuntu 强在国际社区体量与第三方软件覆盖其他国产商业发行版麒麟、统信等大多基于 openEuler 构建命令与包体系高度一致欧拉是它们的上游想要更小的镜像、更自由的裁剪、更早拿到新特性直接用社区版自己拿通用 Linux 改实时都能上 PREEMPT_RT欧拉把实时内核 混合关键性框架 分区虚拟化做成了官方交付物不必长期自己维护一整套补丁作为华为推出的开源系统欧拉的生态环境也可以说是不错但是跟其他经典系统比还是有所欠缺国际社区体量仍不及 Ubuntu / RHEL部分海外第三方软件尤其是闭源商业软件的原生支持覆盖不如主流发行版。芯片平台成熟度也不够均衡x86 与 ARM64 生态最厚RISC-V / LoongArch 等平台的驱动与工具链仍在完善中。因此我们也要需要正视欧拉系统的缺点与适配性不足的缺点。二.jailhouse虚拟化技术1.虚拟化技术介绍在实际的工业化场景中会出现一个板子运行了一个程序但是这个程序的CPU占用率可能就在50%左右这样并不能很好的利用当前的硬件资源然而如果想要运行其他程序其他程序需要的环境跟当前程序需要的环境不一样因此无法运行想要解决这样的问题就可以使用我们的虚拟化技术。虚拟化技术简单说就是把一台物理计算机的硬件资源抽象、分割、隔离变成多个相互独立的逻辑计算机环境。这些逻辑环境可以同时运行不同的操作系统彼此之间互不干扰。比如你在一台物理服务器上同时运行 Windows、Linux、CentOS它们都以为自己独占了一台机器但实际上共享的是同一套 CPU、内存、磁盘和网卡。虚拟化技术如今广泛使用在云服务器中已经成为云计算平台最核心的底层能力之一。云服务商通常会在物理服务器上部署 Type 1 裸金属 Hypervisor例如 KVM、Xen、VMware ESXi、Hyper-V把 CPU、内存、存储和网络资源统一抽象成资源池再按需切分成多台相互隔离的云主机实例。每个云主机都拥有独立的虚拟 CPU、虚拟内存、虚拟磁盘和虚拟网卡用户可以像使用真实服务器一样安装操作系统、部署应用和配置网络。借助 Intel VT-x、AMD-V 等硬件辅助虚拟化以及 virtio、SR-IOV 等技术云服务器的性能损耗不断降低网络和磁盘 I/O 也能接近物理机水平。2.jailhouse介绍jailhouse的核心设计理念与 KVM、Xen 等主流虚拟化方案截然不同不追求功能的丰富性而是将“简洁”与“实时性”放在首位专为嵌入式系统中的混合关键性场景而设计。它会静态分配硬件资源然后将环境分割成一个个cell,系统就运行在这些cell中。场景痛点Jailhouse 的价值工业 PLC / 运动控制控制周期 100μs~1msLinux 上跑 KVM 虚拟机vCPU 被 CFS 调度器抢占尾延迟不可控每个 cell 独占 CPU无调度器、无超卖实时域几乎零虚拟化开销车载 / 机器人多 OS 混合需要 LinuxHMI/网络 RTOS控制 裸机安全监控共板静态分区 IVSHMEM 共享内存通信一个 cell 崩溃不影响另一个 cell边缘安全隔离需要把联网的 Linux和存放密钥/证书的负载强隔离硬件虚拟化EPT IOMMU做边界攻击面远小于全功能 hypervisor启动的时候它会先用 Linux 把硬件初始化好再由 Linux 把 Jailhouse 加载起来接管硬件然后把 CPU、内存、中断、PCI 设备静态切分给多个互相隔离的 cell。Jailhouse 加载完成后执行层级是这样的x86 VMX root 模式 ── Jailhouse hypervisor VMX non-root ── Linux即 Root Cell被当成一个 guest 跑在 EPT 里 ── inmate cell 1 / cell 2 ... ARM EL2 ── Jailhouse hypervisor EL1 ── LinuxRoot Cell ── inmate cell 1 / cell 2 ...启动步骤如下① 固件 / BootLoader 启动 └─ x86: GRUB 带 memmap 预留连续物理内存ARM: U-Boot 让 Linux 运行在 HYP 模式 ② Linux欧拉启动接管并初始化全部硬件 └─ 打开中断重映射、准备 jailhouse 内核模块 ③ modprobe jailhouse ← 内核模块 jailhouse.ko 提供 /dev/jailhouse 与 sysfs ④ jailhouse enable sysconfig.cell └─ 通过 /dev/jailhouse ioctl 把 jailhouse.bin 加载到预留内存并跳转执行 └─ Hypervisor 接管硬件虚拟化特性VMX/EPT 或 EL2Linux 降级为 Root Cell ⑤ jailhouse cell create xxx.cell └─ 按配置把 CPU / 内存 / 中断 / PCI 从 Root Cell 划给新 cell ⑥ jailhouse cell load id image [-a 地址] └─ 把 inmate 镜像搬进该 cell 的内存 ⑦ jailhouse cell start id └─ 让该 cell 的 CPU 从入口点开始执行 ⑧ jailhouse cell shutdown / destroy / disable └─ 资源回收给 Linuxdisable 后一切回到普通 Linux 系统CPU通过.cpus位图静态分配。每个 CPU 只属于一个 cellcell 之间不共享 CPU——这就是没有调度器的含义也是实时性的来源。内存每个 cell 的内存区域在配置里以物理地址 大小 权限JAILHOUSE_MEM_READ/WRITE/EXECUTE/DMA显式声明。hypervisor 用 EPT / Stage-2 页表兜底Root Cell 无法越界访问别人的内存。设备与中断PCI 设备按 BDF 白名单分配MSI/MSI-X 通过 IOMMU 的中断重映射Intel VT-d / ARM ITS改写目标PIO 端口与 IRQ 用pio_regions、irqchips.pin_bitmap精确授权。启动起来后是这样的三.使用jailhouse方式一走社区仓库推荐先试dnf list jailhouse # 先看看当前版本仓库里有没有 sudo dnf install -y jailhouseopenEuler 社区的源码包在src-openeuler/Jailhouse已迁移至 AtomGit基线为jailhouse-0.12.tar.gz并带有若干国产平台与编译适配补丁。如果dnf里查不到直接走方式二。方式二源码编译推荐可控# 依赖内核头文件/构建目录、python3-makoconfig create 脚本依赖 mako sudo dnf install -y git gcc make kernel-devel kernel-headers python3-mako ​ git clone https://github.com/siemens/jailhouse.git cd jailhouse git checkout v0.12 # master 亦可 ​ # 指定根单元内核的构建目录/lib/modules/$(uname -r)/build 即可 make KDIR/lib/modules/$(uname -r)/build -j$(nproc) sudo make install # 安装 driver / firmware / tools / configs编译产物对应关系后面会一直用到产物路径作用jailhouse.binhypervisor/→ 安装到/lib/firmwareHypervisor 固件本体jailhouse.kodriver/内核模块提供/dev/jailhouse与 sysfs 管理面jailhousetools/用户态管理工具*.cellconfigs/{x86,arm64}/系统配置与 cell 配置inmate-*.bininmates/demos/{x86,arm64}/演示 inmate 镜像之后校验硬件sudo modprobe jailhouse sudo jailhouse hardware checkx86 上它会逐项检查 VMX、EPT、unrestricted guest、preemption timer、VT-d 中断重映射等能力。这一步不通过后面的所有步骤都没有意义请先换硬件或改 BIOS 设置VT-d 常见于 BIOS 里被默认关闭。然后生成系统配置sudo jailhouse config create -c ttyS0 sysconfig.c关键点如下必须在目标机器上以 root 运行脚本要读/sys/firmware/acpi/tables/MCFG、MADT/IVRS/DMAR、/proc/iomem、/proc/ioports、/sys/class/tty/*。jailhouse处于 enabled 状态时无法生成配置脚本会直接报错生成配置要在 enable 之前。常用参数-c ttyS0指定 hypervisor 调试串口none表示不输出--mem-hv 6M/--mem-inmates 76M调整内存规划。目标板在远端/隔离环境先执行jailhouse config collect sysinfo.tar把所需 sysfs 输入打包拿到开发机上再jailhouse config create -r 解包目录 sysconfig.c。生成的是C 源码把它放进源码树configs/x86/后重新make构建系统会自动编译出sysconfig.cell。手工微调裁剪 PCI 白名单、收紧 PIO 授权就发生在这一步。ARM 平台没有配置生成器需要参考configs/arm64/与configs/arm64/dts/inmate-*.dts手工编写并核对 SoC 手册与 DTS。生成后务必自检sudo jailhouse config check sysconfig.cell apic-demo.cell它会检查cell 内部内存区域是否重叠、是否与 hypervisor 内存重叠、是否与 PCI MMCONFIG / IOMMU / xAPIC / IOAPIC 拦截区域重叠。配置检查通过是 enable 成功的前置条件能省掉大量机器直接挂死、串口无输出的排查时间。之后改启动参数并重启# /etc/default/grub注意 $ 转义 GRUB_CMDLINE_LINUX_DEFAULT... intel_iommuoff memmap82M\\\$0x3a000000 # ARM 平台则改用 mem 或 DTS reserved-memory 减少内核可见内存 ​ grub2-mkconfig -o /boot/grub2/grub.cfg # 欧拉/CentOS 系 reboot重启后确认dmesg | grep -i -e memmap -e iommu cat /proc/cmdline然后enable Jailhouse# 1) 先把要给其他 cell 的 CPU 下线示例只留 CPU0 for c in 1 2 3; do echo 0 /sys/devices/system/cpu/cpu$c/online; done ​ # 2) 加载模块 sudo modprobe jailhouse ​ # 3) 启用路径按你的实际位置源码树里在 configs/x86/ sudo jailhouse enable /usr/share/jailhouse/cells/qemu-x86.cell # 或 sudo jailhouse enable ./configs/x86/sysconfig.cell强烈建议先接好物理串口COM / IPMI Serial再执行 enable。Jailhouse 运行在比 Linux 更低的层级一旦出错 Linux 无法保证继续执行dmesg、ftrace全都指望不上——它有自己的日志机制只往串口或配置里指定的调试控制台吐。找不到 COM 口就用 PCI 串口卡服务器用 IPMI Serial-over-LAN 也行。创建并启动一个 inmate# 查看当前 cell 列表此时只有 Root Cell sudo jailhouse cell list ​ # 用官方 demoapic-demo 会以 10Hz 触发 APIC 定时器并用 PM Timer 测量抖动 sudo jailhouse cell create ./configs/x86/apic-demo.cell sudo jailhouse cell load apic-demo ./inmates/demos/x86/apic-demo.bin sudo jailhouse cell start apic-demo输出会持续打印定时器抖动统计。随后可以sudo jailhouse cell list # 观察 State / Assigned CPUs / Failed CPUs sudo jailhouse cell stats apic-demo # 运行统计 sudo jailhouse console -f # 持续跟随 hypervisor 调试控制台 sudo jailhouse cell destroy apic-demo sudo jailhouse disable # 全部资源归还 Linux四.问题汇总sudo jailhouse enable /usr/share/jailhouse/cells/qemu-x86.cell 后需要使用命令查看io的映射是否有hypervisor层是否有ivshmem使用命令cat /proc/iomem找到hypervisor看是否是在配置的内存地址上。需要注意每个cell的ivshmem是不一样的需要设置标志位来提供读写能力而且注意启动的系统的bin文件的启动地址需要在main ram中配置好相应的地址。
返回列表