以前用iozone简单测了下ext3及dnfs的性能,用磁盘测试工具测了一下硬盘的性能。前者在http://blog.chinaunix.net/u2/87570/showart_1944522.html【A】中做了分析;后者在http://blog.chinaunix.net/u2/87570/showart_2191188.html【B】中做了分析。
A中的数据当时让我很吃惊,为什么读写的速度能达到GB级呢,B中显示磁盘的裸盘读写速率也只能达到100MB/S呢,难道读写没有通过磁盘? 仔细分析测试命令:
iozone -i 0 -i 1 -Rab /root/test-iozone.xls -g 16M -n 1M
测试write/rewrite, read/reread的性能,最大测试文件16M, 最小测试文件1M.
1. 由于linux页高速缓存机制即延迟写机制,写文件时数据先写入高速缓存,在内存不足或是一定时间之后会被刷新到磁盘。
2. 读文件时,先检查文件数据是否在高速缓存中,如果在则直接从缓存中读取;否则从磁盘读取至高速缓存。
3. 被测试文件大小最大为16M,而我linux所跑机器的内存为1G。
综合以上三点:
1, 写测试文件时,由于文件小,内存足够,不存在数据刷新到硬盘的操作,数据被写到页高速缓存即返回;
2, 读测试文件时,由于数据已在高速缓存,亦可直接返回;
故读写效率相当高,根本没经过磁盘一级,显示了VFS处理读写请求的能力。
那么如何测试读写请求到硬盘处理的整个过程的处理速度呢?由于当时没有详细读iozone的文档,就想着提高测试文件的大小,减小系统使用的内存,这样当写入时,大部分数据都会被刷新到硬盘,从而近似于整个文件从请求到全部写到磁盘的时间。
通过如下测试:
iozone -i 0 -i 1 -Rb /root/test-iozone.xls -s 1g –q 4k
读写的平均速率在60-70MB/S左右。
近日,在一篇关于iSCSI性能测试的文章中发现,iozone能测试direct io,并且能清除cpu cache的影响,分别通过指定-p, -I实现。
通过如下测试:
iozone -i 0 -i 1 –Rb –p -I /root/test-iozone.xls -s 16m –q 4k
读写的平均速率只在20-30MB/S。
iozone使用:
常用参数解释:
-a auto mode产生文件大小16K-512M,记录大小4K-16M的输出结果;
-e 计算时间时算上fflush,fsync的时间;
-f 指定临时测试文件;
-s 指定测试文件大小;
-r 指定测试记录大小;
-g –n 指定auto模式下,最大/小测试文件大小;
-q –y 指定auto模式下,最大/小测试记录大小;
-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/Repreadv)
-I 指定direct io操作;
-p 清除cpu cache影响;
-O 输出IOPS值;
-R 生成excel报告文件;
-W 读写之前锁定文件;