PCEVA,PC绝对领域,探寻真正的电脑知识
打印 上一主题 下一主题
开启左侧

关于 fio/IOmeter 测试QD深度与速度关系 和 离散度测试的问题

[复制链接]
跳转到指定楼层
1#
feeling4t 发表于 2014-11-21 00:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
点击数:9283|回复数:6
看到论坛里很多SSD测评的文章里都有以下两项, QD深度对随机4KB/8KB/16KB/32KB/64KB/128KB/256KB/1MB读写造成的影响,
以及

离散分布测试(IOMETER测试大约5000秒)


自己也尝试了一下这两项测试,发现有几个问题无法理解

1. 对于QD深度对速度影响的测试,很多图片里标注的测试工具是IOmeter, 但是IOmeter编辑测试脚本(Specifications)里面并没有QD的选项,只有在测试开始的时候Disk Targets选项卡里面设置OutStanding改变QD深度。目前我想到的方法就是编写一系列4KB/8KB/16KB/32KB/64KB/128KB/256KB/1MB读写的任务,每个任务运行100秒,手工设置QD深度为1,跑一遍; 再把OutStanding改成2,跑一边....一直到跑完QD32后从result.csv里取数据。
但这样有两个问题,a> 这样测试没办法自动化,还是有很多要手工改的地方,很麻烦    b> 从一次测试跑完到手工改变QD深度再开始下一轮测试这个过程之间的的时间是没办法精确控制的,有可能因为这段空闲时间SSD的GC引起测试结果的误差


2.  对于QD深度对速度影响的测试, workers(或者fio里的numjobs)该设成几个呢? 我只在 @neeyuese 早年一篇测评里看到iometer的worker设为一个工作的,但这样fio或者iometer只能使用一个CPU。对于很多高端SSD(IOPS几十万的PCIE企业级SSD),当QD16的时候cpu单核就100%满了,这时候测到的QD32的性能受限于CPU的瓶颈不能真实反应SSD的实际性能,提高workers的数量可以压榨出SSD的全部性能,但当多个worker时,比如4worker 8QD,这时候实际的写入压力已经不是8QD了。
所以,如果用一个worker在高QD深度的时候CPU成为瓶颈无法测出SSD真实性能,多个Worker测试低QD深度数据又不准,所以想请教一下这个QD深度对速度影响的测试图形一般是怎么测出的。


3. 离散分布测试的图像很漂亮,不知道是怎么做出的。目前我的方法是通过fio或iometer持续压力测试,然后将 iostat -dx 10 的结果导入到一个文件里,在去处理这个文件里的数据导入excel画图,想问一下还有更好的办法吗?


4. 对于离散分布测试, 同样也有这样的问题,workers(或者fio里的numjobs)该设成几个呢? 一个压不满性能,多个的话真实QD已经不是32了。同时,我发现numjobs数对结果的影响也很大,将numjobs分别设为4和16,对于同一个SSD,开始的时候写入IOPS都能到250k, 但当进入稳态后4并发的只有40k左右IOPS,16并发的有60IOPS


5. IOmeter和fio近似参数结果差距比较大,对于DC S3700 200G,在i5-3470上, IOmeter 4k QD1 全盘LBA随机写接近60M/s, fio 4k QD1 direct=1 全盘LBA随机写只有37M/s,相同的参数差别为什么这么大呢?


6. 在Intel 730的测试里看到了SNIA标准的测试。关于snia测试确实没有查到太多资料,只在一篇SSD固态硬盘2012终极横评及选购指南的文章里看到具体预训练的步骤,请问iometer这边有现成的公开脚本吗?自己测试的话又如何判定其进入稳态?


问题一时有点多,多谢你能读到这里

2#
neeyuese 发表于 2014-11-21 09:37 | 只看该作者
问题1:

需要自动化的话也不难,在test setup那里,Cycling options 里的cycle outstanding i/o 可以选择循环增量,这样的话你只要设置测试块和读写模式,然后在那里设置增量规则,软件会自动测完一轮读写按照规则增加到你需要的QD再测一轮。(具体怎么设置你自己摸索吧,反正我们内部评测都是这样的。)误差这个在所难免,也不会有什么使用环境这么切换QD,因此这个测试一般是用来测SSD每种读写块下的每种QD下的最大IOPS而已。

