服务器硬盘是磁盘资源中最慢的组件,在企业数据中心,注意仔细设计存储子系统,不要让它成为主要性能瓶颈,而最理想的办法是使用SAN,即使预算不允许,也要想办法确保磁盘资源争用不会导致虚拟机(VM)瘫痪。
首先应将宿主操作系统安装到专用硬盘上,注意不是专用卷,确保宿主操作系统不会与虚拟机抢夺磁盘资源。如果托管服务器可以连接外置存储,还可以考虑将宿主操作系统的分页文件移动到外置存储的专用驱动器上。
RAID阵列是满足虚拟服务器性能所必需的,至少应该选择使用RAID1,但“RAID1+RAID0”(RAID10)是更好的选择,因为它能提供容错,并且性能开销也比RAID5小。如果可以的话,给每个虚拟服务器分配一个专用磁盘阵列最好。
使用固定大小的虚拟硬盘来配置虚拟服务器会获得额外的性能提升。虽然动态扩展虚拟硬盘很方便,但对服务器的性能是有影响的。
磁盘I/O性能监控的指标主要包括以下七个。
1、每秒I/O数(IOPS或TPS)
对于磁盘来说,一次磁盘的连续读或者连续写称为一次磁盘I/O,磁盘的IOPS就是每秒磁盘连续读次数和连续写次数之和。当传输小块不连续数据时,该指标有重要参考意义。
2、吞吐量
吞吐量即硬盘传输数据流的速度,传输数据为读出数据和写入数据的和。其单位一般为kbit/s、MB/s等。当传输大块不连续数据时,该指标有重要参考作用。
3、平均I/O数据尺寸
平均I/O数据尺寸为吞吐量除以I/O数目,该指标对揭示磁盘使用模式有重要意义。一般来说,如果平均I/O数据尺寸小于32KB,可认为磁盘使用模式以随机存取为主;如果平均每次I/O数据尺寸大于32KB,可认为磁盘使用模式以顺序存取为主。
4、磁盘活动时间百分比
磁盘处于活动时间的百分比即磁盘利用率,磁盘在数据传输和处理命令(如寻道)时处于活动状态。磁盘利用率与资源争用程度成正比,与性能成反比。也就是说磁盘利用率越高,资源争用就越严重,性能就越差,响应时间就越长。一般来说,如果磁盘利用率超过70%,应用进程将花费较长的时间等待I/O完成,因为绝大多数进程在等待过程中被阻塞或休眠。
5、服务时间
服务时间即磁盘读或写操作执行的时间,包括寻道、旋转时延和数据传输等时间。其大小一般与磁盘性能有关,CPU/内存的负荷也会对其有影响,请求过多也会间接导致服务时间的增加。如果该值持续超过20ms,一般认为会对上层应用产生影响。
6、I/O等待队列长度
I/O等待队列长度即待处理的I/O请求数目,如果I/O请求压力持续超出磁盘处理能力,该值将增加。如果单块磁盘的队列长度持续超过2,一般认为该磁盘存在I/O性能问题。需要注意的是,如果该磁盘为磁盘阵列虚拟的逻辑驱动器,需要再将该值除以组成这个逻辑驱动器的实际物理磁盘数目,以获得平均单块硬盘的I/O等待队列长度。
7、等待时间
等待时间指磁盘读或写操作等待执行的时间,即在队列中排队的时间。如果I/O请求持续超出磁盘处理能力,意味着来不及处理的I/O请求不得不在队列中等待较长时间。
通过监控以上指标,并将这些指标数值与历史数据、经验数据以及磁盘标称值对比,必要时结合CPU、内存、交换分区的使用状况,不难发现磁盘I/O潜在或已经出现的问题。但如何避免和解决这些问题呢?这就需要利用磁盘I/O性能优化方面的知识和技术了。限于篇幅,在这里仅列出一些常用的优化方法以供参考:
- 调整数据布局,尽量将I/O请求较合理地分配到所有物理磁盘中。
- 对于RAID磁盘阵列,尽量使应用程序I/O等于条带尺寸或者为条带尺寸的倍数。并选取合适的RAID方式,如RAID10、RAID5。
- 增大磁盘驱动程序的队列深度,但不要超出磁盘的处理能力,否则部分I/O请求会因为丢失而重新发出,这将会降低性能。
- 应用缓存技术减少应用存取磁盘的次数,缓存技术可应用在文件系统级别或者应用程序级别。
- 由于大多数数据库中已包括经优化后的缓存技术,数据库I/O宜直接存取原始磁盘分区(raw partition)或者利用绕过文件系统缓存的DIO(Direct I/O)技术。
- 利用内存读写带宽远比直接磁盘I/O操作性能优越的特点,将频繁访问的文件或数据置于内存中。