虚拟化技术与云计算平台报告

前言

从2006年谷歌首次提出“云计算”的概念到现在,云计算已经经历的十多年的发展,有众多厂商、组织和学者投入其中。一些云服务厂商有自己的云计算平台,但只是为客户提供云服务,外部开发者无法对这些厂商的云平台进行开发。另外也有一些组织机构或厂商开发的云计算平台是开源的,吸引大量开发者在这些开源平台上开展自己的工作。

目前,主流的开源云计算平台有很多种,本问将对这些平台进行调研以选择最适合于自己需求的平台。另外,虚拟化技术又是云计算的核心支撑技术,是将各种计算及存储资源充分整合和高效利用的关键技术,当前虚拟化技术也是多种多样,并且开源云计算平台往往又支持多种底层的虚拟化技术,因此也有必要对虚拟化技术进行调研,以选择最适合云平台和上层应用的虚拟化技术。综上,本报告的主要目标就是对多种虚拟化技术和多种开源云计算平台进行对比,以选出最满足需求的技术与平台。

本文将首先简单对比虚拟化与云计算。其后,由于虚拟化技术是云计算的基础,本报告将先对虚拟化技术展开论述,然后再对云计算平台进行论述。

虚拟化与云计算

借助虚拟化技术,用户可以单个物理硬件系统为基础创建多个模拟环境或专用资源。并使用一款名为“Hypervisor”(虚拟机监控程序)的软件直接连接到硬件,从而将一个系统划分为不同的、单独安全环境,即虚拟机 (VM)。Hypervisor 能够将计算机资源与硬件分离并适当分配资源,而虚拟机则依赖这些功能运行。

云计算则由多种规则和方法组合而成,可以跨任何网络向用户按需提供计算、网络和存储基础架构资源、服务、平台和应用。这些基础架构资源、服务和应用来源于云。 简单来讲,云就是一系列管理及自动化软件编排而成的虚拟资源池,旨在帮助用户通过支持自动扩展和动态资源分配的自助服务门户,按需对这些资源进行访问。

下面对虚拟化与云计算做一个简单的对比:

虚拟化
定义 技术 方法论
目的 从一个物理硬件系统创建多个虚拟环境 汇聚并自动化分配虚拟资源以供按需使用
用途 针对具体用途为特定用户提供打包资源 针对多种用途为用户群组提供不同资源
使用寿命 数年(长期) 数小时至数月
成本 资本支出(CAPEX)高
运营支出(OPEX)低
共有云:CAPEX高、OPEX低
私有云:CAPEX低、OPEX高
可扩展性 纵向扩展 横向扩展
工作负载 有状态 无状态
租赁 单一租户 多个租户

虚拟化技术

按照虚拟化的对象分类,虚拟化可分为服务器虚拟化、操作系统虚拟化、存储虚拟化、网络虚拟化等。其中服务器虚拟化对CPU、内存、设备与I/O这三种硬件资源的虚拟化技术已经相当成熟,但对GPU的虚拟化却还有很大的提升空间。下面将分别介绍服务器虚拟化中CPU虚拟化及GPU虚拟化相关的技术,然后对现在主流的虚拟化平台做一些比较。

一、CPU虚拟化

目前,为了解决x86体系结构下的CPU虚拟化问题,业界提出了全虚拟化和半虚拟化两种不同的软件方案。除了通过软件的方式实现CPU虚拟化外,业界还提出了在硬件层添加支持功能的硬件辅助虚拟化方案来处理那些敏感的高级别指令。

全虚拟化在宿主机底层物理硬件与VM之间增加一个软件层,即虚拟机监控器(VMM或hypervisor),此时,VMM充当主机操作系统,用来管理不同的虚拟机,如图1所示。它隐藏了特定计算平台的实际物理特性,为用户提供抽象的、统一的、模拟的计算环境(称为虚拟机)。在VMM平台上,可以模拟出多套虚拟机,实现了在单机上运行多个不同类型操作系统的虚拟机。全虚拟化的优点是不需要修改客户机操作系统,因此支持多种操作系统,缺点是VMM层工作负荷较大,并占用一定的宿主机资源,性能不如裸机。主要代表有VMware vSphere,Microsoft公司的Virtual PC、Redhat公司的RED HAT ENTERPRISE VIRTUALIZATION等。

