Chinaunix首页 | 论坛 | 博客
  • 博客访问: 810965
  • 博文数量: 274
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 862
  • 用 户 组: 普通用户
  • 注册时间: 2015-10-24 15:31
个人简介

不合格的程序猿

文章分类

全部博文(274)

文章存档

2019年(3)

2018年(1)

2017年(4)

2016年(160)

2015年(106)

我的朋友

分类: LINUX

2016-07-21 09:59:45

以前用iozone简单测了下ext3dnfs的性能,用磁盘测试工具测了一下硬盘的性能。前者在http://blog.chinaunix.net/u2/87570/showart_1944522.htmlA】中做了分析;后者在http://blog.chinaunix.net/u2/87570/showart_2191188.htmlB】中做了分析。

 

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  计算时间时算上fflushfsync的时间;

-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  读写之前锁定文件;

 

阅读(916) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~