参考:http://blog.sina.com.cn/s/blog_63ac8a6c0100g21d.html

1.DD

底层测试:从linux安装盘启动,鼠标和键盘启动后按Ctrl+Alt+F1,进入Sh模式
dd读测试

time dd if=/dev/sd* of=/dev/null bs=64k count=64k

dd写测试

time dd if=/dev/zero of=/dev/sd* bs=64K count=64k

注:1)参数为bs=64K count=64k时,测试文件大小为4.3G

2)测试文件大小至少要大于系统内存的两倍测试才准确

3)在底层测试独立于操作系统之外,不受操作系统影响,测试较准确,

测试完成后原来分区中的数据不可恢复,操作系统需重做。

在ext3文件系统上的测试
mount ext3分区

mount /dev/sda1 
/drive1


运行dd测试

写 time dd if=/dev/zero of=/drive1/test.txt bs=64K 
count=64K

读 time dd if=/drive1/test.txt of=/dev/null bs=64K
count=64K


rm /drive1/test.txt
bs:
block大小
count: 设置dd的io数量/dev/null:回收站、无底洞
/dev/zero:字符产生器2.IOzone:
安装RPM包,在/opt/iozone/bin下找到执行文件
./iozone -a -n 512m -g 4g -i 0 -i 1 -i 5 -f /dsndata/xxxx -Rb ./xxx.xls-a 在希望的文件系统上测试
-n 指定最小测试文件大小(最好大于内存容量的两倍,测试才准)
-g 指定最大测试文件大小
-i 指定测试内容
0=write/rewrite
1=read/re-read
2=random-read/write
3=Read-backwards
4=Re-write-record
5=stride-read
6=fwrite/re-fwrite
7=fread/Re-fread,
8=random mix
9=pwrite/Re-pwrite
10=pread/Re-pread
11=pwritev/Re-pwritev,
12=preadv/Re-preadv-r # 指定block大小
-f 指定测试路径和文件名
-Rb 产生execl格式的输出日志
./XXX.xls 指定日志文件名

Write: 测试向一个新文件写入的性能。当一个新文件被写入时,不仅仅是那些文件中的数据需要被存储,还包括那些用于定位数据存储在存储介质的具体位置的额外信息。这些额外信息被称作“元数据”。它包括目录信息,所分配的空间和一些与该文件有关但又并非该文件所含数据的其他数据。拜这些额外信息所赐,Write的性能通常会比Re-write的性能低。

  Re-write: 测试向一个已存在的文件写入的性能。当一个已存在的文件被写入时,所需工作量较少,因为此时元数据已经存在。Re-write的性能通常比Write的性能高。

  Read: 测试读一个已存在的文件的性能。

  Re-Read: 测试读一个最近读过的文件的性能。Re-Read性能会高些,因为操作系统通常会缓存最近读过的文件数据。这个缓存可以被用于读以提高性能。

  Random Read: 测试读一个文件中的随机偏移量的性能。许多因素可能影响这种情况下的系统性能,例如:操作系统缓存的大小,磁盘数量,寻道延迟和其他。

  Random Write: 测试写一个文件中的随机偏移量的性能。同样,许多因素可能影响这种情况下的系统性能,例如:操作系统缓存的大小,磁盘数量,寻道延迟和其他。

  Random Mix: 测试读写一个文件中的随机偏移量的性能。同样,许多因素可能影响这种情况下的系统性能,例如:操作系统缓存的大小,磁盘数量,寻道延迟和其他。这个测试只有在吞吐量测试模式下才能进行。每个线程/进程运行读或写测试。这种分布式读/写测试是基于round robin 模式的。最好使用多于一个线程/进程执行此测试。

  Backwards Read: 测试使用倒序读一个文件的性能。这种读文件方法可能看起来很可笑,事实上,有些应用确实这么干。MSC Nastran是一个使用倒序读文件的应用程序的一个例子。它所读的文件都十分大(大小从G级别到T级别)。尽管许多操作系统使用一些特殊实现来优化顺序读文件的速度,很少有操作系统注意到并增强倒序读文件的性能。

  Record Rewrite: 测试写与覆盖写一个文件中的特定块的性能。这个块可能会发生一些很有趣的事。如果这个块足够小(比CPU数据缓存小),测出来的性能将会非常高。如果比CPU数据缓存大而比TLB小,测出来的是另一个阶段的性能。如果比此二者都大,但比操作系统缓存小,得到的性能又是一个阶段。若大到超过操作系统缓存,又是另一番结果。

  Strided Read: 测试跳跃读一个文件的性能。举例如下:在0偏移量处读4Kbytes,然后间隔200Kbytes,读4Kbytes,再间隔200Kbytes,如此反复。此时的模式是读4Kbytes,间隔200Kbytes并重复这个模式。这又是一个典型的应用行为,文件中使用了数据结构并且访问这个数据结构的特定区域的应用程序常常这样做。

  许多操作系统并没注意到这种行为或者针对这种类型的访问做一些优化。同样,这种访问行为也可能导致一些有趣的性能异常。一个例子是在一个数据片化的文件系统里,应用程序的跳跃导致某一个特定的磁盘成为性能瓶颈。

  Fwrite: 测试调用库函数fwrite()来写文件的性能。这是一个执行缓存与阻塞写操作的库例程。缓存在用户空间之内。如果一个应用程序想要写很小的传输块,fwrite()函数中的缓存与阻塞I/O功能能通过减少实际操作系统调用并在操作系统调用时增加传输块的大小来增强应用程序的性能。

  这个测试是写一个新文件,所以元数据的写入也是要的。

  Frewrite:测试调用库函数fwrite()来写文件的性能。这是一个执行缓存与阻塞写操作的库例程。缓存在用户空间之内。如果一个应用程序想要写很小的传输块,fwrite()函数中的缓存与阻塞I/O功能能通过减少实际操作系统调用并在操作系统调用时增加传输块的大小来增强应用程序的性能。

  这个测试是写入一个已存在的文件,由于无元数据操作,测试的性能会高些。

  Fread:测试调用库函数fread()来读文件的性能。这是一个执行缓存与阻塞读操作的库例程。缓存在用户空间之内。如果一个应用程序想要读很小的传输块,fwrite()函数中的缓存与阻塞I/O功能能通过减少实际操作系统调用并在操作系统调用时增加传输块的大小来增强应用程序的性能。

  Freread: 这个测试与上面的fread 类似,除了在这个测试中被读文件是最近才刚被读过。这将导致更高的性能,因为操作系统缓存了文件数据。