全虚拟化架构

半虚拟化与全虚拟化类似,不同之处是需要修改客户机操作系统的核心代码,即增加一个专门的虚拟化应用程序接口,优化客户操作系统发出的指令,与VMM能够协同工作,以减轻VMM和宿主机的负担,进一步提升了虚拟机的性能,如图2所示。缺点是需要修改客户操作系统,影响了技术的普及。主要代表有使用开源虚拟化技术的Citrix的Xenserver、Microsoft的Hyper-V 。

半虚拟化架构

为了更好地实现全、半虚拟化技术,Intel与AMD对传统X86架构进行改进,分别设计了Intel-VT和AMD-V CPU硬件辅助虚拟化技术。将原来的特权等级Ring 0、1、2、3 定义为Non-Root mode,新增了一个Root mode 特权等级(或称为Ring -1),这种情况下,OS 即可运行在原来Ring0 的等级,而VMM 则调整到更底层的Root Mode 等级,其架构如图3。硬件辅助虚拟化有效地解决了虚拟机效率低的问题,它使虚拟机可以运行ring 0 的指令,不用再进行操作系统的ring 切换,提高了虚拟机的整体效率。 现在主流的半、全虚拟化产品都支持硬件辅助虚拟化,代表有Oracle公司的VirtualBox、RHEV、VMware vSphere和Xneserver。

硬件辅助虚拟化

二、GPU虚拟化

GPU虚拟化相关技术还垄断在少数厂商手中,并没有像CPU、内存、存储一样在开源社区推广普及。下面将介绍三大显卡厂商GPU虚拟化的发展。

NVIDIA,早在2013年,NVIDIA就推出了行业内第一款GPU虚拟化显卡GRID K1/K2,同期联合Citrix推出了商用的vGPU虚拟桌面解决方案,这比AMD提前了近3年。GPU虚拟化技术的出现,给一直被诟病性能不足的桌面虚拟化带来了转机。在2016年,NVIDIA推出第二款GPU虚拟化显卡,Maxwell架构的Tesla M6/M10/M60,新版的GRID将使用授权分为 3 个不同版本,依据版本不同收取额外软件授权使用费。 在2017年8月份NVIDIA推出了最新版GRID 5.0,虚拟化显卡新增Pascal架构的Tesla P4/P6/P40/P100,其中Quadro Virtual Datacenter Workstation版的授权支持vGPU在图形渲染模式和高性能计算模式之间切换,这是硬件厂商首次在vGPU层面将图形渲染和高性能计算进行了统一,又一次引领了行业趋势和市场需求。NVIDIA的虚拟化显卡只是硬件,还需要相应的服务器虚拟化系统的支持,这和Intel的CPU需要操作系统Windows和Linux来配合一样。现在只有Xen和ESXi能够支持GRID virtual GPU solution,被大量第三方厂商采用的KVM虚拟化平台还没有出现在GRID的支持列表中,因此可以说GPU另外一只脚还没能踏进云计算时代。2017年7月份NVIDIA和Nutanix宣布将合作在年底推出AHV版本的GRID,这算是KVM虚拟化走出了第 一步。在解决GPU虚拟化后,如何将虚拟机的画面传送到客户端,这是KVM虚拟化可以商用的第二步。KVM上默认配置的Spice协议对3D的支持并不好,Nutanix以及其他KVM方案解决商还需自行开发出可用的桌面传输协议,这才算是彻底完成了GRID在KVM上的应用。

AMD,AMD在NVIDIA推出GRID K1/K2 的两年半后才推出了自己的GPU虚拟化产品MxGPU,算是姗姗来迟。共有三款FirePro S系列的GPU支持MxGPU,一块GPU最多可以支持 32 个用户。当MxGPU上的虚拟机比较少时,能够达到图形工作站的性能。随着虚拟机数量增多,每个虚拟机获得的GPU性能逐步降低。有别于NVIDIA GRID通过软件实现的显卡虚拟化方式,AMD MxGPU是“全球首款基于硬件的虚拟化GPU解决方案”。MxGPU每个虚拟机能分得一定数量的独享流处理器和显存空间,这样可以避免不同虚拟机对GPU资源的抢夺,造成用户噪音。这种噪音问题直到今年8月底推出NVIDIA GRID 5. 0 才得到解决。MxGPU在定价上采用的是更符合买方逻辑的营销方法,只向用户收取需付硬件的购买费用。不过遗憾的是,目前只有VMware的ESXi支持MxGPU,Xen暂时只有技术验证版。没能同时支持两种主流化的虚拟化系统,一定程度上阻碍了MxGPU在市场的普及速度。Citrix的用户还是可以用过vSphere+XenDesktop的方案用上MxGPU,相比使用免费的XenServer,要多支付vSphere的费用。

