本文主要讲解 libvirt 在申威平台上的移植方法和需要注意的一些细节。目前已完成基本适配的版本为 libvirt3.2+swvm 和 libvirt4.5.0+qemu2.11.0。
申威平台编译 libvirt
获取 libvirt 源码,进入源码目录切换到你想要移植的分支,再依据该分支创建新的 sw 分支:
1 |
|
编译源码(由于申威平台编译器的原因,需要添加–disable-werror):
1 |
|
如果只想编译申威平台支持的 hypervisor,而不想编译其他 driver,可以添加如下参数,减少编译时间:
1 |
|
如果在这一步遇到了 xdr 相关的报错,并且确定依赖已安装完成,则可能是 libc 动态连接库有问题,需要将/lib/libc-2.23.so 文件替换(目前符合我们需求的 libc-2.23.so 文件的 md5 码后几位是*08bb82,后续或有更新,须与申威方确认)。
autoconfig 完成后,即可开始 make:
1 |
|
通常完成 make install 之后就代表完成安装,可以运行 libvirtd 程序了。但是有几个需要提醒的地方:
若运行 libvirtd 出现动态连接版本冲突问题(通常是由于同时安装了两个不同版本的 libvirt,如安装 libviirt3.2 之后,在未能卸载干净的情况下又安装了 libvirt4.5,导致动态连接库冲突)则可以尝试先删除某个不需要版本的动态库再运行 ldconfig 命令。
1 |
|
查看 libvirtd 状态,若需要,则安装 dnsmasq 和防火墙 iptables 或 ebtables(目前 iptable 创建网卡相关部分依然存在部分问题,在 [libvirt 与 virbr0] 中我们会进行详细讨论)。
到这里,我们成功地在申威平台上运行了一个未修改过的 libvirt,接下来我们为 libvirt 添加申威平台支持的 hypervisor。
申威平台虚拟化支持情况
在libvirt 使用 中我们已经讲解过,想要使用 libvirt 首先需要 connect 到一个 hypervisor,但目前申威平台能支持的 hyperviosr 有限,截止到本文完成,申威平台能对虚拟化提供支持的内容包括:
- swvm:参考 lguest,自主开发的半虚拟化;
- qemu-system-sw64:qemu 移植,目前版本为 2.11.0,只能够在申威平台模拟申威架构的虚拟机;
- qemu-img:qemu-img-2.5.0 移植,可支持完整的 qcow2 格式,与磁盘镜像的创建、快照的创建管理相关;
- qemu-io:qemu-io-2.5.0 移植,qemu disk exerciser,应用 QEMU I/O path,详细内容参考QEMU I/O Path;
- qemu-nbd:qemu-nbd-2.5.0 移植,qemu Network Block Devce,与远程数据仓库相关,详细内容参考NBD;
- qemu-ga:qemu-ga-2.5.0 移植,qemu guest agent,虚拟机与宿主机通信通道,详细内容可参考GuestAgent;
- kvm-tools:容器虚拟化,正在移植中。
目前 swvm 与 qemu-system-sw64 内核未能合并,同时 hmcode 不兼容,因此在同一台服务器上只能使用 swvm 或者 qemu-system-sw64,如果想要替换为另一个 hypervisor 则需要为服务器刷 hmcode。
选择 qemu-system-sw64 需要修改 qemuHypervisorDriver 相关内容,选择 swvm 则需要自行添加一个全新的 driver,这是由于 libvirt 的项目结构导致的,这种模块化的结构极大的方便了不同 hypervisor 开发者的工作,他们只需要专注于自己要开发的模块即可,无需关注其他模块。但是无论你选择那种 Hypervisor,即便是未来要添加的 kvm-tools,有一部分内容是一定要修改的,那就是架构相关的代码。
libvirt 添加申威架构
添加 sw64 架构
libvirt 针对不同的架构会有不同的处理,因此我们需要在 libvirt 中添加 sw64 架构信息:
1 |
|
3.2、添加 sysinfo
由于截至目前,申威平台无法获取 bios 信息,也就无法使用 dmidecode 命令,无法使用该命令获取平台硬件信息;同时/proc/sysinfo 文件缺失,无法获取完整的平台硬件信息,所以在这里创建了一个 fake_sysinfo 文件,用来保存服务器信息,同时为 sw 架构编写特殊的解析函数。如下:
1 |
|
在这里我们创建一个 fake_sysinfo 文件,用来保存服务器硬件信息,之后直接从该文件读取信息。这种解决方法是暂时的,待申威方协助提供新的硬件信息获取方式之后再完善 。