问题2:

一般来说,现在消费级的SSD和企业级的非PCIe SSD测试时都不太占用CPU,因此Work放1个没什么不好,况且很多软件原本就对多核心CPU支持不好。当然了,如果测服务器环境,例如有双路CPU的,则可以考虑work增加到2个,每个QD设置16,这样就等于总QD32了。企业级PCIe SSD则不同,有些是Host Base的,也就是映射表跑在系统内存,处理占用主机CPU,主机性能影响总体表现,它们自然有另一套测试方法,而且系统也不一定是Windows了,这样的话其实用FIO测更适合,Iometer毕竟功能有限。

问题3:

离散测试的话,在Iometer的新版1.1里,有增加了每秒1记录的功能,测完用excel画表还是很轻松的。

问题4:

这个和问题2道理一样,取决于你的测试目的和主机。

问题5:

你这边有详细测试结果文件么?不过iometer和FIO的测试引擎不同,因此没有直接可比性。一般来说Iometer几个版本之间也会有差异。

问题6:

脚本可以自己做,参照SNIA的测试标准,其实用Iometer测不严谨,用FIO比较合适。简单介绍可以看这里:http://www.snia.org/forums/sssi/knowledge/education

3#
wyysoft 发表于 2014-11-21 09:49 | 只看该作者
IOPS测完以后用excel处理数据,把ran write 4k 25轮的值提取出来画图,看从哪一轮开始变稳定了,这个稳定有一定的标准,需参考PTS手册。
确定了稳态以后再取出其后5轮的数据,平均,画图。
4#
iamconan 发表于 2014-11-21 10:11 | 只看该作者
本帖最后由 iamconan 于 2014-11-21 10:12 编辑

关于5
用strace看看打开设备的时候是否确实加了O_DIRECT?
iometer 2006用的读写方法相当于fio的posixaio,和libaio测出的性能会不一致,不过libaio的性能应该会好一些……iometer 1.10后应该也是用libaio了
5#
倩影伊人 发表于 2015-1-15 15:30 | 只看该作者
      我还有一个疑问,在硬盘测试中,IO引擎所扮演的到底是怎么样一个角色,采用的IO引擎不同,对测试结果会有很大的影响吗?或者说,在什么样的场景下用什么样的IO引擎比较合适?当然,同步IO引擎和异步IO引擎的区别还是可以理解的。
      还望各位不吝赐教。在此感谢!
6#
larryexchange 发表于 2015-1-16 00:13 | 只看该作者
倩影伊人 发表于 2015-1-15 15:30
我还有一个疑问,在硬盘测试中,IO引擎所扮演的到底是怎么样一个角色,采用的IO引擎不同,对测试结果 ...

不同的IO引擎,对同样的测试用例,结果差别可能会很大。不同的引擎当然有新旧、高下之分,但更重要的是他们也都有不同的最佳使用场景。例如下面的链接就有人比较了Linux上的Libaio和POXIS AIO的区别。
http://stackoverflow.com/questions/8768083/difference-between-posix-aio-and-libaio-on-linux

关于阻塞,非阻塞IO和同步,异步IO的比较权威的资料是Richard Stevens的”UNIXNetwork Programming Volume 1, Third Edition: The Sockets Networking ”中的6.2章节“I/O Models ”。
7#
倩影伊人 发表于 2015-1-21 16:11 | 只看该作者
我在iometer和FIO上分别测试希捷ST120HM000-1G5421 120.0GB盘的读写性能,发现随机写性能相差了很多,单就4k随机写来说,在iometer上的测试速度只有4k多,但在FIO上的速度却接近2万。如果我的测试方式没错,那么这个差距也太大了吧?

不知道有没有哪位朋友明白其中的原因。一般对于iometer和FIO的测试结果,理论上来说哪一个更具说服力?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部