Intel,Intel官方将不同的Intel GPU虚拟化技术分别命名为Intel GVT-s,Intel GVT-d和Intel GVT-g,分布对应API转发,直通,完全虚拟化。Intel GVT-g和NVIDIA vGPU类似,支持Xen/KVM平台,每个GPU最多能分享给7个用户同时使用。其中XenGT在 2016 年最早实现了业界的vGPU在线迁移,NVIDIA GRID直到这个季度才和Citrix合作完成了vGPU在线迁移。 2016 年的 2017 年2月份,Linux 4.10中加入Intel GVT-g for KVM。这是三大GPU厂商中,第一个支持KVM平台的完全虚拟化方案,意味着第三方采用KVM的云计算厂商终于有了一个可用的vGPU方案。不过Intel GPU虚拟化,由于核显性能的原因,只能满足图像密集型的用户体验,不能像GRID vGPU和MxGPU一样满足图形渲染的重度使用场景。Intel GPU虽然支持了大多数虚拟化桌面厂商使用的Xen/KVM两大类服务器虚拟化系统,可是硬件却和VDI高密度的使用场景不太搭。首先Intel的完全虚拟化只支持Broadwell架构以后的核芯显卡,作为VDI服务器中常用的Xeon E5/E7 v4 系列,以及第 一个的Xeon Scalable处理器,都没有核芯显卡。这在很大程度上限定了Intel GPU虚拟化在VDI的使用规模,有种落入有枪无弹的尴尬境地。

三、虚拟化平台比较

服务器虚拟化技术日益成熟,并具有广泛的应用前景,目前有很多厂商进行虚拟化技术产品的开发和生产,包括:VMware、Microsoft、Citrix、IBM和RedHat等,其各自产品都有不同的特点,产品功能日益强大。下面将比较一下四种主流服务器虚拟化平台,如下表 :

VMware Xen KVM Hyper-V
厂商 VMware Citrix Red Hat Microsoft
是否免费 付费 开源免费 开源免费 付费
宿主机系统 Windows
Linux
NetBSD
Linux
Solaris
Linux Windows server 2008及以上系统
客户机系统 Windows 2003、Windows 2008、RedHat、Debian、Ubuntu、Centos Xen-PV:纯Linux;Xen-HVM:支持Windows、Linux Linux、Windows Windows系列、Linux
支持技术 硬件辅助虚拟化(全虚拟化) 硬件辅助虚拟化(HVM全虚拟化、PV半虚拟化) 硬件辅助虚拟化(全虚拟化) 硬件辅助虚拟化(半虚拟化)
支持的vGPU产品 NVIDIA GRID
AMD MxGPU
NVIDIA GRID
AMD MxGPU(技术验证版)
Intel GVT-g for KVM
优点 相对成熟的商业软件,市场占有率较大 性能较好,支持半虚拟化 是内核本身的一部分,因此可以利用内核的优化和改进;高性能,稳定,无需修改客户机系统 对Windows的支持较好
缺点 不开源,费用较高 操作复杂,维护成本较高,目前已被RedHat抛弃 虚拟机性能比Xen略低 对Linux的支持较差,性能损失大

开源云计算平台Openstack对这四种虚拟化平台都有支持,默认使用的是KVM,Openstack与KVM结合的方案也已经相当成熟。另外,考虑到KVM是开源免费的虚拟化技术;宿主机系统支持绝大多数Linux系统,对于使用Linux系统的服务器都有很好的支持;而客户机操作系统不仅支持Linux,还支持Windows,可以满足绝大多数用户的需求,因此选择KVM作为Openstack底层的虚拟化技术的理由是很充分的。不过,KVM对于虚拟GPU的支持不是很好,只有Intel GVT-g for KVM可以支持KVM平台的全虚拟化方案,但是Intel GPU虚拟化由于核显性能的原因,只能满足图像密集型的用户体验,不能满足图形渲染等重度使用的场景。

