虚拟化平台至今已经发展了十多年的时间。其中 Hyper-V 技术现在也已经是第三代版本。用户对于虚拟化计算也越来越接受,这也有了公有云发展的基础。然而在很多时候,用户在使用基于 Hyper-V 的 Azure 平台时,仍然有关于虚拟机计算能力的疑问,例如 :

虚拟化的功能的确很强大,但是会不会有性能问题,运行在 Hyper-V 平台的虚拟机是不是比 Hyper-V 服务器的性能要差?

在 Azure 平台上,由于 Azure 是多租户的系统,为了公平起见,是不是所有同一个大小,或是同一系列的虚拟机都会部署在同一种型号的物理服务器上?

我看到有的虚拟机使用的是 Intel 系列的 CPU,有的服务器使用的是 AMD 的 CPU,它们的主频,性能都不同,为什么收费是相同的,是不是当中存在欺诈和不平等的行为?

今天,我们来详细了解一下 Azure(Hyper-V)平台上的虚拟机计算能力。在具体了解虚拟机的计算能力之前,我们先来设定一个计算能力的衡量标准。目前业界有很多 CPU 的评测工具。为简单起见,我选择的是 wPrime,原因是:

容易使用,测试方法就是计算 10 亿内的所有自然数的平方根。

可以很方便选择多个工作线程,这样在多 CPU 的虚拟机上可以灵活配置。

测试不涉及内存和磁盘系统,结果也相对单纯。运算时间越长,运算能力越差。

需要指出的是 wPrime 只是为了便于本文描述性能而采用的工具,其仅仅测试了虚拟机 CPU 能力的某一个方面,并不代表微软官方对于虚拟机计算能力的测试方法。本文中实测的数据仅仅是来自于一个或几个特定实例,更多是用于表达不同虚拟机大小之间的比例关系,不作为官方衡量的依据。

针对于某些虚拟机计算能力的测试,实际上官方已经公布了一些数据。而这些数据是基于业界公认的测试方案,如 SPECint 2006 等。

Linux VM 的计算基准测试分数

Windows VM 的计算基准测试分数

众所周知, Azure 平台是基于 Hyper-V 架构的。为了理解 Azure 平台的虚拟机计算能力,我们需要初步了解下 Hyper-V 架构。

 

此处并不需要详细了解图中所有方格代表的组件的工作原理,只需知道 Hyper-V 平台存在两种分区(Partition)。其中最常用的一个分区,Child Partition,也就是我们通常意义上讲的虚拟机。值得注意的是另一个特殊分区,Root Partition,它是一个管理分区,用来管理物理主机的设备驱动、电源管理、设备热插拔等。同时,也是唯一可以直接访问物理主机硬件资源的分区。此时,大家可能已经明白,在一台 Hyper-V 服务器上,当我们连接上电源、键盘、鼠标、显示器,在本地登录时,我们实际上就是登陆了 Root Partition 这样一台虚拟机。而其他的 Child Partition 和 Root Partition 是并行的关系,Child Partition(虚拟机)并不是运行在 Root Partition 内部的。

问题一:通常运行在所谓的控制台(Console)中的应用程序,实际上是运行在 Root Partition 这样一台虚拟机里的。那 Root Partition 和 Child Partition 的运算能力有区别吗?通过 wPrime 进行第一个计算能力测试:在 Hyper-V 主机(Root Partition) 以及与其属于同一物理服务器中的同样核数的虚拟机上计算 10 亿内的所有自然数的平方根。为保证数据准确,每台机器计算两次。结果如下:

分区测试一测试二CPU 性能

Child Partition236 秒236 秒

 

Root Partition227 秒229 秒

 

考虑到虚拟机内部在测试时还有一定的 CPU 使用,以及 Root Partition 在 Hyper-V 的框架中的确有一些优势,但是从测试结过上看,差距微乎其微,在 3% 左右。因此,为个人认为从计算能力来看,Child Partition 和 Root Partition 是不存在差异的。

