云集技术学社 一文带您了解深信服aSV服务器虚拟化功能及原理

10月14日 , 深信服云计算专家Leijian在信服云《云集技术学社》系列直播课上进行了《深信服aSV服务器虚拟化功能及原理》的分享 , 介绍了服务器虚拟化的基本原理和深信服aSV服务器虚拟化特色技术 。以下是他的分享内容摘要 , 想要了解更多可以关注“深信服科技”公众号 。
看点一:服务器虚拟化的发展
从上世纪60年代开始 , 服务器虚拟化经历了60多年的发展 , 也有着十分明显的代际变化 。
第一代是基于二进制翻译的全虚拟化 , 它的典型应用是早期的VMwareWorkstation 。核心是通过二进制发育的方式实现虚拟机的复用 。
第二代是半虚拟化 , 它的典型应用是Xen , 通过修改操作系统内核 , 替换掉不能虚拟化的指令 , 通过超级调用(Hypercall)直接和底层的虚拟化层Hypervisor来通讯 , Hypervisor同时也提供了超级调用接口来满足其他关键内核操作 , 比如内存管理、中断和时间保持 。这种做法省去了全虚拟化中的捕获和模拟 , 大大提高了效率 。
第三代是硬件辅助虚拟化 , 核心是在裸金属上安装VMware , 在上面跑GuestOS指令 。有别于上两代的是 , 它不用修改任何的GuestOS指令 , 可以直接运行 。
看点二:服务器虚拟化基本原理
01
Qemu-KVM基本原理介绍
深信服目前应用的硬件辅助虚拟化是基于Qemu-KVM实现的 。
KVM是内核的一个驱动(kvm.ko) , 工作在内核态(CPURing0) , 实际上是Linux内核一个标准组件 。KVM内核模块收到该请求后 , 它先做一些准备工作 , 比如将vCPU上下文加载到VMCS(VirtualMachineControlStructure)等 , 然后驱动CPU进入VMXNon-Root模式 , 开始执行客户机代码 。
Qemu是一个应用程序 , 工作在用户态(Usermode、CPURing3) , 提供外设的模拟、vCPU模拟、主控逻辑、IO收发等 , 当GuestOS需要发送IO请求、需要发送网络包的时候 , 都需要调用VM_Exit让Qemu协助实现 。它能够支持CPU和memory超分、半虚拟化I/O、热插拔、对称多处理、实时迁移、PCI设备直接分配和单根I/O虚拟化、内核同页合并、NUMA等多项功能 。使用Qemu的云厂商在这些功能配置上都是类似的 。
使用Qemu-KVM有三种运行模式:
第一种是客户模式(GuestRing0~3) , 可以简单理解成客户机操作系统运行在的模式 , 它本身又分为自己的内核模式和用户模式(CPU工作在VMXNon-RootOperation) 。
第二种是用户模式(UserRing3) , 为用户提供虚拟机管理的用户空间工具以及代表用户执行I/O , Qemu运行在这个模式之下(CPU工作在VMXRootOperation) 。
第三种内核模式(SystemRing0) , 模拟CPU以及内存 , 实现客户模式的切换 , 处理从客户模式的退出 , KVM内核模块运行在这个模式下(CPU工作在VMXRootOperation) 。
02
Virtio(aTool)和全虚介绍
Virtio半虚:实际上是在Qemu和虚拟机之间设置一个共享内存Vring , 当有数据需要发送的时候 , 把数据拷贝到共享内存Vring中 , 然后调用一次VM_Exit退出到Qemu中 , Qemu再把这个Vring的数一次性全部发出(注意:如果虚拟机此时在快速发包 , 有可能Vring中已经缓存了多个包 , 从而更进一步减少了VM_Exit) 。这样可以减少VM_Exit的次数 , 从而大大提高性能(可以理解成在GuestOS和Qemu之间开了个后门) 。
Virtio半虚拟可以获得很好的I/O性能 , 比纯软件模拟高于4倍多 , 其性能几乎可以达到和Native(即非虚拟化环境中的原生系统)差不多的I/O性能 。所以 , 在使用KVM之时 , 如果宿主机内核和客户机都支持Virtio的情况下 , 一般推荐使用Virtio达到更好的性能 。
云集技术学社 一文带您了解深信服aSV服务器虚拟化功能及原理
文章图片