分类: LINUX
2011-03-16 18:49:48
最近 Quest Software 公司发布了的 Mattias Sundling 撰写的关于虚机性能调优的白皮书,原文标题:Maximizing Virtual Machine Performance – An introduction to performance tuning,下载地址:
#####
# 文章摘要
##########################
本文所涉技术要点适用于 ESX(i)4.1,但同时一些地方对其他虚拟化技术同样适用,具有通用的参考意义。
前提条件:
1. ESX(i) 版本升级到 4.1,无论是在性能还是可扩展性方面,vSphere 4.1 都要比之前的版本做的更好;
2. 升级虚机硬件版本的 version 7,v7 版本的虚拟硬件引入了一些新的功能,提高了虚机性能。在升级虚机硬件版本到 v7
之前,需要先升级虚机的 VMware Tools,然后关闭虚机,在 VI Client 上右键选中这个虚机,选择 Upgrade Virtual
Hardware。
注意:升级虚机硬件版本到 v7 后,则不能再将 v7 版本的虚机迁移到 ESX(i) 3.x 版本的 Host 上了,所以最好同时将 ESX(i)3.x 版本的物理主机进行升级。
下面对相关的具体调优选项分别介绍:
1. vCPU 方面
数量
对虚机分配 vCPU 时从分配单个 vCPU 开始,然后再对虚机的性能进行分析,很多时候单个 vCPU 就已经可以很好的满足虚机的计算需要了。如果单个 vCPU 不能满足虚机的计算需求,再添加必要的 vCPU。
如果一开始就分配多个 vCPU 给虚拟机,有可能会造成 CPU 计算资源的浪费,之后如果过多的在一个物理主机上部署具有多个 vCPU 的虚机,也会造成性能的不足,同时,如果一个虚机先是划分了多个 vCPU,再移除 vCPU 的话,有可能加剧虚机性能的下降,即性能的下降和 vCPU 的减少不成正比,这是因为有的操作系统在安装时会根据 cpu 的数目确定是 UP (Uni-Processor)驱动模式还是 SMP(Symmetric Multiprocessor) 驱动模式,有的操作系统不能方便的从 SMP 驱动模式切换回 UP 驱动模式。
注意:
1). Windows 2008 对 UP 和 SMP 使用同样的驱动模式,可以方便的从多个 CPU 降级为单个 CPU 模式;
2). Windows 2003 及其之前的版本,对 UP 和 SMP 使用不同的驱动模式,支持从 UP 平滑升级到 SMP 模式,但是反之则比较麻烦,不同版本方法不同。
3). Windows 2003 SP2 以及之后的版本,当从多个 cpu 降级到单个 cpu 时,依然会使用 SMP 模式,这会大大降低单个 CPU 的性能。可以手工更新驱动模式。
4). 为虚机分配多个 vCPU 时,需要考虑虚机上部署的应用程序支持多线程计算,如果不支持,分配了多个 vCPU 就是浪费资源。
CPU 的调度
ESX 2 使用严格的共同调度机制(strict co-scheduling),一个 vCPU 对应一个 pCPU,如果物理机只有 1 个
pCPU,则虚机最多也只能有 1 个 vCPU,如果物理机只有 2 个 pCPU,则虚机最多也只能有 2 个 vCPU。
ESX(i) 3 引入了松散的共同调度机制(relaxed co-scheduling),即使物理机只有 1 个 pCPU,虚机也可以分配 2 个 vCPU。
ESX(i) 4 进一步加强了松散的共同调度机制,提高了虚机的性能和扩展性。
CPU % Ready
如果 ESX(i) 物理主机的 CPU % Ready 百分比数值超过 2%,则表示 CPU 阻塞,在同一物理主机上的其他虚机在大量使用 CPU 计算,需要引起注意,这个时候虚机需要等待物理主机的 CPU 调度。
注意,CPU % Ready 这个数值只能通过对虚拟化层的监控获得,不能通过虚机的 OS 获得。
2. 内存方面
关于 Memory Limit 参数
虚机的设置中有个 Memory Limit 参数,如果设置了 Memory Limit 参数,则表示最多分配这些物理内存给虚机使用,而不管之前赋予的虚机内存大小。如在创建时设置了 16G 内存,但是同时设置了 Memory Limit 为 4G,则虚机可以看到 16G 内存,但是最多只能使用到 4G 内存,这可以解决一些应用程序在安装时需要检测到大量的内存,但是在运行时不需要那么大内存的情况。
现实情况是,在很多情况下,Memory Limit 自作主张的发生作用,而不管你是否意愿如此。如当你将虚机从一个资源池移动到其他资源池时,或者使用 P2V 方式生成虚机时,Memory Limit 会发生作用,而不管你是否进行了相关设置。还有一个已知的 vCenter 的 bug,会随机的对一些虚机自动设置 Memory Limit,更糟糕的情况时,如果一个模板不幸的在不知情的情况下设置了 Memory Limit 的限制,之后依照这个模板生成的虚机都会不幸的继承这个设定。
如果你分配了 2G 内存给一个虚机,但是又设置了 Memory Limit 为 200M,则这个虚机会看到 2G 的内存,但是最多只能使用 200M 的物理内存,剩下的 1.8G 内存中的内容会被发送到物理主机的交换文件(swap file)中,这是非常糟糕的情况,会影响到虚机的性能,物理主机的性能,同时会影响到交换文件所在的存储系统的性能。
关于虚机内存大小的设定
1). 单个虚机内存分配过高,会增加内存开销,会降低同一物理主机上虚机部署的密度;
2). 单个虚机内存分配过低,会造成内存被 ballooning 的几率加大,影响虚机的性能。
如何去判断最合适的内存分配大小,需要对虚机过去 30 到 90 天的活动内存使用率进行监控。
关于内存的回收
最好是为虚机分配适当的内存,避免 ESX(i)物理主机对内存的回收使用。ESX(i)物理主机使用如下几种技术实现对内存的回收使用:
1). Ballooning,当虚机的内存使用达到设定的限定值时,自动从内存中清除最不常用的数据,实现内存的回收。要求虚机内安装 VMware
Tools,ballooning 对虚机性能的影响很小,不要禁用这个特性。如果发现一个虚机多次的出现 ballooning
现象,可以将这个虚机迁移到其他物理主机来避免。
2). Swapping, 将虚机的内存内容交换到主机的交换文件中,因为涉及从内存复制到磁盘的过程,会大大降低性能,需要极力避免。
3). Memory compression, ESX/ESXi 提供内存压缩缓存,可在内存过载使用时改进虚拟机性能。默认情况下已启用了内存压缩。当主机内存过载时,ESX/ESXi 会压缩虚拟页面并将其存储在内存中。
4). Transparent Page Sharing, 位于同一物理主机上的多个虚机之间共用相同内容。
3. 存储方面
关于 ParaVirtualized SCSI (PVSCSI) 控制器
1). PVSCSI 控制器提供了更好的数据吞吐量和更低的CPU占用率。相比使用基于 LSI Logic 的控制器,PVSCSI 控制器提供了 12% 的数据吞吐量提高和 18% 的 CPU 占用率的降低。
2). PVSCSI 可以更好的应对慢速的磁盘 I/O
关于 LUN 的大小和虚机的位置
1). LUN 的大小在 500G 到 1000GB 为宜,过大的 LUN 会造成过高的磁盘 I/O,影响性能。
如果存储设置支持 VAAI,则最好开启这个功能,这个功能会将服务器物理主机的虚拟化层的负载部分迁移到存储设备上,可以实现更好的性能
2). 将存储的 block size 设置为 8M, 并且在应用在多个 data store 上
3). 对各个 LUN 的 I/O 进行监控,平衡 LUN 的负载。
VMFS Alignment
如果是通过 vCenter Client 创建的 VMFS 卷,则已经正确的执行了 Alignment,如果在安装 ESX(i) 时创建了 VMFS 卷,则需要重新进行 Alignment。只能通过 Storage vMotion 的方法将虚机迁移到其他 datastore 中,然后在 vCenter Client 中再重新创建 VMFS。
关于启用 Storage I/O Control (SIOC)
从 ESX(i) 4.1 开始,可以针对 datastore 开启 SIOC 功能,可以实现在磁盘 I/O 阻塞时保证关键应用优先使用磁盘。
4. 网络方面
物理网卡
确保具有多块物理网卡,至少是千兆网卡,最好是万兆网卡。
关于 VMNET3
默认的是虚拟网卡是 E1000,可以升级到 VMNET3 网卡,具有更好的吞吐性能,而且可以充分利用万兆网卡的速度。
注意:升级到 VMNET3 虚拟网卡后,原有的 IP 设置会丢失,并且 MAC 也会改变,在升级前备份之前的网卡配置。
如果要启用 VMNET3 的 Jumbo Frames 功能,需要修改虚机操作系统的 MTU 为 9000,同时要修改 vSwitch 和交换机的端口配置。
关于 Network I/O Control (NetIOC)
通过 NetIOC 可以控制 虚机, 虚机的管理, vMotion, NFS, iSCSI 和 Fault Tolerence 等功能使用的网络带宽,
5. 删除不需要的虚拟硬件
不需要的虚拟硬件,只要存在就会消耗 CPU 和内存资源。
可以删除的虚拟硬件有:
1). Floppy, CD, USB, Serial Port, Com Port, Sound
2). 通过如下方法清理已经删掉的硬件,
Windows,在命令行中执行
Set devmgr_show_nonpresent_devices=1
然后打开设备管理器 (devmgmt.msc),选择 Device Manager – Show hidden devices,
删掉所有 non present devices