好大的风

2009年09月28日

存储性能测试工具sysbench

Filed under: 你要去哪里 — 好大的风 @ 10:32 上午

测试用具:sysbench

网站地址:http://sysbench.sourceforge.net/

在我看来,sysbench是一个方便的存储性能测试工具,
可以快速的对比各种不同的设备在不同的并发和参数情况下的性能表现。

测试用例:
总计160G的文件,进行随机读取。
分别使用10,20,30,40,50,60,100个线程并发测试。
使用了O_DIRECT模式避免文件系统的缓存影响测试结果。

sysbench的参数都很清晰,我比较喜欢–file-extra-flags=direct这个参数,这个参数比较类似InnoDB中的O_DIRECT模式。

测试前首先需要准备测试文件:
sysbench –max-requests=500000  –test=fileio –num-threads=N –file-total-size=160G –file-test-mode=rndrd –file-extra-flags=direct prepare
 
然后进行测试:
sysbench –max-requests=500000  –test=fileio –num-threads=N –file-total-size=160G –file-test-mode=rndrd –file-extra-flags=direct run
 
以下是我在公司的HP的SAN存储上进行测试的结果:
当并发线程取到40时,得到最优的IOPS结果和可以接受的延迟时间,随着线程数量的增加,每次IO的响应时间明显变长。
 
并发线程为40的测试结果如下,主要可以参考红色标记的部分:
 
#sysbench –max-requests=500000  –test=fileio –num-threads=40 –file-total-size=160G –file-test-mode=rndrd –file-extra-flags=direct run
sysbench 0.4.12:  multi-threaded system evaluation benchmark
Running the test with following options:
Number of threads: 40
Extra file open flags: 16384
128 files, 1.25Gb each
160Gb total file size
Block size 16Kb
Number of random requests for random IO: 500000
Read/Write ratio for combined random IO test: 1.50
Periodic FSYNC enabled, calling fsync() each 100 requests.
Calling fsync() at the end of test, Enabled.
Using synchronous I/O mode
Doing random read test
Threads started!
Done.
Operations performed:  500001 Read, 0 Write, 0 Other = 500001 Total
Read 7.6294Gb  Written 0b  Total transferred 7.6294Gb  (114.69Mb/sec)
 7340.44 Requests/sec executed
Test execution summary:
    total time:                          68.1159s
    total number of events:              500001
    total time taken by event execution: 2723.8192
    per-request statistics:
         min:                                  0.11ms
         avg:                                  5.45ms
         max:                                332.81ms
         approx.  95 percentile:               9.23ms
Threads fairness:
    events (avg/stddev):           12500.0250/57.27
    execution time (avg/stddev):   68.0955/0.00
 
从以上测试结果来看,这个HP存储设备的IOPS大概在7300左右,平均响应时间在5ms左右。
对比测试了一台机器上挂载的本地磁盘,IOPS大概在1000左右,平均延迟在10ms以上。
 
综合看来,SAN存储确实要比本地磁盘表现高几个数量级。

2009年09月23日

LVM 实践总结

Filed under: 你要去哪里 — 好大的风 @ 4:07 下午

LVM是运行在Linux操作系统上的一种逻辑卷管理器,可以用来管理大量磁盘设备,提供灵活的分区、备份方案。

通过阅读文档和实践,我总结LVM有以下几个特点比较有实际意义:

1,可以实现基本的软件方式的RAID0。
2,可以实现文件系统的snapshot。

2.6版本的Linux内核带有LVM 2版本。
以下测试都基于 Red Hat Enterprise Linux Server release 5.2 (Tikanga) 操作系统。

要理解LVM,首先要理解三个基本术语:

1,physical volume (PV) 顾名思义,可以认为就是物理磁盘。
2,volume group (VG) 是为了方便管理,将一堆PV集合在一起。
3,logical volume (LV) VG上面的逻辑卷,相当于磁盘分区,文件系统就建立在LV上面。

下面这个图简单明了的阐述了三者的关系:

 hda1   hdc1      (PV:s on partitions or whole disks) 

       \   /                                                                   
        \ /                                                                    
       diskvg        (VG)                                                      
       /  |  \                                                                 
      /   |   \                                                                
  usrlv rootlv varlv (LV:s)
    |      |     |                                                             
 ext2  reiserfs  xfs (filesystems) 

LVM提供的管理工具是lvm(8),可以建立很多软连接到lvm命令,实现很多快捷操作。
比较常用的命令有pvcreate/vgcreate/lvcreate等。
具体各个命令的使用方法可以参见man page。

下面是一个创建lv并使用snapshot进行备份的实践过程:

我们使用 物理设备 /dev/cciss/c0d0p8进行试验,首先创建pv:
pvcreate /dev/cciss/c0d0p8
创建vg,名称就叫做mysql:
vgcreate mysql /dev/cciss/c0d0p8
将vg设置为active状态:
vgchange -a y mysql
创建lv,需要预留一些空间给snapshot使用,pv大概88G,lv分配80G,lv的名称叫做mysql_data:
lvcreate -L 80G -n mysql_data mysql
查看一下刚刚创建的lv:
lvdisplay
创建文件系统:
mkfs.ext3 /dev/mysql/mysql_data
挂载文件系统:
mount -onoatime  /dev/mysql/mysql_data  /apps
创建snapshot,预留100M的copy on write的空间,名称叫做mysql_data_20090922
lvcreate -L 100M -s -n mysql_data_20090922 mysql/mysql_data
将snapshot加载:
mkdir /mysql_data_20090922
mount /dev/mysql/mysql_data_20090922 /mysql_data_20090922/
lvm2的snapshot是可读写的,所以可以直接在snapshot上将mysql数据库启动。

从实践角度来看,LVM的功能没有ZFS强大,使用也稍显复杂。
但LVM已经被证明是稳定的,原理应该和ZFS大概一致。
而且默认包含在很多Linux发行版中,所以还是有一定的实际价值的。
更多的LVM相关资料可以参见下面的链接:

1,LVM文档:
http://www.tldp.org/HOWTO/LVM-HOWTO/intro.html

2,必看的LVM操作实践:
http://www.tldp.org/HOWTO/LVM-HOWTO/recipes.html

3,第三方的使用lvm对MySQL数据库进行备份的工具:mylvmbackup:
http://www.lenzg.net/mylvmbackup/
此工具依赖很多perl的包,我没有耐心安装,只看了看其原理,大家有兴趣可以实践一下。
这个网站上也有很多LVM相关介绍的链接。

Powered by WordPress