3.IOmeter:

windows下使用iometer就不用说了

在linux下安装dynamo(网上能下到,iometer与dynamo的版本一定要一致)

执行./dynamo -i win_IP -m linux_IP

把linux下的分区映射到windows下,从iometer窗口可以看到,测试就跟windows下测试一样。

 

注意:1)如果映射不成功,把linux的防火墙关掉应该就行了

2)如果选择物理分区测试,测试完成后可能导致系统重启后起不来,原因是fstab文件被修改

最好是测试之前,提前把fstab做好备份,或把原来的LABEL修改为/dev/sd*的形式

如果忘了做准备,导致系统加载分区失败,可以使用命令mount -o remount,rw /dev/sda*

把/目录的权限改为可写,进而修改fstab。测试完成后需重做文件系统才能mount。(mkfs.ext3

3)如果选择测试文件系统,必须先运行一遍iometer,往文件路径中写入准备文件iobw.tst,再重启

dynamo和iometer才能正常测试。这种方式不会导致linux不能启动。

4) iometer与DD测试linux下磁盘性能比较。

raid卡盘阵两种测试结果误差不大。最近发现读性能测试结果偏高。

IP-SAN误差较大,iometer测试不使用主机内存做缓存,直接读写磁盘。

DD则使用主机内存作为缓存,通过缓存读写磁盘,测出的性能比iometer偏高。

 

4.bonnie++

安装RPM包,

执行

bonnie++ -d /dsndata -s 8098 -u 0

-d 生成测试文件的路径

-s 生成测试文件的大小,以M为单位(要求文件大小至少是系统物理内存的2倍)

-u 测试文件的属主和组,默认是执行bonnie++的当前用户和当前组

这几个参数就行其它的不用管

 

结果解读

Version  
1.03 ------Sequential Output--- --Sequential
Input读-
--Random-

-Per Chr- --Block-- -Rewrite- -Per Chr- --Block--
--Seeks--
Machine Size K/sec %CP
K/sec %CP K/sec %CP K/sec %CP K/sec %CP /sec %CP
localhost.loc 8104M
38891 93 135756 57 29551 11 36902 75 77748 14
353.0
1

------Sequential Create------ --------Random
Create--------

-Create-- --Read--- -Delete-- -Create-- --Read---
-Delete--

files /sec %CP /sec %CP /sec %CP /sec %CP /sec
%CP /sec
%CP

16 26165 100 +++++ +++ +++++ +++ 26210 99 +++++ +++ +++++
+++
localhost.localdomain,8104M,38891,93,135756,57,29551,11,36902,75,77748,14,353.0,1,16,26165,100,+++++,+++,+++++,+++,26210,99,+++++,+++,+++++,+++

分别是Sequential Output(连续写测试),
Sequential Input(连续读测试),
Random Seeks(随机读写测试),
Sequential Create(顺序读写文件测试)
和Random Create(随意读写文件测试)。

Sequential Output部分表示写文件的相关信息
Sequential Input部分表示读文件的相关信息
Per Chr表示以字符为单位读写文件
Block表示以block为单位读写文件
Rewrite表示修改并重写已经存在的文件的每一个block
K/sec表示每秒读或写文件的速率,以K为单位
%CP表示在某阶段执行操作时平均消耗的CPU


赠人玫瑰
手留余香

我们曾如此渴望命运的波澜,到最后才发现:人生最曼妙的风景,竟是内心的淡定与从容……我们曾如此期盼外界的认可,到最后才知道:世界是自己的,与他人毫无关系!-杨绛先生