内存热插拔是容器在部署中动态分配内存的关键特性,在 x86 上,可以使用直接启用 ACPI 的 QEMU 启动 VM,因为它会隐式启动固件。但是对于 arm64,则需要明确指定固件。也就是说,如果准备在 arm64 上运行一个普通的 Kata Container,你需要额外做的是在使用内存热插拔功能之前安装 UEFI ROM。
安装 UEFI ROM
修改脚本适配系统
需要执行的脚本
1 | $GOPATH/src/github.com/kata-containers/tests/.ci/aarch64/install_rom_aarch64.sh |
该脚本默认适配的系统是Ubuntu,使用apt源安装相关依赖,适配麒麟系统需要修改为dnf源进行安装,将脚本安装依赖部分修改为
1 | dnf install -y python python3 python3-distutils-extra uuid-devel bison flex |
其他edk2相关git项,根据网络情况进行适配
执行脚本安装
1 | sudo .ci/aarch64/install_rom_aarch64.sh |
脚本执行安装完成后,默认kata的img路径下(/usr/share/kata-containers)生成2个文件kata-flash0.img和 kata-flash1.img
内核适配
内核默认不支持nvdimm,需要打社区提供的patch才能开启
目前适配的kernel版本是5.4.160,社区提供了5.4.x版本kernel相应的patch,路径如下:
1 | $GOPATH/src/github.com/kata-containers/kata-containers/tools/packaging/kernel/patches/5.4.x/0006-arm64-mm-Enable-memory-hot-remove.patch |
将该文件拷贝至kernel源码下,执行patch
1 | cd {kernel_path} |
编译内核注意nvdimm相关的config要开启
1 | CONFIG_ACPI_NFIT=y |
重新编译后,替换编译后的内核文件
配置文件修改
1 | # If false and nvdimm is supported, use nvdimm device to plug guest image. |
注意事项
如果基于之前的kernel编译了驱动之类的内容,kernel打了patch需要重新编译驱动,否则出现mod无法加载的情况