云计算平台

目前已经有多个云计算平台的开源实现,主要的开源云计算项目有Openstack、Eucalyptus、CloudStack和OpenNebula等,现比较如下:

Openstack Eucalyptus CloudStack OpenNebula
发布时间 2010年7月 2008年5月 2010年5月 2008年7月
最新版本 Queens 4.4 4.11 5.4
授权协议 Apache v2.0 GPL v3.0 Apache v2.0 Apache v2.0
基本架构 Nova、Glance、Neutron、Keystone、Horizon、swift、Tacker等 Cloud Controller、Cluster Controller、Node Controller、Walrus、 Storage Controller 主要包括管理服务、云基础设施和网络三大部分 主要包括接口与API、用户与组、主机、网络、存储、集群6个部分
虚拟化技术支持 KVM、LXC、QEMU、UML、Vmware ESX/ESXi、Xen、Hyper-V Xen、KVM、ESXi KVM、Xen、ESXi、OVM、Baremetal Xen、KVM、Vmware
用户界面 Dashboard,较简单 web界面 Web Console,功能较完善 web界面
社区活跃程度 人数多,活跃用户数最多 人数多,但活跃用户数较少 人数少,但活跃用户数较多 人数较少,活跃用户数也少
兼容云平台 Amazon EC2,S3 Amazon EC2,S3 Amazon EC2,S3 Amazon EC2,S3
开发主导 开源社区 Eucalyptus System Inc Citrix公司 开源社区
主要支持厂商 160家左右,包括NASA、Rackspace、HP、Dell、UnitedStack等 亚马逊、戴尔、惠普、Intel、Redhat、Vmware等 不到60家,包括诺基亚、日本电话电报公司、阿尔卡特、迪士尼等 IBM、Akamai、Blackberry、Fuze、Telefonica、Indigital
官方文档 非常详细 不够详细 详细 详细
检测和审计 Telemetry Service Accounting system Event/Audit logs Accounting system、periodically-Monitoring
数据库 PostareSQL、MySQL、SQLite HyperSQL Database MySQL SQLite、MySQL
部署 私有云、共有云、混合云 私有云、混合云 私有云、共有云、混合云 私有云、共有云、混合云
操作系统 Debian 7.0、openSUSE、SUSE、Red Hat、CentOS、Fedora、Ubuntu CentOS、RHEL CentOS、RHEL6.3+、Ubuntu Red Hat、Ubuntu、SUSE、CentOS、Debian
开发语言 Python Java、C/C++ Java C、Ruby、shell
开源市场部署比例 69% 3% 14% 无统计数据

这四种主流的开源云计算平台都经过了近十年的发展,更新迭代了很多版本,能够从众多云计算平台的竞争中存活下来,都有相应的支持厂商和用户,说明它们各有各的特点,如在开发语言上就各有特色,Openstack使用的是Python语言,Eucalyptus使用Java、C/C++,CloudStack仅使用Java,而OpenNebula却显得比较奇怪,使用的是C语言、Ruby和shell,多种语言混杂而成。但不同平台之间还是有较大差距,从结果来看,在开源市场的部署比例,Openstack 69%的比例占据了绝对统治地位,Openstack能占据这样的地位有多方面的原因,如Openstack支持绝大多数的虚拟化技术,支持的操作系统也很多,使得Openstack具有广阔的应用范围;Openstack的官方文档非常详细,也降低了其学习成本;Openstack具有一个充满活力的开源社区,开发者不断为Openstack的发展作出贡献;OpenStack的支持厂商有160家左右,有如此多的厂商支持,给OpenStack的发展提供了根本保障。综合以上多方面的原因,本项目采用Openstack作为底层的云计算平台为上层提供基础设施资源也是理所当然的。另外,在2018年2月28日发布的Openstack Queens最新版本中,新引入的Marquee功能正是为了提供对vGPU的内置支持能力,这意味着用户能够将GPU添加至虚拟机中,为本项目的上层应用,如深度学习等需要强大GPU运算能力的应用提供了支持。

总结

通过以上的分析,能够清楚的了解各种虚拟化技术及各种云计算平台的差异,对于要选择满足自己需求的技术与平台会有一些帮助。