hvisor管理工具

hvisor通过一个管理虚拟机Root Linux来管理整个系统。Root Linux通过一套管理工具为用户提供启动和关闭虚拟机、启动和关闭Virtio守护进程的服务。管理工具中,包含一个命令行工具和内核模块。其中命令行工具用于解析并执行用户输入的命令,内核模块用于命令行工具、Virtio守护进程与Hypervisor之间的通信。管理工具的仓库地址为:hvisor-tool

启动虚拟机

用户输入以下命令,可以在Root Linux上为hvisor创建一个新的虚拟机。

./hvisor zone start [vm_name].json

命令行工具首先会解析[vm_name].json文件内容,将虚拟机配置写入zone_config结构体。并根据文件中指定的镜像和dtb文件,将其内容通过read函数读入临时内存。为了将镜像和dtb文件加载到指定的物理内存地址,hvisor.ko内核模块提供hvisor_map函数,可以将一片物理内存区域映射到用户态虚拟地址空间。

当命令行工具对/dev/hvisor执行mmap函数时,内核会调用hvisor_map函数,以实现用户虚拟内存到指定物理内存的映射。之后通过内存拷贝函数,即可将镜像和dtb文件的内容从临时内存移动到用户指定的物理内存区域。

加载好镜像后,命令行工具对/dev/hvisor调用ioctl,指定操作码为HVISOR_ZONE_START,之后内核模块会通过Hypercall通知Hypervisor,并传入zone_config结构体对象的地址,通知Hypervisor启动虚拟机。

关闭虚拟机

用户输入命令:

./hvisor shutdown -id [vm_id]

即可关闭ID为vm_id的虚拟机。该命令会对/dev/hvisor调用ioctl,指定操作码为HVISOR_ZONE_SHUTDOWN,之后内核模块会通过Hypercall通知Hypervisor,传入vm_id,通知Hypervisor关闭虚拟机。

启动Virtio守护进程

用户输入命令:

nohup ./hvisor virtio start [virtio_cfg.json] &

即可根据virtio_cfg.json中规定的Virtio设备信息,创建Virtio设备,并初始化相关的数据结构。目前支持三种Virtio设备的创建,包括Virtio-net、Virtio-block、Virtio-console设备。

由于命令行参数中包含nohup&,该命令会以守护进程的形式存在,守护进程的所有输出被重定向到nohup.out。守护进程的输出包含六个等级,从低到高分别是LOG_TRACE, LOG_DEBUG, LOG_INFO,LOG_WARN,LOG_ERROR,LOG_FATAL。编译命令行工具时可指定LOG级别,例如LOG为LOG_INFO时,等于或高于LOG_INFO的输出将被记录到日志文件,而log_tracelog_debug将不会输出。

Virtio设备创建后,Virtio守护进程会轮询请求提交队列,获取其他虚拟机的Virtio请求。长时间没有请求时,会自动进入休眠状态。

关闭Virtio守护进程

用户输入命令:

pkill hvisor

即可关闭Virtio守护进程。Virtio守护进程在启动时,会注册SIGTERM信号的信号处理函数virtio_close。当执行pkill hvisor时,会向名为hvisor的进程发送信号SIGTERM,此时守护进程会执行virtio_close,回收资源,关闭各个子线程,最后推出