由于现在VMware向购买Vsphere的客户免费提供SUSE Linux Enterprise Server(SLES),所以许多公司针对他们的Linux需求都部署了SUSE Linux。然而正如本文所描述的一样,即使你已经安装了专门针对VMware环境使用而开发的SUSE内核,你仍然可以通过进一步的性能优化来获得意想不到的收获。
对VMware环境中的SUSE进行性能优化需要两步:***步,你必须对VMware环境进行优化。第二步,对虚拟主机的优化完成后,你还可以使用其它技术对虚拟机进行优化。
评估性能优化
有很多先进技术可用来评估性能优化的效果。其中一个是Bonnie脚本,它是一套shell脚本,它用不同的方法测试读写性能。如果你真想看到性能优化结果的详细信息,使用Bonnie脚本是一个不错的主意。但如果你只是想了解虚拟机的基本状况,你可以使用更简单的方法让你一目了然。
你可以在Linux shell环境下使用下面的命令来获得当前系统性能的基本状况:
time dd if=/dev/zero of=/1gfile bs=1M count=1024
使用此命令,你将可以在指定的位置创建一个1 GB的文件。例如,你可以把它放在根文件系统来测试根文件系统的性能, 或者把它放在一个挂载的SAN分区中来测量SAN设备的性能。这个命令的输出如下所示:
root@lassen:/# time dd if=/dev/zero of=/1gfile bs=1M count=1024 1024+0 records in 1024+0 records out 1073741824 bytes (1.1 GB) copied, 8.86777 s, 121 MB/s real 0m8.931s user 0m0.000s sys 0m1.890s
过去,你可以看到内核在处理此命令时真正花费的时间。找到“real 0m8.931s” 这一行,你可以看到你的计算机完成这项任务耗费的时间。这个时间指的是这项任务从开始到结束花费的时间。在此期间,调度器也在其它任务之间进行切换。所以如果你的服务器在多个任务的作用下处于非常繁忙的状态时,这个参数便不能给出一个非常准确的读数。但是,如果你的计算机没有运行任何重要的进程,它便可以给你提供一个不错的指导。这种情况可以用下面的公式来表示:
real – sys = overhead(实际-系统=开销)
在任何时候系统都会有一些开销,上面显示的数字实际上是相当不错。但是,显示的这两个数字也往往有巨大的差异,在VMware中虚拟SUSE Linux时往往就是这样。举例来说,写1GB的文件,实际时间有可能超过一分钟,但系统的时间却仍是两秒钟!
优化VMware
为发挥SUSE Linux的***性能而对VMware的优化其实很简单。默认情况下,VMware为虚拟磁盘设备安装的是LSI Logic控制器。这个控制器可以捕获并模拟所有由虚拟机生成的数据并对它们进行处理,为了处理这些数据,控制器需要做很多的工作。如果要解决这个问题,您应该将LSI Logic控制器替换为VMware半虚拟化磁盘设备。由于VMware 半虚拟化磁盘驱动器专门针对在VMware中的SUSE 内核进行过优化,你会发现当采用了这种驱动器,性能将会有巨大的提升。但也不要忘记在虚拟机中安装VMware工具。所有这些都是为了在虚拟机中使用***的驱动器,以便你可以在VMware这一端获得***的性能。
优化SUSE
对于SUSE Linux来说也有一些优化建议。其中***个就是I/O调度器的行为设置, 它对于Linux操作系统来说就是如何让磁盘控制器进行工作。共有四种设置方式:
CFQ:始终公平排队。这意味着,控制器使用***的平均设置,这在一个读写请求或多或少算均衡以及不同进程之间带宽平均分配的系统中效果非常好。
Anticipatory:采用这个参数,I/O调度器将试着猜测下一次的读请求,也就意味着它会预读一些数据块。这意味着一部分内存缓冲区会被用来进行读取优化。这对于读取密集型环境非常有利,但是处理写请求就会变得很糟糕。 在最近的一些内核版本中(2.6.33和更高版本),更推荐使用CFQ。
Deadline:在这个设定中,I/O调度器在将数据从缓冲区真正写入到磁盘之前会等待尽可能长的时间以确保找到***需要写入的请求。使用此设置,调度器会尽可能的对I/O进行实时调度,这种方式是数据库环境的理想选择。
Noop:因为很多现代的磁盘控制器,RAID控制器或SAN设备都已经对磁盘的读/写优化过了,所以不做任何基于Linux层面的I/O优化也很有意义。你至少可以尝试一下这个选项,以了解您的存储控制器对I/O的优化程度。
I/O调度器的设置会写入到系统的一个文件中。 在目录/sys/block中,你会发现服务器上的每一个存储设备都对应着一个子目录,在该目录下,有文件queue/scheduler。使用cat命令可以查看其当前设置:
root@lassen:/# cat /sys/block/sda/queue/scheduler noop anticipatory deadline [cfq]
正如你看到的,I/O调度器的当前设置是CFQ。当然如果你找到了其它更好的设置参数,只要执行echo命令将新的参数写入配置文件即可。
echo deadline > /sys/block/sda/queue/scheduler
接下来,你可以测试其它参数对性能的影响。***的做法是把所有四个参数都测试一遍并找出最适合你的服务器负载类型的那一个。然后,你就可以将它设为启动加载。例如,使用echo命令将配置写入文件/etc/init.d /boot.local中,这样就保证了每次重新启动服务器时这个设置也同时生效。
优化日志
在文件系统中,日志的设置对于性能优化也很有用。所有当今的Linux文件系统都使用日志的方式以便在服务器崩溃后使恢复数据更加容易。日志的基本概念是:在写一个文件时,日志将这个事务记录下来,如果操作失败,它可以很容易地回滚到写入前的状态。但是如果你的服务器是写密集型应用,默认的日志设置可能会对写性能产生负面影响。相反,如果你的服务器是读密集型应用,你大可不必关心日志的设置,因为日志不关心读事务。
在写负荷很重的服务器上,通过修改文件fstab来挂载文件系统时,你可以使用参数data=journal。使用此参数可以给予文件系统一定程度的保护,但它是轻量级的,这样可以确保写入文件时损失尽可能少的时间。下面几行显示的内容就类似于文件/etc / fstab中的设置:
/dev/sdg1 / ext3 user_xattr,data=writeback 1 1
应用此更改后,重启服务器让更改生效。
在这里,我们已经讨论了如何在VMware服务器上优化SUSE Linux Enterprise Server的性能。使用本文所讨论的相关参数可以优化存储通道,从而让你的虚拟机运行速度更快。
【编辑推荐】