另外,我们注意到,Root Partition 和 Child Partition 显示的 CPU 的型号是一致的,都是 i7-4770 @3.4GHz。其实这在 Hyper-V 的架构上也可以理解。我们可以把物理主机的 CPU 资源看作是一个资源池,这个资源池原则上根据虚拟机的逻辑 CPU 的个数,来平均分配给各个虚拟机。当每个 CPU 使用自己的时间片时,他就可以使用物理 CPU 的主频来完成自己的计算任务。

这时,大家可能有一个疑问,在同一台 Hyper-V 主机上运行的虚拟机的 CPU 是否有同样的计算能力?换句话说,这些逻辑 CPU 是不是能够以同等机会拿到 CPU 的时间片,当它拿到 CPU 时间片后,是不是就能够以物理主机的主频来完成计算任务?我们来看一看 Hyper-V 上的虚拟机的 CPU 配置就清楚了:

 

在 Hyper-V 控制台程序中,对于虚拟机 CPU 配置有以下几部分:

CPU 配置缺省值说明

Virtual Machine Reserve缺省为 0系统为该虚拟机保留的 CPU 资源

Virtual Machine Limit缺省为 100该虚拟机可以达到的性能比例

Relative Weight缺省为 100该虚拟机在系统分配资源时的比重

第一个选项为虚拟机保留更多的资源,第二个选项限定了虚拟机是否可以完全使用物理资源,第三个选项设定了该虚拟机同其他虚拟机相比取得 CPU 时间片的几率。其中第二第三个选项回答了我们之前的疑问:在同一台物理主机上运行的虚拟机,他们取得时间片的几率是可以调整的,当虚拟机获得时间片之后,我们也可以限定它是否可以完全利用 CPU 的最大性能。简单的进行测试,当我们把 Virtual Machine Limit 的值从 100 改成 50,即表明该虚拟机只可以使用 50 的最大性能,测试结果如下:

Virtual Machine Limit测试一测试二CPU 性能

Limit = 100330 秒332 秒

 

Limit = 50680 秒679 秒

 

从测试中可以看出,当虚拟机的上限被设定时,虚拟机的计算能力也相应被限定,尽管 Task Manager 中 CPU 的硬件型号及处理速度还和物理硬件保持一致。

小结

Root Partition 和 Child Partition 在计算能力上没有显著的差异。

虚拟机的 CPU 类型与其物理主机的类型一致。它仅仅是一个硬件信息,而不代表计算能力。

在同一台物理主机上运行的多个虚拟机,Hyper-V 完全有能力控制单个虚拟机的计算能力。

同时,这也回答了我们在文章开头提到的第二个问题,同一大小,同一类型的虚拟机并不是一定部署在同一种硬件设备上。Hyper-V 可以控制虚拟机的计算能力。

在 Azure 平台上,我们定义了很多虚拟机的大小标准,其中只有 Dv2 系列和 F 系列的虚拟机指定了其是基于最新一代 2.4 GHz Intel Xeon E5-2673 v3 (Haswell) 处理器。对于其他系列的虚拟机,Azure 并不保证其 CPU 的架构是 Intel 或是 AMD。另外,对于 A 系列的虚拟机,可以被放置在很多不同 CPU 类型的物理主机上。由于物理机房的服务器是在持续更新的过程中,其物理主机的运算能力存在差异。但是根据我们之前的对于 Hyper-V 主机的分析可以得知,通过限定虚拟机 CPU 资源(可以获得的时间片的几率,可以使用的物理资源的限定)的获取,尽管主机的类型不同,用户得到的是一致的 CPU 处理性能体验。

既然说到是一致的计算能力体验,就存在一个衡量的标准。这也就是在 Azure 中引入 Azure Compute Unit(ACU)的原因。ACU 并不是一个绝对数值,而是我们将 A1 系列的虚拟机的单个 CPU 计算能力定为 100,其他大小的虚拟机的单个 CPU 计算能力为 A1 的倍数。例如,Dv2 系列虚拟机的单个 CPU 的计算能力是 A1 系列的 2.1 到 2.5 倍,其 ACU 值为 210 到 250。我们在 A,Av2 和 D 系列上来重复 wPrime 测试 :

A: Intel Xeon E5-2660 0 @2.20GHz

Av2:Intel Xeon E5-2660 0 @2.20GHz

Dv2:Intel Xeon E5-2673 v3 @2.40GHz

大小CPU 数ACU/CPUACU 总计测试一测试二实测计算能力

A111001003830 秒3822 秒100

A221002001926 秒1896 秒200

A34100400952 秒940 秒404

A48100800476 秒471 秒807

A1_v211001003853 秒3729 秒101

A2_v221002001883 秒1845 秒205

A3_v24100400923 秒967 秒405

A4_v28100800466 秒466 秒821

D1_v21210-250210-2501826 秒1833 秒209

D2_v22210-250420-500902 秒902 秒424

D3_v24210-250840-1000429 秒428 秒894

D4_v28210-2501680-2000221 秒221 秒1731

Note

实测计算能力以两次测试的平均值与 A1 的平均值 3826 相比,得到的计算能力。

在测试过程中,有 A 系列的虚拟机是使用 AMD Opteron Processor 4171 HE 的 CPU。根据 wPrime 的测试结果,A1 到 A4 之间虽然保证相应的比例关系,但不难发现同之前的 Intel 系列 CPU 的结果差距较大。其实这也是一个正常的结果,CPU 计算能力的测定往往同测试程序的编译代码,CPU 架构,服务器设计息息相关。在考虑 CPU 的计算能力时,往往需要综合考虑整型计算,浮点计算等等的测试结果。

大小CPU 数ACU/CPUACU 总计测试一测试二

A111001002867 秒2832 秒

A221002001462 秒1389 秒

A34100400724 秒719 秒

A48100800350 秒345 秒

针对于使用不同 CPU 架构的虚拟机的计算能力,微软内部测试结果(结果暂未公开)表明,针对于 A 系列的虚拟机,AMD Opteron Processor 4171 HE 的单个 vCPU 的计算能力稍稍高于 Intel Xeon E5-2660 0 @2.20GHz,但误差也仅仅在 5% 附近。这个数据可能和大多数用户印象中的结论相反。使用 AMD 处理器的虚拟机在性能上并不弱于 Intel 处理器。

从以上的测试结果以及架构分析中,我们可以确认尽管在 Azure 平台存在不同的物理主机类型,但是这对于 Azure 标注的虚拟机计算能力,用户可以得到一致的计算能力。

不同的主机型号,不同的 CPU 架构, ACU 数值可以得到控制以保证一致的计算体验。

当虚拟机的大小改变时,实际的计算能力根据 ACU 的标称值线性增长。

不同的虚拟机系列,都可以根据以 A1 系列换算的 ACU 数值,达到相应的计算能力。

立即访问http://market.azure.cn

