首页 > 代码库 > VMWare ESX Server性能优化

VMWare ESX Server性能优化

VMWare ESX Server性能优化

vmware ESX server 是当前服务器市场上基于intel平台的最流行的虚拟软件产品。对比其他虚拟软件产品,如 GSX server 和ms virtual server,ESX的最大优点就是可以大大减少host系统所占用资源的。ESX server内核直接运行在硬件之上,而且系统稳定性和性能都有很大的提高。
ESX server也很适合企业级应用,因为它支持重要的冗余功能,比如多路经,以及链路绑定。由于有诸如p2v vmotion 和virtualcenter软件的支持,ESX server 非常适合企业部署
注意 此章节是按照ESX server 2.1.0来介绍的。对于其他版本的ESX server这些方法不一定都可以通用。
介绍
对于大型的ESX server系统来调整性能是一件非常艰巨的任务。ESX server可以在硬件上承载非常大的负载。根据负荷量以及所运行虚拟系统的数量。服务器的一些子系统可能会达到性能瓶颈。因此非常重要的一件事情就是要评估设计以及配置硬件系统,来保证不会出现系统瓶颈。
理解ESX server仅仅会虚拟化你的负载这个概念很重要,他的意思是说实际上你需要根据原先的计划来调整ESX server系统。虚拟化很多基础服务器或者终端服务器会对你配置你系统的方法产生巨大影响。另外需要明白ESX server是虚拟化当前的硬件。你还需要根据不同的虚拟操作系统来做相应的系统性能调整。
理解Vmware性能概念
在讨论调整ESX Server性能之前,理解虚拟化对性能带来的影响是很重要的。ESX server虚拟化硬件,而且提供在一个物理机器上运行多个虚拟操作系统的环境。
默认情况下,对于硬件的访问,比如硬盘,网络,每一个虚拟机器有同等的权利。通常不希望看到一个虚拟系统吃掉了其他虚拟系统所有可用的资源。比如有一个服务器连接了一个SAN存储,提供了250MBps带宽。如果安装了ESX server,创建了一个虚拟机器测试输出,一般只有 25-50MBps输出这么少,是不是ESX server性能很差?现在,创建另一个虚拟机器,同时运行测试,每一个虚拟系统都可以达到 25-50MBps,你可以继续这个测试,一直到ESX server内核或者SAN网络产生瓶颈。从这个例子中可以看出ESX server设计上来说是尽量考虑并行可扩展性,而不是某一个虚拟机器的高性能。如果你的应用确实需要某一个子系统的高性能负荷,你最好不要把这个应用放到ESX server 上来。然而如果你有很多服务器应用但是每个都不是对i/o和cpu要求很高,使用ESX server确实可以节省硬件以及软件的费用。有些应用程序运行的性能可以和本地运行媲美。
硬件布局
在xserver上配置ESX server的时候,你可以有很丰富的硬件选择,从2路机器到16路机器64G内存,并且联接SAN存储。因此,可以做出一个非常好的解决方案,当然硬件的配置是要看自身的需求才有意义。
对于ESX server,硬件子系统容易出现瓶颈的地方通常是:内存 磁盘,网络
在虚拟机器中的典型应用比如ESX server通常不会造成cpu的瓶颈。为了避免内存瓶颈的产生。尽量选择高前端总线的系统。 ESX server对于cpu到内存以及i/o到内存的操作很频繁。他们都会利用前端总线。另外尽量加大内存,来避免交换分区的产生影响性能。注意,内存的需要量是由各个虚拟机器上运行的应用程序需求来决定的。
提示:如果配置445 440,需要每一个SMP板上的内存容量相同。如果不同的话,会影响性能。
同内存同等重要的就是磁盘系统的调整,对于ESX server磁盘系统的影响尤为重要。承载ESX server内核,以及内核映像,以及控制台系统文件的磁盘来说应该配备raid1的保护
我们不推荐利用板载lsi作raid,推荐用5i 6i 6m卡,因为板载的lsi的cpu很慢,没有缓存,没有电池保护,因此不建议应用在生产环境
对于VMFS存储,我们推荐用可以用到的最好的存储设备来承载。比如:用很多磁盘作raid,磁盘越多,性能越好,尽量用10k或者15k的硬盘。如果用scsi,用u320的磁盘,使用高性能的raid控制器,比如6m,ds4300光纤控制器。使用raid10配置最大的stripe大小。对于serveRaid,使用64k 光纤通道用512k或者1MB 
VMFS文件系统使用的block大小就是1MB所以尽量的配合他的大小。如果用光纤存储比如告诉HBA卡比如fc2-133。本身配置SAN 存储已经是一个非常复杂的任务了,但请尽量给ESX server划分单独的存储分区同。总的来说,调整磁盘系统是一个非常复杂而且耗时间的工作,需要分析利用以及系统负荷,来调整性能。
提示:如果你对ESX server在ds4000上部署非常感兴趣,可以参考红皮书SG24-6434-00 
对于网络配置,我们建议至少有2个千兆网卡(不要共享给控制台系统)网络配置依据于网络布局,比如如果交换机是10/100m那么配置多个1000m网卡也就没有意义了。根据网络布局,最好把ESX server连接到一个高速交换机,并可以支持网卡绑定功能。
cpu子系统需要根据所有的虚拟机器以及加上额外的10%-20%的复合计算的。因为ESX server支持到16路cpu,可以很容易在445上部署,请注意,不应该只考虑性能调整,你还应该考虑冗余等问题
提示:ESX server支持超线程,如果是2.1.2版本的话,推荐启用HT。不过如果用的是2.1.0,强烈建议禁用超线程。需要在bios,以及ESX server内核中都禁用。
vmware磁盘分区
在ESX server中,你需要明确集中不同的磁盘存储类型:
存储虚拟系统的存储ESX server内核,交换文件,日至文件的,以及控制台系统
虚拟机器运行在VMFS系统上,通常来说,由ESX server默认设置的安装方法已经非常合适,不需要更多的优化了。以下是一个典型的磁盘存储布局(带SAN存储) 
/dev/sda1 * 1 6 47974+ 83 Linux /boot 
/dev/sda2 7 325 2552319 83 Linux / 
/dev/sda3 326 516 1528191 82 Linux swap 
/dev/sda4 517 4442 31411926 f Extended partition 
/dev/sda5 517 4429 31307881+ fb VMFS 
/dev/sda6 4430 4442 103981+ fc VMFS for core dump and swap 
/dev/sdb1 1 17681 142022601 fb VMFS for virtual machines 
注意控制台交换分区的大小是控制台建议最大内存的2倍。这样就允许你添加更多的内存给您的server,你也可以设置这个分区是实际应用内存的2倍
在外部存储上,如果存储设备非常大,建议配置多余一个的VMFS文件系统。虽然可能损失一些性能,但是可以保证万一一个VMFS坏掉了,还有其他的可以工作。注意,如果在小磁盘上划分了多个VMFS的话,系统性能会下降很多,因为磁头会来回的在两个VMFS系统之间移动。
调整控制台系统
因为控制台系统是一个非常微小的redhat系统,控制台的调整空间也就很小。通常来说,控制台系统不需要调整。系统已经运行在3模式下,而且必要的服务已经启动。
唯一个可以对性能有一点提高的就是禁用一些虚拟控制台。可以再/etc/inittab种注释掉tty4 tty5 tty6 
例子
# Run gettys in standard runlevels 
1:2345:respawn:/usr/sbin/vmkstatus tty1 
2:2345:respawn:/sbin/mingetty tty2 
3:2345:respawn:/sbin/mingetty tty3 
#4:2345:respawn:/sbin/mingetty tty4 
#5:2345:respawn:/sbin/mingetty tty5 
#6:2345:respawn:/sbin/mingetty tty6 
请注意,在控制台系统上如果安装ibm director agent会很影响性能的,因为它是基于java的。如果一定要安装 director agent请额外给控制台系统添加至少50MB的内存。如果有其他的agents,要相应添加内存.虽然控制台系统没有更多的参数配置,但是如果ESX server承载60个以上的虚拟系统或者在重负载的情况下,有一些情况是需要了解的。这种情况下,特别是承载web服务的时候,控制台系统会非常的慢。这时候可以到管理工具里面增加控制台的内从容量到500MB-800MB,同时考虑到ibm director的影响。
如果vmware的管理借口仍然很慢,更改http进程的优先全县。登陆进入控制台系统,检查进程id 
ps -axw |grep http 
输出入下,可以看到httpd线程的id是1431,现在便可以调整优先权限了
renice -10 -p 1431 
[root@xseries01 root]# ps -axw 
PID TTY STAT TIME COMMAND 
1 ? S 0:03 init 
1431 ? S 0:00 /usr/lib/vmware-mui/apache/bin/httpd -DSSL 
-DSSL_ONLY -DSTANDARD_PORTS -DESX -d /usr/lib/vmware-mui/apach 
1166 pts/0 R 0:00 ps -axw 
[root@xseries01 root]# ps -p 1431 
PID TTY TIME CMD 
1431 ? 00:00:00 httpd 
[root@xseries01 root]# renice -10 -p 1431 
1431: old priority 0, new priority -10 
这样httpd的权限已经得到了调整,相反的可以用-15减少httpd 的优先权限
除了给httpd增加cpu时间之外,也可以调整为web服务保留的内存,如果有80个虚拟系统,要把默认的内存保留从24MB调整到更高,可以调整实际共享的内存,利用配置文件/etc/vmware/config ,例如从24MB提高到28MB 如下
control.fullpath = "/usr/bin/vmware-control" 
wizard.fullpath = "/usr/bin/vmware-wizard" 
serverd.fullpath = "/usr/sbin/vmware-serverd" 
serverd.init.fullpath = "/usr/lib/vmware/serverd/init.pl" 
# The setting below increases the memory shares available for the httpd 
mui.vmdb.shmSize = "29360128" 
renice命令会即时生效,但内存的扩大需要重新启动httpd服务
killall -HUP httpd 
为了确保可以在重负荷下登陆控制台,推荐把vmware联结超时的时间从30秒提高到更高的数值。可以通过修改/etc/vmware/config
vmware.fullpath = "/usr/bin/vmware" 
control.fullpath = "/usr/bin/vmware-control" 
wizard.fullpath = "/usr/bin/vmware-wizard" 
serverd.fullpath = "/usr/sbin/vmware-serverd" 
serverd.init.fullpath = "/usr/lib/vmware/serverd/init.pl" 
mui.vmdb.shmSize = "29360128" 
# The setting below increases the login timeout to 2 minutes 
vmauthd.connectionSetupTimeout = 120 
也可以可以提高vmware-服务的内存限制,因为这个操作涉及到vmware线程,因此需要停掉所有虚拟机器才可以完成。修改/etc/vmware/config 提高软内存从64MB到96MB 
vmware.fullpath = "/usr/bin/vmware" 
control.fullpath = "/usr/bin/vmware-control" 
wizard.fullpath = "/usr/bin/vmware-wizard" 
serverd.fullpath = "/usr/sbin/vmware-serverd" 
serverd.init.fullpath = "/usr/lib/vmware/serverd/init.pl" 
mui.vmdb.shmSize = "29360128" 
vmauthd.connectionSetupTimeout = 120 
# The line below will alter the soft memory limit 
vmserverd.limits.memory = “65536” 
# The line below will alter the hard memory limit 
vmserverd.limits.memhard = “98304” 
当完成编辑后,需要重新启动vmware-serverd服务
shutdown -r now 
或者
killall -HUP vmware-serverd 
注意:需要事先关闭所有的虚拟操作系统
vmware内核调整
vmware内核有很多可以调整的选项,可以有效影响整个的系统性能。这里列举一些最重要的ESX server内核参数调整
页面文件共享
ESX server利用一个算法来共享同等的内存页面在各个虚拟机器之间,从而可以减少系统的内存使用。页面共享对系统有很小的影响,甚至会加快页面查询的速度。页面共享可以得到的好处跟系统负载有很大的关系。
我们推荐允许页面共享,不过如果一定要禁用页面共享来提高性能,可以修改/etc/init.d/vmware文件,在-n前添加-m,参看例子
Disabling page sharing — /etc/init.d/vmware 
“cd”$vmdb_answer_SBINDIR”&& 
“$vmdb_answer_SBINDIR”/”$kernloader”-m -n”$maxCPU” 
“$vmdb_answer_LIBDIR”/”$kernel’||exit 1” 
禁止页面共享,会增大内存的需求(虚拟系统是linux的要小于window虚拟系统的增加)
设置网络速度
最好把ESX server上所有的网卡的协商模式从自动协商更改成全双工。所有相关的交换机都要做相应的设置。
可以设置控制台网卡的速度通过/etc/modules.conf 
Setting the network adapter speed — /etc/modules.conf 
alias parport_lowlevel parport_pc 
alias scsi_hostadapter aic7xxx 
alias eth0 e100 e100_speed_duplex=4 
alias scsi_hostadapter ips 
#alias eth1 eepro100 
alias scsi_hostadapter1 aic7xxx 
alias scsi_hostadapter2 aic7xxx 
#alias usb-controller usb-ohci 
alias scsi_hostadapter ips 
alias scsi_hostadapter ips 
具体设置的参数是可以参看网卡驱动的readme文件
你也可以通过管理借口来设置网络速度还有双工模式,root登陆到管理界面,在网络连接菜单设置属性
调整qlogic卡
qlogic的HBA卡提高队列深度,可以大大的提高性能,默认的队列深度的数值是16,试验证明,如果设置成64可以提高性能(实际的队列深度可能会因为不同的配置有所不同) 
队列深度可以在/etc/vmware/hwconfig文件中调整,搜索device.x.x.x.name = “QLogic Corp QLA2300 64-bit FC-AL Adapter (rev 01)" (根据不同情况数字可能不同)
device.7.3.0.class = "0c0400" 
device.7.3.0.devID = "2300" 
device.7.3.0.name = "QLogic Corp QLA2300 64-bit FC-AL Adapter (rev 01)" 
#下面添加队列深度
device.esx.7.3.0.options = "ql2xmaxqdepth=64" 
#老版本ESX server添加如下
device.vmnix.7.3.0.options = "ql2xmaxqdepth=64" 
device.7.3.0.subsys_devID = "0009" 
device.7.3.0.subsys_vendor = "1077"
device.7.3.0.vendor = "1077" 
NUMA 调整
ESX Server可以很好的支持目前的NUMA系统,包括x445,如果已经按照p329页提到的硬件布局优化系统,系统已经是比较好配置的了。但是,如果服务器的负载需要特定的cpu群体,(比如让某个虚拟服务器工作在特定的NUMA节点上,如445上的一个smp板)可以利用VMware 管理接口手工把特定的NUMA节点分配给虚拟服务器。
当16路445运行64个虚拟服务器的时候,你应该每一个4路smp节点分配16个虚拟服务器,这样内存均衡的分配会根据cpu的物理位置进行优化配置,也就是在一个NUMA节点上运行的虚拟服务器不会用另一个NUMA节点上的内存。
VMware内核交换调整
vmware内核的内核交换机制可以实现在一个机器上运行非常多个虚拟服务器。然而,当系统开始利用交换机制的时候,磁盘I/O会有一些负载的增加。
为了优化性能,需要紧密观察VMware内核的交换文件,当vmware内核开始利用交换机制把数据写到硬盘的时候,你就应该减少虚拟服务器的数量,或者安装更多的内存了。通常在理想的情况下,在正常工作的时候,不要让系统开始利用交换文件。为了让交换文件带来的影响最小,建议把交换文件放到 VMFS分区
注意:如果在IDE硬盘的刀片上安装ESX server,你只能把交换文件放到外部存储,因为VMFS文件系统不支持IDE设备
提醒:多注意观察/proc/vmware/swap/stats中交换数值的大小,做好让他保持在0 
虚拟服务器的调整
相对于非常不错的默认的VMware内核参数,调整虚拟服务器可以更好的获得性能提升,根据虚拟服务器的负载,本章节的一些提示可以很大程度上改善虚拟服务器的性能。
这里要注意的是,任何在虚拟服务器内的性能调整,都可以在整体上对整个服务器的性能有好处。
提示:建议在虚拟服务器内部安装 vmware 工具,以及相应的驱动,这样可以提高性能减少整个ESX server的负载
调整虚拟服务器内存位置
当创建了一个新的虚拟服务器,会要求选择内存的大小,就像安装一个独立的服务器一样。
如果你给你的虚拟服务器制定了一个数量的内存,而系统和应用程序需要更多内存的时候,交换文件就会产生。
通常情况,交换文件的产生是很糟糕的,相比快速的内存访问,硬盘的存取要慢的很多,因此,建议内存容量的大小,要根据操作系统以及运行的应用程序的共同需求来计算。可以利用系统的监控工具来监控虚拟服务器的内存使用状况,公举可以参看p343 
ESX server提供了很多调整内存的分配的方法
可以随时按照虚拟服务器的需求来分配内存,没有用的内存则共享给其他的虚拟服务器。虽然调整内存的大小很容易,但需要注意,每一次的调整,虚拟服务器都需要重新启动虚拟的操作系统。
虚拟服务器可以创建2种类型的虚拟磁盘控制器。Buslogic是默认的,特点是兼容性很好,支持广泛的操作系统。
Buslogic驱动支持所有的guest系统,可以操作1kb小的文件,如果你的应用程序确实有很多这样的小文件,这个驱动确实不错,但这个驱动不是提高性能的最好选项,如果关心性能,强烈推荐使用lsi驱动,这样尤其对大文件可以大幅度提高性能,不过很多操作系统不一定支持这个驱动。 vmware提供了软盘映像来满足linux和windows系统添加驱动的问题。
禁用不使用的设备
ESX server 提供了丰富的虚拟硬件,但多数时候,很多这些设备其实没有什么用处,比如说apache服务,cdrom只用来第一次装系统用,以后完全没有用,串口和并口更是根本用不到。windows会一次次的与这些设备通讯。这些动作会占用很多的cpu时间,甚至有时候会导致系统反映缓慢。通常情况下,需要禁用以下不常用的设备:com1 com2 lpt1 cdrom(禁用cdrom自动运行)
提示:windows2003下可以用以下方法禁用cdrom自动运行
编辑注册表
HCCU/Software/Microsoft/Windows/CurrentVersion/ 
Policies/Explorer 
设置 NoDriveTypeAutoRun 成为0x000000FF 
网卡驱动
ESX server提供每一个虚拟服务器的默认的网卡类型是AMD PCNet卡,所有的客户操作系统都支持这个网卡,兼容性很好,相比之下性能稍差,但当安装vmwaretool之后,因为更新了新的驱动,所以网卡性能会有很大的提高。
提示:如果网卡遇到问题,可以考虑切换回老的amd网卡,来排除错误。
调整终端服务器
虚拟服务器当运行很多线程的时候,比如终端服务器,可以通过规定虚拟服务器中的负载量来得到额外的性能提升。
调整虚拟服务器负载量需要打开管理接口,设置服务器如图所示范。即使服务器被设置成终端服务器,这个设置会可以加速其他其他运行多个同步线程的服务器。
当改变了设置之后,需要重新启动虚拟操作系统使得配置生效
提示:ESX server 1.52 和2.0.1如果设置的话,需要打开配置文件直接添加
workload=terminalservices

VMWare ESX Server性能优化