前言
本文主要介绍如何对VMware vSphere架构的CPU、内存、存储、网络及虚拟机进行性能调优。将贯穿观念中那些有性能限制的领域,打消虚拟化和性能相悖的旧观念,最重要的是通过一个个小的案例展现如何在虚拟化环境中实现性能调优,让虚拟化技术发挥其最大优势,助力业务提升效率,按需扩展,灵活多变。具体的软件实施,不在本文做详细说明。有需要的朋友,可以参考本文结尾的“参考资料”。
CPU性能优化
CPU资源的分配对于保证虚拟化环境的最佳性能很重要。现在的处理器一般为每个进程都配比了多核处理器,还提供了多种技术帮助提高虚拟化环境的性能,比如Intel-VT和AMD-V等硬件虚拟化及加速技术。CPU虚拟化技术使得虚拟机可以直接在物理处理器上执行大多数的指令,可以使多个虚拟机一起运行来直接访问一个物理处理器。
物理CPU与虚拟CPU之间的关系
在做CPU性能优化前,理解什么是物理CPU?什么是虚拟CPU?是个很重要的前提。目前几乎所有的处理器,无论X86架构还是Power架构,对每一个封装都有多个物理处理器内核。一般规格为4、6、8、12核,有的甚至更多。在VMware ESXi中,每一个物理处理内核被检测为一个物理CPU,如果Intel处理器上有超线程,那么每个物理处理器内核都会有两个硬件线程,ESXi就能检测到每个线程作为一个物理CPU。虚拟CPU是针对虚拟机上的CPU而言,每个虚拟机至少配置一个虚拟CPU。VMM调度每个虚拟CPU在任何可用的物理CPU上运行,可以定义任何虚拟机在给定时间内可以同时访问的物理CPU的数量。
ESXi CPU如何工作
VMware vSphere ESXi中的CPU通过复杂的调度算法接收和执行用户及外界的指令,按照设定好的策略依次执行,下面将介绍一下ESXi中CPU的几个主要的动作。
CPU的比例分配算法:
当发生在多个虚拟机之间竞争资源的时,ESXi则使用比例分配算法来决定哪一个虚拟机应该使用更多的CPU和内存资源。比例分配算法可以让VMware ESXi调度程序通过将每个执行语境在可用物理处理器资源的一个共享相关联,从而进行重要的调度计算。根据资源配置标准,如分享、保留、限制,所计算出的分享权益会被分配到每个执行语境上。
CPU联合调度:
我们常见的联合调度分为严格联合调度和宽松联合调度。这种严格联合调度主要出现在VMware ESXi的早期版本中,当执行联合调度时,CPU调度程序在多处理器虚拟机的每个微CPU上会有一个累积的偏移。当一个单进程应用在多处理器的虚拟机上运行时,只有一个微CPU在物理处理上运行,而其他的微CPU都处于闲置状态,因此,只需要要求一个物理CPU可用就可以了。
宽松联合调度主要出现在VMware ESXi5版本以后,使得每个虚拟机上的每个微CPU进程都可以被单独追踪,偏移值是通过测量最慢的微CPU和其他每个微CPU之间的差异得到的。
ESXi的CPU性能调优
众所周知,VMware是虚拟化领域的领头羊,其为ESXi虚拟化层提供的默认设置在性能方面可以满足大多数企业的应用场景和需求。对于更严苛的业务需求,采用默认设置可能会影响虚拟化发挥其最大的优势。如何调优,就成了管理员必备的要求。
CPU性能如何诊断?哪些指标是性能调优最在意的?可以帮管理员尽快定位问?VMware在众多管理指令中提供了一个名为ESXtop的命令。通过输出结果可以清晰的看到CPU等相关的性能问题。管理员通过root身份登陆ESXi服务器,并输入C切换到CPU的分析界面。除了CPU可以监控CPU之外,也可以对内存、网络等性能进行观察。具体的使用方法,不在此文的讨论范围内。
表1:VMware esxtop CPU性能指标表
内存性能优化
内存的运算速度要比硬盘快很多,所以通常情况下,内存越大,服务器的应用速度较快。所有ESXi作为VM的载体,必然需要大内存的支持。那么在进行内存性能讲解之前,先介绍一些ESXi中内存的分层。
虚拟主机的物理内存
这个是指实际物理主机的物理内存,比如一台物理内存微256G的服务器,那么其实际物理内存就是256G;
虚拟机的物理内存
这个是指管理员实际分配给虚拟机使用的内存,可以被虚拟机直接调用的内存,仅仅对分配的虚拟机可见;
虚拟机的虚拟内存
这个是指虚拟机操作系统分配给应用程序的可用内存,这是虚拟机操作系统映射到虚拟机物理内存的地址空间;
ESXi内存如何工作
那么ESXi虚拟化软件是如何管理硬件的物理内存的呢?使其可以同时运行多个虚拟机,并且内存之间相互隔离,保证数据的稳定性和可靠性。
首先ESXi会将所有的物理内存虚拟化,为其上运行的不同的虚拟机创建一个个连续的虚拟内存地址空间。这些内存地址空间映射到虚拟机的物理内存,形成不同的内存空间。内存空间之间相互隔离,确保虚拟机内容的独立性和安全性。所有物理内存的分配调用,都需要ESXi来进行管理。特别需要注意的是,在向虚拟机分配物理内存前,ESXi管理程序会将主机物理内存置零,避免主机上不同虚拟机之间的信息泄漏,引起页面错误。
内存回收
虚拟化中的内存回收是个很专业的话题,技术难度也很高,目前仅有VMware实现了内存过量功能的管理。为了实现内存的回收,VMware主要通过以下几种方式进行,不同的环境采用不提供的方式,避免性能出现瓶颈,影响虚拟机的正常运行。
透明页共享
透明页共享(TPS)是主机物理内存回收的一种简单而有效的方式。原理是将相同镜像或者应用的内存冗余页做成单一的共享页面,只保留一个内存页的副本。因此,虚拟机主机内存占用总量减小,可以提供更多的内存给不同页面的虚拟机,从而也实现了内存过量。
内存膨胀
为了实现内存膨胀,需要每个虚拟机安装VMware Tools,以为Tools内置了内存膨胀驱动来实现这一功能。当ESXi物理内存处于高压状态,就会触发内存膨胀机制来收回内存。管理程序会通知虚拟机上的内存膨胀驱动,给超过阈值的虚拟机分配“空闲的”虚拟机物理内存页去扩大内存。当然默认是没有启用的,启用此功能会在一定程度上影响虚拟机的性能。
内存压缩
ESXi通过内存压缩技术可以将一部分本该分页到磁盘的虚拟机内存也进行压缩。压缩的内存页存储在虚拟机主内存的压缩高速缓存中。当检测到内存页压缩比率低于50%时,该内存页不会被压缩,而是通过管理程序内存交换交换到磁盘,ESXi只会使用管理程序交换未压缩的内存页,不会把已压缩的内存页交换到磁盘。
管理程序内存交换
在VM的配置文件中,有个后缀名为.vswp的文件,这个就是内存交换文件。通过此方法,ESXi可以将供给虚拟机使用的物理内存与物理磁盘设备进行交换,以达到释放内存的目的。此文件在虚拟机启动的时候即被创建,文件大小与虚拟机的内存 一样。
ESXi的内存性能调优
控制内存的占用比例即使用率,是保证VM及主机稳定、性能优越的前提条件。ESXi内置了内存性能调优工具-ESXtop。虽然VMware支持内存过量技术,但是建议不要随便使用,毕竟过量会引发内存膨胀及内存交换,影响虚拟机的整体性能。
表2:VMware esxtop内存性能指标表
存储性能优化
我们在设计虚拟化架构的时候,除了考虑CPU、内存、网络等因素外,更要对存储进行精心设计。不同的业务需求,对存储的类型也是有不同的要求。因为存储平台不同,意味着使用的协议和存储的特点也就不同。速度并非是选择合适存储的唯一条件,如协议、连通性、现有的基础设施和费用都要总和考虑。目前存储主要分为以下三种类型:
存储区域网络
简称SAN,是一种提供块级存储设备的专用网络。主机与存储之间通过光纤进行连接,多采用光纤交换机进行接口对接。SAN提供了一个存储中心,与其配合使用,淡化了本地存储的功能。主要协议有互联网小型计算机系统接口(ISCSI)、以太网光纤通道(FCoE)及光纤通信(FC)。
网络文件系统
除了块存储,ESXi也支持与网络文件系统(NFS)的连接共享以存储虚拟机和相关模板。主要通过网络传输,不需要购买额外的HBA卡。
虚拟SAN
又称VSAN,此概念是VMware在vSphere5.5以后推出的一个新特性。去除了使用NFS和SAN的限制,同时又保证了数据的高可靠性。通过将ESXi本地磁盘聚合在一起并将共享数据存储呈现给ESXi主机。支持横向及纵向灵活扩展,也是VMware近期主推的存储架构。
如何设计物理存储
合理的设计和选型物理存储是虚拟化解决方案成功的重要环节。存储设计的好坏,直接影响整体虚拟化环境的性能好坏。存储的类型、RAID的配置、网络和很多其他方面都会对虚拟化环境的性能产生很大影响,以下是对共享存储的设计建议:
业务需求
技术永远是为业务服务的,任何优秀的架构设计都需要对业务需求理解透彻,否则做出来的架构将不具备任何价值。所以业务需求的确定是着手设计的第一步。
RAID级别
又称磁盘冗余阵列,不同的RAID级别,可以满足不同等级的业务需求。简单的说,RAID是一种将多个物理硬盘驱动器整合并作为一个或多个逻辑驱动器呈现的技术。主流的RAID级别有,0、1、5、、10等。数字越高,其安全等级越高,防止数据丢失能力越强。
固态盘的使用
随着技术和硬件的不断发展,硬盘的类型也得到了扩展。从之前的机械硬盘,到现在的固态硬盘和纯闪存盘。速度越来越快,I/O吞吐越来越大。并不是说在整体的存储架构中,哪种盘一定好,为了获得最大的性能,一定要结合业务需求,合理搭配使用。对于永久数据的保存,建议使用机械硬盘。但是对于缓存区域和热数据区,建议采用SSD或者Flash disk。
IP存储网络
IP网络存储技术完全依赖于以太网的传输。在某些情况下,我们也要考虑结合IP存储网络来进行架构的非关键组件的弥补。从成本考虑,光存储网络和SSD等硬件虽然速度快,但是成本较高。例如ISO等镜像问题,由于不是经常调用,可以存放于IP网络存储中,采用NFS或者ISCSI进行呈现。
如何设计虚拟存储
VMware的VSAN不同于其他我们熟知的存储,既不是NFS也不是VMF,它是vSphere 5.5版本以上才有的一种虚拟SAN存储。它通过整合所有ESXi计算节点的本地硬盘资源,创建一个可以被集群中所有ESXi共同访问的逻辑数据存储。虚拟机文件等其他数据可以在主机之间复制,使得单个主机损坏,不会发生单点故障,影响业务正常。当然VSAN也有一些注意事项,避免性能瓶颈:
固态盘
VSAN中的每个存储组必须有一块SSD盘来创建数据存储,而且要求有一个能够直通的硬盘驱动控制器,可以将每个单独的磁盘驱动数据提交给vSphere。其中SSD主要作为缓存层,一般SSD与机械盘的比例是1:10。
存储策略
VMware将VSAN定义为软件定义存储,通过定义存储策略对存储资源进行管理。通过策略管理员可以定义一组特点的可用性、性能和大小的要求并允许vSphere在部署新的虚拟机的时候管理VMDK的位置和选择正确的数据存储。
网络
由于是通过以太网进行连接,所以VSAN依靠同步复制在各个ESXi主机中复制数据,从而对网络的要求较高。因为其对延迟的容忍度很低,网络延迟的增加,可能会导致严重的性能下降。强烈建议采用至少10G网络负载ESXi之间的复制压力。
ESXi的存储性能调优
网络性能优化
网络性能的好坏直接影响用户最终的体验。虚拟化的所有数据传输,几乎都是通过网络进行的。用户对数据提取,主机与主机之间的数据复制等。越是复杂的网络,越要精细化设计,做好合理的规划,否则一旦投入生产使用,就会带来很多不必要的麻烦。
ESXi的网络设计
ESXi的网络设计主要分为两种,物理网络设计和虚拟化网络设计。不同的层次网络设计,需要配置的和支持的团队也不同,一般物理网络的设计主要是由公司的网络部门负责,而虚拟化网络一般是云计算团队负责。
物理网络设计:
在网络设计的过程中,应该确保每一条网络路径都应该是冗余的,避免单点故障。
确保主机与主机之间的复制通道具备足够的带宽,避免大流量造成数据延迟。
确保具备足够的物理网络上行链路,以提供网络隔离和环境要求的冗余。
确保数据网络、Kernel和管理网络的隔离。
虚拟化网络设计:
主要分为标准交换机和虚拟交换机,行业中一般较小的环境建议采用标准交换机,较大的环境建议采用分布式交换机。因为分布式交换机在可扩展性、功能性以及向后延续性都优于标准交换机。
标准交换机:
标准交换机是VMware最早的虚拟交换机,也是单机版交换机。每个主机的所有出入流量都要经过标准交换机,需要更多的管理开销。
适用于小规模的部署。
确保每个主机上每个vSwitch的部署和配置是一致的,避免虚拟机飘移后,网络无法通信。
分布式交换机:
适合大规模的部署,因为其实现了集中配置和管理,使主机设置更加统一。也是VMware平台的网络增强版。
合理使用网络I/O控制
分布式交换机具备后期延伸的优势,提供负载均衡策略。
ESXi的分布式交换机
其实如何选择虚拟交换机完全取决于各自的业务需要。但是随着VMware的更新技术的发展,越来越青睐分布式交换机的应用,尤其是大环境的部署与应用。那么我们在部署分布式交换机的时候可以得到哪些提高性能的好处呢?
具备较好的向后扩能力,否则VMware技术的发展路线
支持NIOC功能,实现不同虚拟机使用不同网络资源的管理。尤其是在SDN中应用较广,实现多个功能共享较少的网卡。
提供负载均衡功能,能够有效的均衡跨物理网卡的流量负载。
提供Netflow和LLDP的管理功能,当虚拟化关键业务的时候,这个功能就显得尤为重要。
ESXi的网络性能调优
在以往的虚拟化环境管理工作中可以发现,绝大多数的性能问题主要来自于CPU、内存和存储,网络引发的性能瓶颈几乎没有。但是随着SDN、NSX等技术的出现,对网络的要求是越来越高,网络的优化也就越来越重要。
ESXi主机层面性能优化
通过多年的工作经验积累得出,好的网络性能应该从ESXi主机层次开始。
首先选择合适数量网卡的主机以保证冗余和性能。
虚拟交换机的负载均衡策略可以有效的对网卡之间的流量进行负载,避免单块网卡的流量瓶颈。所以建议无论在大与小的环境,尽量采用分布式交换机。
如果网络吞吐量增加,那么建议对ESXi的主机CPU也要进行增加。因为吞吐越大,需要的CPU处理量也就越大。
合理使用网络I/O控制功能,采用共享而不是阈值来控制网络流量。因为阈值是设置可以使用的最大限。而共享是依靠策略,通过优先级方式,对关键虚拟机进行流量优化。
vMotion的流量建议采用单独的网卡进行隔离,避免与其它的流量冲突。迁移的流量和FT的流量都会使用kernel的网卡。
虚拟机层面的性能优化
在所有的虚拟机中安装VMware tools,选择使用VMXNET3增强型虚拟网卡,因为其提供了更高级的功能,比如巨型帧、接收端收放等等技术。
将有关联的虚拟机尽量放在同一个ESXi主机上,因为相同主机的网络是通过内核传输,速度实现最大化。但是并不是说,VM就不用做备份或者异地部署了,还是要依据业务的实际应用来分。
对于那些要求网络延迟较小的应用,需要调整VMware高级设置中的网络延迟敏感度,满足业务需求。当然,默认的设置已经可以满足大多数的用户的应用场景。
结束语
以上主要阐述了VMware在CPU、内存、存储和网络方面的性能优化。当然一个成熟的虚拟化架构方案,不仅要考虑以上几种场景,还要对虚拟机本身的CPU、内存、存储、网络进行微调。本文主要集中在物理层面的优化。有兴趣的朋友,可以从VMware vSphere的官方找到相关的优化细节。
【作者】张志强,多年的云计算、虚拟化架构设计、企业信息化建设、自动化运维经验。熟练掌握X86、Power、存储、虚拟化等硬件设备调优与配置。拥有丰富的混合云架构及管理经验,信息安全及网络架构的设计与运维。