理解 Azure 平台中虚拟机的计算能力的更多相关文章

  1. 理解 Azure 虚拟机的性能监视

    随着越来越多的用户将生产应用迁移到云平台,一些传统 IT 的运维功能也相应的需要改变,例如监控,备份等等.我们希望通过这一系列的文章来协助用户更好的理解在 Azure 云平台上实现资源监控的方法. 在 ...

  2. Windows Azure 虚拟网络中虚拟机的网络隔离选项

     最近我们发布了一份<Windows网络安全白皮书>(单击此处下载),文中深入说明了客户可以如何利用该平台的本地功能,为他们的信息资产提供最好的保护. 由首席顾问Walter Myer ...

  3. Azure 中虚拟机的区域和可用性

    Azure 在中国的两个数据中心运行. 这些数据中心分组到地理区域,让用户可灵活选择构建应用程序的位置. 请务必了解 Azure 中虚拟机 (VM) 运行的方式和位置,以及最大化性能.可用性和冗余的选 ...

  4. [转载] 深入理解Android之Java虚拟机Dalvik

    本文转载自: http://blog.csdn.net/innost/article/details/50377905 一.背景 这个选题很大,但并不是一开始就有这么高大上的追求.最初之时,只是源于对 ...

  5. Azure开发者任务之三:理解Azure应用程序(上)

    作为Windows Azure的托管服务被设计和开发的应用程序由这两部分组成: 1,托管代码 2,XML配置文件 托管代码对应不同的角色 XML文件对应不同的配置设置 我们可以看一下下面这张图,它详细 ...

  6. 阿里云至 Windows Azure 的 Linux 虚拟机迁移

    在Windows Azure中,用户可以对部署在Azure中的虚拟机的映像.磁盘以及快照进行生成和下载.用户可以方便地将Azure中的虚拟机实例迁移到本地.私有云甚至其他公有云平台进行测试.扩展或者再 ...

  7. 基于开源软件在Azure平台建立大规模系统的最佳实践

    作者 王枫 发布于2014年5月28日 前言 Microsoft Azure 是微软公有云的唯一解决方案.借助这一平台,用户可以以多种方式部署和发布自己的应用. 这是一个开放的平台,除了对于Windo ...

  8. 深入理解Node.js中的垃圾回收和内存泄漏的捕获

    深入理解Node.js中的垃圾回收和内存泄漏的捕获 文章来自:http://wwsun.github.io/posts/understanding-nodejs-gc.html Jan 5, 2016 ...

  9. 深入理解Android之Java虚拟机Dalvik

    一.背景 这个选题非常大,但并非一開始就有这么高大上的追求. 最初之时,仅仅是源于对Xposed的好奇.Xposed差点儿是定制ROM的神器软件技术架构或者说方法了. 它究竟是怎么实现呢?我本意就是想 ...

随机推荐

  1. Javac中对import关键字进行的处理

    参考文章: (1)关于类的符号输入过程第二篇 ImportScope中存储的为ImportEntry,继承了Scope.Entry类并且多定义了个origin属性,也就是符号的最终来源.除此之外还对g ...

  2. 前端通信:ajax设计方案(八)--- 设计请求池,复用请求,让前端通信快、更快、再快一点

    直接进入主题,本篇文章有点长,包括从设计阶段,到摸索阶段,再到实现阶段,最后全面覆盖测试阶段(包括数据搜集清洗),还有与主流前端通信框架进行对比PK阶段. 首先介绍一下一些概念: 1. 浏览器的并发能 ...

  3. 第三方登录:QQ登录实现(OAuth2.0)

    一.创建应用 1.在 QQ互联 创建应用 地址:https://connect.qq.com/manage.html#/ 然后进行实名认证,创建应用,审核通过 然后点击查看,可以获得 APP ID 和 ...

  4. SpringMVC之表单校验

    SpringMVC已经实现了对Java校验API(JSR-303)的支持,通过使用该API可以实现对数据的校验.要使用SpringMVC的Java校验API并不需要任何配置,只要引入其实现即可.本文使 ...

  5. 【详解】ThreadPoolExecutor源码阅读(一)

    系列目录 [详解]ThreadPoolExecutor源码阅读(一) [详解]ThreadPoolExecutor源码阅读(二) [详解]ThreadPoolExecutor源码阅读(三) 工作原理简 ...

  6. 后台线程(daemon)

    概念     所谓后台线程,是指在程序运行的时候在后台提供一种通用服务的线程,并且这种线程并不属于程序中不可或缺的部分.因此,当所有的非后台线程结束时,程序也就终止了,同时会杀死进程中的所有后台线程. ...

  7. [转]oracle in 多个字段

    本文转自:https://www.cnblogs.com/Springmoon-venn/p/7016409.html oracle 使用in的时候使用多个字段 这个也是刚需啊. 最近有个需求,在一堆 ...

  8. MVC会员注册

    自从写了<数据库数据加密与解密>http://www.cnblogs.com/insus/p/3434735.html.其中也有提及Insus.NET将要在MVC应用程序中实现会员注册的功 ...

  9. MFC函数—CSingleDocTemplate

    前提:在InitInstance() 函数的初始化过程中,我们可以看到代码CSingleDocTemplate* pDocTemplate; pDocTemplate = new CSingleDoc ...

  10. input点击链接另一个页面,各种操作。

    1.链接到某页<input type="button" name="Submit" value="确 定" class="b ...