升级Xen 4.5到Xen 4.8

Xen官方上周发布了Xen 4.8, What’s New with Xen Project Hypervisor 4.8?,添加了很多新功能,如Credit2调度器正式发布。Xenforce目前使用的是Xen 4.5,从性能、稳定性、功能等几方面考虑,决定升级到Xen 4.8。

虽然Xenforce在设计实现之初就考虑到向前兼容Xen,以方便升级Xen,但实际升级到Xen 4.8时还是遇到了一些问题,不过都很好地解决了。升级完后,简单测试了下,设备CPU24核、内存64G、机械硬盘、快照1G,通过快照恢复一台虚拟机只需要3秒左右,而在Xen 4.5上需要6秒左右,Xenforce性能大幅提升,沙箱整体性能也得到提升。如果继续使用Xen 4.5,要提升性能就不得不升级硬件,如CPU 32核或快照存放在固态硬盘。升级到Xen 4.8,解决了快照加载的性能瓶颈,省去了硬件升级开销。

升级流程:

  • 下载源码包 Xen Project 4.8.0
  • 按照README中的说明,安装依赖包,编译出错基本都是因为依赖包安装有问题。
  • 配置,编译。
./configure
make

编译成功会生成dist文件夹,此文件夹可以直接拷贝到其他设备上,进行安装。

$ ls dist
COPYING install install.sh README
  • 安装,运行dist/install.sh脚本,如果安装在/usr/local目录下,运行ldconfig /usr/local/lib命令加载动态链接库。
  • 配置开机启动项,因为是从Xen 4.5升级过来的,直接沿用之前的grub配置即可,当然,如果想使用Credit2调度器,得在grub配置中添加sched=credit2,详见Xen Hypervisor Command Line Options
  • 重启设备。重启完成后,运行xl info命令,查看Xen版本。

xen48

因为之前Xenforce是在Xen 4.5上制作的虚拟机快照,升级到Xen 4.8后,快照恢复出错。Xen从4.6版本开始,快照采用了新的格式Migration V2,当然,官方也提供了工具convert-legacy-stream将老版快照升级到新版。

先安装依赖,进入Xen 4.8源码的tools/python目录,运行命令python setup.py install。可运行convert-legacy-stream -h查看使用说明。

convert-legacy-stream -i vm.checkpoint.45 -o vm.checkpoint -w 64 -g hvm -f libxl -x -v

遗憾的是转换后快照依然恢复出错,问题出在显卡上。不得不仔细研究了下Migration V2格式,参见LibXenCtrl Domain Image FormatLibXenLight Domain Image Format,最终用了一个小trick将问题解决,避免了对Xenforce做大幅改动。想起了传说中当年TK教主将一个损坏的压缩包,一个字节一个字节修复。当然,要从根本上解决此问题,还需把Xen对qemu的使用,以及快照中qemu状态保存的内容及格式,做更深入探究。

自此,Xen从4.5升级到4.8,Xenforce也无缝升级,平滑过渡。


参考: