2022
我们一起努力

Iometer工具(goniometer软件)

本文目录:

  • 1、磁盘擦除是什么意思
  • 2、硬盘测速工具
  • 3、Iometer存储测试工具参数说明-图形主界面(整理)
  • 4、怎么检测买的s2d质量
  • 5、如何测试云硬盘
  • 6、有哪些免费又好用的存储性能测试工具?

磁盘擦除是什么意思

问题一:磁盘擦除是什么意思 磁盘里的文件不管是删除还是格式化后,其实文件并没有消失,而是还留在了磁盘之中。磁盘擦除工贰的作用是把这些文件彻底的消失。

问题二:擦除磁盘剩余空间是什么意思 如题:今天用CCcleaner的擦除剩余可用空间,以前没用过,想试试,结果:

刚开始时,看见C盘的可用空间在不断减少,C盘擦除完毕后,少了2G的可用空间,原来可用24G,现在可用22G,是在擦出完C盘的剩余可用空间后,擦到D盘时,我取消了,我就想问问高手,怎么恢复这2G的被擦除的可用空间,盼赐教

没有害 擦出剩余空间只是清楚硬盘里面的剩余空间的垃圾而已

问题三:360的硬盘擦除器有什么作用? 我们平常的删除文件只是从磁盘上删除它的检索目录而已,但磁盘上的磁道还是保持那种状态,所以它是可以通过一些软件重新建立检索目录,你的文件也就恢复了。而磁盘擦除器是对磁盘上的磁道进行重新处理,让它变成其他的状态,也就是不再是保存你的文件的那种状态。所以你删除文件后,如果再用磁盘擦除器把磁盘擦除一遍的话,就是神仙也无法再将它恢复了。你的文件就得到保密,无其他人再能看到你的文件了。我想这样通俗点讲你可能会明白的,希望对你有帮助。

问题四:电脑磁盘擦除有什么用 就是把磁盘里面的内容清除掉。

问题五:硬盘分区时,那个擦除是什么意思 防止分区里存放的数据被人恢复。

硬盘分区里的数据经过删除、格式化后,如果没有其他数据覆盖,仍可通过专门的数据恢复软件恢复,有可能泄密。分区擦除能够将数据删除后,重新覆盖上垃圾数据,使得数据恢复成为不可能的,保证了删除后的数据不会被泄露。

问题六:求教,分区助手里的擦除磁盘和慢速格式化有什么区别 擦除磁盘就是普通的格式化。你可以理解为【软格】,只是让硬盘无法识别磁盘上存有的信息了而已,表现出来的结果就是你发现硬盘里存储的文件被删掉了,但实际上那些信息还在磁盘表面,利用PC3000-UDMA等数据恢复硬件还能恢复。

你说的慢格,应该就是“低级格式化”。也就是【硬格】。利用硬盘的磁头直接处理盘面的过程。这个过程是物理性质的“擦除”,低格完毕的硬盘无法通过常规手段恢复数据,据说牛B的设备加牛B的人开盘后能恢复,但我认为不可能100%恢复出来,毕竟有伤了。要知道99%恢复和100%恢复其实差别是巨大的。

低格对硬盘肯定是有损伤的,会降低寿命是必然的。但是低格有时候也能修复物理坏道(你可以理解为磁盘上有个坑,然后低格的过程是用磁头针去铲平),同时还能将已经坏掉的硬盘重新划分区域,把坏的地方屏蔽掉,好的地方继续用,这样容量虽然小了但不至于全盘扔掉。虽说估计没人敢用这样的坏盘存数据就是。

问题七:擦除硬盘是什么意思?擦除后影响电脑使用吗? 就是删除硬盘里面的数据、文件、资料等,没用的东西可以删除,有用的东西删除了电脑就会出问题

问题八:硬盘擦除是什么命令? 方法一: 网上有很多工具,可以实现永久性擦除数据

方法二: netapp有个sannity是用来擦数据的。

ds不知道有没有这功能,估计没有吧。

告诉你个免费的办法,用iometer等测试软件,向他上面写东西,win上的iometer会先写入一个大文件。这样就相当于擦盘了。

方法三: 重组RAID,将raid5改成其他raid模式

方法四: 将硬盘向地面猛砸N次,如果不放心,可以再进行充分拆 ...

问题九:什么是磁盘痕迹擦除 磁盘痕迹擦除 是覆盖盘内空余文件 再次进行删除,让别人难以通过数据恢复软件找到 你删除的 以前的东西

一般用户没必要使用

硬盘测速工具

HD-Tach , IOMeter , Winbench99

不过我认为测速软件只能做个参考,千万不能太当真!

因为不同测试软件的开发平台及针对产品,肯定有其特点,测一个产品准,测另外一款就未必准,IOMeter 是Intel公司开发的一个专门测试系统I/O(包括磁盘、网络等)速度的测试软件, 你可以看看是否满意!

Iometer存储测试工具参数说明-图形主界面(整理)

1、Topology/Workers: 默认情况下,iometer根据机器的CPU个数生产相对于的worker。 Worker的数量取决于当前机器上的CPU核心数(我的CPU是2600K,4核8线程,所以有8个Worker),每个Worker可以让你制定硬盘同时执行的线程数,多线程测试适合高性能服务器或者企业级的存储设备用的。

2、Targets:(在设置Disk Target时会有3种不同的图标来表示不同类型的硬盘情况)

黄色图标的表示的是”Logical drive 逻辑磁盘“,意思就是已经分过区的,格式化的并且上面拥有文件系统的磁盘。(会显示硬盘分区卷标和卷标名)

如果黄色图标上加了红色删除的线,则代表的是这块逻辑硬盘上没有iobw.tst文件。Iometer在对逻辑硬盘测试前,会生成一个iobw.tst的测试文件,通过对这个文件进行”读取/写入“操作来计算IO成绩和传输率。

蓝色的图标表示的是”原始(RAW)硬盘“的意思,指的是这块硬盘上文件系统无法识别或者没分区和格式化,测试文件不能在上面创建。(会显示硬盘的型号)

这里有一点需要注意,如果之前做过Iometer逻辑硬盘测试,并在这个分区里已经有iobw.tst文件,则在下次做测试前必须先删除,不然是不能改变这个之前测试生成的iobw.txt文件大小的。(也就是说会影响到下次测试的准确性)

3、Maximum Disk Size / Starting Disk Sector / # of Outstanding IO:

A、Maximum Disk Size 

一般的机械硬盘sector(扇区)大小为512字节(扇区为硬盘最小存储单位)。

如果这里使用默认的0时,意思就是写满这块硬盘的所有扇区。

如果你想测的是固定大小时,可以透过设置Maximum Disk Size这个参数来达到。输入1000就代表会在测试前生成一个大小为1000X512字节的iobw.tst测试文件。

Windows系统每个扇区的大小是512Byte,所以这里填20000000就是指Worker 1会占用某盘10GB的空间,另外在做FCSAN/IPSAN磁盘测试时设置的大小推荐大于SAN设备缓存的2倍,太小的话Iometer只跑在缓存上,跑出来的性能会偏高不准确。但是从里一个方面来说,如果我们想让最终的结果看起来好看,那么我们可以将该参数设置的小一点,根据测试目的自己把握吧);

如果你设置的Maximun Disk Size数字比当前磁盘系统的缓冲区小的话,测试成绩很可能是缓冲区性能,速度会爆高,所以适当设大点吧。

 在Iometer开始对磁盘进行访问时会先生成一个文件iobw.tst其大小决定于“Max Disk Size”。如Max Disk Size =10000,则生成5M的文件。如果Max Disk Size =0,

则生成一个占满全磁盘的文件。这个动作在Iometer“开启-关闭”过程中只做一次。之后如果删除这个文件,再对其进行顺序写操作时,发现文件只是指定用于访问磁盘的数据块的大小;如果此时是对磁盘进行随机读或写,那么Iometer出错;如果设置对磁盘进行顺序读,Iometer此时不会对磁盘进行读操作。即此时只有顺序写操作有效。 

Iometer运行后,使用64K的数据块对本机磁盘进行顺序写,此时带宽为36.5,IOPS为584.0,停止Iometer,删除已生成的文件,再次启动Iometer,此时IOPS一下就升到了1650左右,带宽也变成103左右。

 Iometer使用Maximum Disk Size + Starting Disk Sector的加法和来控制iobw.tst文件的上限大小并以此大小来创建文件。如果该文件已经存在了,更改该值并不能resize iobw.tst。如果两个worker被分配给同一个unprepared逻辑驱动器,那么第一个worker的Maximum Disk Size + Starting Disk Sector的加法和会生效。

B、Starting Disk Sector

指的是由硬盘的第几个扇区开始写入。即Worker1 从哪个扇区开始写它的iobw.tst测试文件,这里保持默认的0即可。

如果Starting Disk Sector是5而Maximum Disk Sizes 是10那么Iometer将对磁盘的5-12扇区进行访问 

C、 of Outstanding I/O

 指的是同时发送的IO请求(聪明人知道这个就是体现NCQ的作用了),预设值是1,一般家用测试不会去修改这个项目的,只有厂家秀分数做广告时会去改成32来跑最大IOPS忽悠用户。

指的是Worker 1在D盘上同时会开多少个异步的IO操作,在主机的CPU、内存能力够强时,并发数越多最终跑出来的结果会越准确,默认的是1个。 具体设置为多少比较好,我们可以实际试一下:先跑1个,看看Result是多少,5个时Result是多少,10个、20个、50个、100个、120个…… 在CPU内存承受范围内,找到一个最合适的值。

of Outstanding I/O被选中worker的每个磁盘一次所允许的未处理的异步I/O的数量。(注意:如果操作完成的非常快,磁盘实际看到的队列深度可能更少,默认值是1)举个例子:假设选中了一个Manager,选中8个Disk,指定# of Outstanding I/O of =16,磁盘被分布到各个worker(每个worker分到2个disk),每个worker对其下的每一个disk生成最大16个未处理I/O,那么整个系统中该Manager每次将生成最多128个未处理I/O(4 worker * 2disk/worker * 16未处理I/O/disk)。

注意:如果系统中未处理I/O的数量非常大,Iometer或Windows会hang、thrash或crash。这里所谓的”非常大“究竟是多少取决于磁盘驱动程序和可用的内存数量。这个问题是由于Windows和某些磁盘驱动程序的限制,并不是Iometer的问题。Iometer允许你设置未处理I/O的数量,而其他应用程序未必,所以其他应用程序对此问题并不常见。

D、Test Connection Rate

指的是Worker 1以什么样的操作频率频率打开、关闭D盘。默认不勾选的意思是,所有的连接都是open状态,直到测试停止。这里我们保持默认即可。

默认是关闭意思是所有磁盘都是在开始访问时开启。在结束访问时关闭。一般来讲磁盘从“打开-访问的IO数-关闭”这个过程称为一个连接。如果开启这个值,并指定了一个数,意思就是Iometer在开始访问磁盘时打开磁盘,发起这个数量的IO后就会关闭磁盘然后重新打开磁盘、执行IO„„周而复始。

Test Connection Rate控制worker多久打开和关闭磁盘一次。默认是Off,表示所有磁盘在测试开始的时候就是打开的,并在测试结束后被关闭。如果Test Connection Rate是打开的,worker会在测试开始的时候打开其所有的磁盘,当指定数量的事务在某个磁盘上执行完毕后,该磁盘就会被关闭,并在下一个I/O达到磁盘之前被重新打开(re-open),事务数量可以是0,意味着worker仅仅重复打开及关闭磁盘。事务是指一个I/O请求及其响应,是否有响应取决于Edit Access Specification对话框中的“Reply Size”设定。每个“打开+事务+关闭”的序列被称为一个连接(Connection),系统会为每个连接记录从打开到关闭所用的时间,系统会报告最大连接时间、平均连接时间以及每秒平均连接数。 

4、Write IO Data Pattern(新版Iometer相比2006和2008版多出来的项目)

Repeating Bytes: 生成的IO数据是重复的,比如第一批IO数据是全”A”,第二批是全”B”,这个数据模型是Iometer 2008里默认使用的,也是最适合SandForce主控压缩算法的,所以SandForce做广告时都是用Iometer 2008的数据。

Peseudo random: 缓冲区里用随机的数据模型填满,写入完后再重新生成新的随机数据到缓冲区,造成每次写入IO都不同。这个数据模型是从最初的版本一直到Iometer 2006默认采用的,非常不适合SandForce主控进行压缩算法。

Full random:生成一套随机的16MB大小的数据模型到缓冲区。每次写入IO都会使用这套缓冲区的随机数据模型。(虽然是随机数据,但是由于每次的随机数据都一样,所以对采用了副本压缩技术的SandForce控制器,相当于每次只需要更新随机数据的索引部分即可,还是能够压缩部分数据。)

1)Transfer Request Size (测试请求的文件大小)

你要测试的文件块大小,比如测4KB随机的就填写4KB,测128KB持续的就填128KB。

2)Percent of Access Specification (当前规则占此测试中的比例)

如果你测试中需要添加多条规则的话,这个就可以设置比例了,比如50%做4KB随机测试,同时另外50%做128KB持续测试。

3)Percent Read/Write Distribution (测试请求的读/写的比率)

当前测试规则的读取/写入比率,比如66%读取的同时34%为写入,打个比方,我们的操作系统运行时在读取的时候,后台也在写入。

4)Percent Random/Sequential Distribution (测试请求的随机/持续比例)

随机和持续占的百分比,比如测4KB随机80%的同时测4KB持续20%。

5)Align I/O on (对齐 I/O到指定大小)

SSD要分区对齐,这里也是这个道理,一般测SSD都是对齐到4KB。如果设4KB,指的是测试的数据每次都是4KB对齐的。

6)设置规则的全局显示

全部设置完了,起个名字,然后最后再看下没问题即可点下面的OK确认。

1)Run Time (测试时间)

可以设置测试的时间,如果全0代表无限。

2)Ramp up Time

我们知道如果磁盘系统使用阵列卡的话,上来会有个很高的缓存数据,为了保证测试数据的准确性,这里可以设置一定的时间,这样测试结果就不会计算这部分时间的数据,得到更真实的测试数字。

1)Update Frequency (Seconds) (成绩更新频率/秒)

成绩更新的频率,你可以设置每秒更新或者60秒一更新等等。

Results Since (结果从哪个时间段开始)

Start of Test - 由于在进行测试时,每一秒的成绩都不同,如果选择这个选项,那么Iometer显示的就是从测试一开始到现在为止的平均值。

Last of Update - 如果选择的是这个,那么Iometer就会显示最后次更新到现在的平均值。(如果你更新频率为30秒,那么成绩就是这个30秒内的平均值)

2)测试结果显示区域(图里的为默认,可以自己选择需要的结果)

Total I/Os Per Second 当前规则下,每秒处理的IOPS数。

Total MBs per Second 当前规则下,每秒的传输率。

Average I/O Response Time (ms) 当前规则下,平均一次IOPS处理时间。

Maximum I/O Response Time (ms) 当前规则下,最大一次IOPS处理时间。

%CPU Utilization (total) 当前规则下,CPU占用率

Total Error Count 当前测试中,测试出错计数。

怎么检测买的s2d质量

要检测买的s2d质量,可以通过给它们执行多次的性能测试,并比较实验结果,来检测其质量。例如,可以执行内存、CPU、存储、网络等的基准测试,以了解s2d的表现,以判断 其质量如何。另外,也可以使用开源的工具,如IOmeter或FIO,对存储系统进行性能测试,以确保该s2d系统的效果。

如何测试云硬盘

问题

UOS公有云开放以来,一些用户反应用dd命令测试出来的1TB云硬盘的吞吐率(MBPS)只有128MB/s,而不是我们SLA保证的170MB /s ,这是为什么?下面我会简单介绍如何测试硬盘,RAID,SAN,SSD,云硬盘等,然后再来回答上面的问题。

测试前提

我们在进行测试时,都会分清楚:

测试对象:要区分硬盘、SSD、RAID、SAN、云硬盘等,因为它们有不同的特点

测试指标:IOPS和MBPS(吞吐率),下面会具体阐述

测试工具:Linux下常用Fio、dd工具, Windows下常用IOMeter,

测试参数: IO大小,寻址空间,队列深度,读写模式,随机/顺序模式

测试方法:也就是测试步骤。

测试是为了对比,所以需要定性和定量。在宣布自己的测试结果时,需要说明这次测试的工具、参数、方法,以便于比较。

存储系统模型

为了更好的测试,我们需要先了解存储系统,块存储系统本质是一个排队模型,我们可以拿银行作为比喻。还记得你去银行办事时的流程吗?

去前台取单号

等待排在你之前的人办完业务

轮到你去某个柜台

柜台职员帮你办完手续1

柜台职员帮你办完手续2

柜台职员帮你办完手续3

办完业务,从柜台离开

如何评估银行的效率呢:

服务时间 = 手续1 + 手续2 + 手续3

响应时间 = 服务时间 + 等待时间

性能 = 单位时间内处理业务数量

那银行如何提高效率呢:

增加柜台数

降低服务时间

因此,排队系统或存储系统的优化方法是

增加并行度

降低服务时间

硬盘测试

硬盘原理

我们应该如何测试SATA/SAS硬盘呢?首先需要了解磁盘的构造,并了解磁盘的工作方式:

每个硬盘都有一个磁头(相当于银行的柜台),硬盘的工作方式是:

收到IO请求,得到地址和数据大小

移动磁头(寻址)

找到相应的磁道(寻址)

读取数据

传输数据

则磁盘的随机IO服务时间:

服务时间 = 寻道时间 + 旋转时间 + 传输时间

对于10000转速的SATA硬盘来说,一般寻道时间是7 ms,旋转时间是3 ms, 64KB的传输时间是 0.8 ms, 则SATA硬盘每秒可以进行随机IO操作是 1000/(7 + 3 + 0.8) = 93,所以我们估算SATA硬盘64KB随机写的IOPS是93。一般的硬盘厂商都会标明顺序读写的MBPS。

我们在列出IOPS时,需要说明IO大小,寻址空间,读写模式,顺序/随机,队列深度。我们一般常用的IO大小是4KB,这是因为文件系统常用的块大小是4KB。

使用dd测试硬盘

虽然硬盘的性能是可以估算出来的,但是怎么才能让应用获得这些性能呢?对于测试工具来说,就是如何得到IOPS和MBPS峰值。我们先用dd测试一下SATA硬盘的MBPS(吞吐量)。

#dd if=/dev/zero of=/dev/sdd bs=4k count=300000 oflag=direct

记录了300000+0 的读入 记录了300000+0 的写出 1228800000字节(1.2 GB)已复制,17.958 秒,68.4 MB/秒

#iostat -x sdd 5 10

...

Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %util

sdd 0.00 0.00 0.00 16794.80 0.00 134358.40 8.00 0.79 0.05 0.05 78.82

...

为什么这块硬盘的MBPS只有68MB/s? 这是因为磁盘利用率是78%,没有到达95%以上,还有部分时间是空闲的。当dd在前一个IO响应之后,在准备发起下一个IO时,SATA硬盘是空闲的。那么如何才能提高利用率,让磁盘不空闲呢?只有一个办法,那就是增加硬盘的队列深度。相对于CPU来说,硬盘属于慢速设备,所有操作系统会有给每个硬盘分配一个专门的队列用于缓冲IO请求。

队列深度

什么是磁盘的队列深度?

在某个时刻,有N个inflight的IO请求,包括在队列中的IO请求、磁盘正在处理的IO请求。N就是队列深度。

加大硬盘队列深度就是让硬盘不断工作,减少硬盘的空闲时间。

加大队列深度 - 提高利用率 - 获得IOPS和MBPS峰值 - 注意响应时间在可接受的范围内

增加队列深度的办法有很多

使用异步IO,同时发起多个IO请求,相当于队列中有多个IO请求

多线程发起同步IO请求,相当于队列中有多个IO请求

增大应用IO大小,到达底层之后,会变成多个IO请求,相当于队列中有多个IO请求 队列深度增加了。

队列深度增加了,IO在队列的等待时间也会增加,导致IO响应时间变大,这需要权衡。让我们通过增加IO大小来增加dd的队列深度,看有没有效果:

dd if=/dev/zero of=/dev/sdd bs=2M count=1000 oflag=direct

记录了1000+0 的读入 记录了1000+0 的写出 2097152000字节(2.1 GB)已复制,10.6663 秒,197 MB/秒

Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %util

sdd 0.00 0.00 0.00 380.60 0.00 389734.40 1024.00 2.39 6.28 2.56 97.42

可以看到2MB的IO到达底层之后,会变成多个512KB的IO,平均队列长度为2.39,这个硬盘的利用率是97%,MBPS达到了197MB/s。(为什么会变成512KB的IO,你可以去使用Google去查一下内核参数 max_sectors_kb的意义和使用方法 )

也就是说增加队列深度,是可以测试出硬盘的峰值的。

使用fio测试硬盘

现在,我们来测试下SATA硬盘的4KB随机写的IOPS。因为我的环境是Linux,所以我使用FIO来测试。

$fio -ioengine=libaio -bs=4k -direct=1 -thread -rw=randwrite -size=1000G -filename=/dev/vdb \

-name="EBS 4K randwrite test" -iodepth=64 -runtime=60

简单介绍fio的参数

ioengine: 负载引擎,我们一般使用libaio,发起异步IO请求。

bs: IO大小

direct: 直写,绕过操作系统Cache。因为我们测试的是硬盘,而不是操作系统的Cache,所以设置为1。

rw: 读写模式,有顺序写write、顺序读read、随机写randwrite、随机读randread等。

size: 寻址空间,IO会落在 [0, size)这个区间的硬盘空间上。这是一个可以影响IOPS的参数。一般设置为硬盘的大小。

filename: 测试对象

iodepth: 队列深度,只有使用libaio时才有意义。这是一个可以影响IOPS的参数。

runtime: 测试时长

下面我们做两次测试,分别 iodepth = 1和iodepth = 4的情况。下面是iodepth = 1的测试结果。

上图中蓝色方框里面的是测出的IOPS 230, 绿色方框里面是每个IO请求的平均响应时间,大约是4.3ms。黄色方框表示95%的IO请求的响应时间是小于等于 9.920 ms。橙色方框表示该硬盘的利用率已经达到了98.58%。

下面是 iodepth = 4 的测试:

我们发现这次测试的IOPS没有提高,反而IO平均响应时间变大了,是17ms。

为什么这里提高队列深度没有作用呢,原因当队列深度为1时,硬盘的利用率已经达到了98%,说明硬盘已经没有多少空闲时间可以压榨了。而且响应时间为 4ms。 对于SATA硬盘,当增加队列深度时,并不会增加IOPS,只会增加响应时间。这是因为硬盘只有一个磁头,并行度是1, 所以当IO请求队列变长时,每个IO请求的等待时间都会变长,导致响应时间也变长。

这是以前用IOMeter测试一块SATA硬盘的4K随机写性能,可以看到IOPS不会随着队列深度的增加而增加,反而是平均响应时间在倍增。

队列深度 IOPS 平均响应时间

1 332.931525 3.002217

2 333.985074 5.986528

4 332.594653 12.025060

8 336.568012 23.766359

16 329.785606 48.513477

32 332.054590 96.353934

64 331.041063 193.200815

128 331.309109 385.163111

256 327.442963 774.401781

寻址空间对IOPS的影响

我们继续测试SATA硬盘,前面我们提到寻址空间参数也会对IOPS产生影响,下面我们就测试当size=1GB时的情况。

我们发现,当设置size=1GB时,IOPS会显著提高到568,IO平均响应时间会降到7ms(队列深度为4)。这是因为当寻址空间为1GB时,磁头需要移动的距离变小了,每次IO请求的服务时间就降低了,这就是空间局部性原理。假如我们测试的RAID卡或者是磁盘阵列(SAN),它们可能会用Cache把这1GB的数据全部缓存,极大降低了IO请求的服务时间(内存的写操作比硬盘的写操作快很1000倍)。所以设置寻址空间为1GB的意义不大,因为我们是要测试硬盘的全盘性能,而不是Cache的性能。

硬盘优化

硬盘厂商提高硬盘性能的方法主要是降低服务时间(延迟):

提高转速(降低旋转时间和传输时间)

增加Cache(降低写延迟,但不会提高IOPS)

提高单磁道密度(变相提高传输时间)

RAID测试

RAID0/RAID5/RAID6的多块磁盘可以同时服务,其实就是提高并行度,这样极大提高了性能(相当于银行有多个柜台)。

以前测试过12块RAID0,100GB的寻址空间,4KB随机写,逐步提高队列深度,IOPS会提高,因为它有12块磁盘(12个磁头同时工作),并行度是12。

队列深度 IOPS 平均响应时间

1 1215.995842 0.820917

2 4657.061317 0.428420

4 5369.326970 0.744060

8 5377.387303 1.486629

16 5487.911660 2.914048

32 5470.972663 5.846616

64 5520.234015 11.585251

128 5542.739816 23.085843

256 5513.994611 46.401606

RAID卡厂商优化的方法也是降低服务时间:

使用大内存Cache

使用IO处理器,降低XOR操作的延迟。

使用更大带宽的硬盘接口

SAN测试

对于低端磁盘阵列,使用单机IOmeter就可以测试出它的IOPS和MBPS的峰值,但是对于高端磁盘阵列,就需要多机并行测试才能得到IOPS和MBPS的峰值(IOmeter支持多机并行测试)。下图是纪念照。

磁盘阵列厂商通过以下手段降低服务时间:

更快的存储网络,比如FC和IB,延时更低。

读写Cache。写数据到Cache之后就马上返回,不需要落盘。 而且磁盘阵列有更多的控制器和硬盘,大大提高了并行度。

现在的存储厂商会找SPC帮忙测试自己的磁盘阵列产品(或全闪存阵列), 并给SPC支付费用,这就是赤裸裸的标准垄断。国内也有做存储系统测试的,假如你要测试磁盘阵列,可以找NSTC (广告时间)。

SSD测试

SSD的延时很低,并行度很高(多个nand块同时工作),缺点是寿命和GC造成的响应时间不稳定。

推荐用IOMeter进行测试,使用大队列深度,并进行长时间测试,这样可以测试出SSD的真实性能。

下图是storagereview对一些SSD硬盘做的4KB随机写的长时间测试,可以看出有些SSD硬盘的最大响应时间很不稳定,会飙高到几百ms,这是不可接受的。

云硬盘测试

我们通过两方面来提高云硬盘的性能的:

降低延迟(使用SSD,使用万兆网络,优化代码,减少瓶颈)

提高并行度(数据分片,同时使用整个集群的所有SSD)

在Linux下测试云硬盘

在Linux下,你可以使用FIO来测试

操作系统:Ubuntu 14.04

CPU: 2

Memory: 2GB

云硬盘大小: 1TB(SLA: 6000 IOPS, 170MB/s吞吐率 )

安装fio:

#sudo apt-get install fio

再次介绍一下FIO的测试参数:

ioengine: 负载引擎,我们一般使用libaio,发起异步IO请求。

bs: IO大小

direct: 直写,绕过操作系统Cache。因为我们测试的是硬盘,而不是操作系统的Cache,所以设置为1。

rw: 读写模式,有顺序写write、顺序读read、随机写randwrite、随机读randread等。

size: 寻址空间,IO会落在 [0, size)这个区间的硬盘空间上。这是一个可以影响IOPS的参数。一般设置为硬盘的大小。

filename: 测试对象

iodepth: 队列深度,只有使用libaio时才有意义。这是一个可以影响IOPS的参数。

runtime: 测试时长

4K随机写测试

我们首先进行4K随机写测试,测试参数和测试结果如下所示:

#fio -ioengine=libaio -bs=4k -direct=1 -thread -rw=randwrite -size=100G -filename=/dev/vdb \

-name="EBS 4KB randwrite test" -iodepth=32 -runtime=60

蓝色方框表示IOPS是5900,在正常的误差范围内。绿色方框表示IO请求的平均响应时间为5.42ms, 黄色方框表示95%的IO请求的响应时间是小于等于 6.24 ms的。

4K随机读测试

我们再来进行4K随机读测试,测试参数和测试结果如下所示:

#fio -ioengine=libaio -bs=4k -direct=1 -thread -rw=randread -size=100G -filename=/dev/vdb \

-name="EBS 4KB randread test" -iodepth=8 -runtime=60

512KB顺序写测试

最后我们来测试512KB顺序写,看看云硬盘的最大MBPS(吞吐率)是多少,测试参数和测试结果如下所示:

#fio -ioengine=libaio -bs=512k -direct=1 -thread -rw=write -size=100G -filename=/dev/vdb \

-name="EBS 512KB seqwrite test" -iodepth=64 -runtime=60

蓝色方框表示MBPS为174226KB/s,约为170MB/s。

使用dd测试吞吐率

其实使用dd命令也可以测试出170MB/s的吞吐率,不过需要设置一下内核参数,详细介绍在 128MB/s VS 170MB/s 章节中。

在Windows下测试云硬盘

在Windows下,我们一般使用IOMeter测试磁盘的性能,IOMeter不仅功能强大,而且很专业,是测试磁盘性能的首选工具。

IOMeter是图形化界面(浓浓的MFC框架的味道),非常方便操作,下面我将使用IOMeter测试我们UOS上1TB的云硬盘。

操作系统:Window Server 2012 R2 64

CPU: 4

Memory: 8GB

云硬盘大小: 1TB

当你把云硬盘挂载到Windows主机之后,你还需要在windows操作系统里面设置硬盘为联机状态。

4K随机写测试

打开IOMeter(你需要先下载),你会看到IOMeter的主界面。在右边,你回发现4个worker(数量和CPU个数相同),因为我们现在只需要1个worker,所以你需要把其他3个worker移除掉。

现在让我们来测试硬盘的4K随机写,我们选择好硬盘(Red Hat VirtIO 0001),设置寻址空间(Maximum Disk Size)为50GB(每个硬盘扇区大小是512B,所以一共是 50*1024*1024*1024/512 = 104857600),设置队列深度(Outstanding I/Os)为64。

然后在测试集中选择”4KiB ALIGNED; 0% Read; 100% random(4KB对齐,100%随机写操作)” 测试

然后设置测试时间,我们设置测试时长为60秒,测试之前的预热时间为10秒(IOMeter会发起负载,但是不统计这段时间的结果)。

在最后测试之前,你可以设置查看实时结果,设置实时结果的更新频率是5秒钟。最后点击绿色旗子开始测试。

在测试过程中,我们可以看到实时的测试结果,当前的IOPS是6042,平均IO请求响应时间是10.56ms,这个测试还需要跑38秒,这个测试轮回只有这个测试。

我们可以看到IOMeter自动化程度很高,极大解放测试人员的劳动力,而且可以导出CSV格式的测试结果。

顺序读写测试

我们再按照上面的步骤,进行了顺序读/写测试。下面是测试结果:

IO大小 读写模式 队列深度 MBPS

顺序写吞吐测试 512KB 顺序写 64 164.07 MB/s

顺序读吞吐测试 256KB 顺序读 64 179.32 MB/s

云硬盘的响应时间

当前云硬盘写操作的主要延迟是

网络传输

多副本,写三份(数据强一致性)

三份数据都落盘(数据持久化)之后,才返回

IO处理逻辑

我们当前主要是优化IO处理逻辑,并没有去优化2和3,这是因为我们是把用户数据的安全性放在第一位。

128MB/s VS 170MB/s

回到最开始的问题 “为什么使用dd命令测试云硬盘只有128MB/s”, 这是因为目前云硬盘在处理超大IO请求时的延迟比SSD高(我们会不断进行优化),现在我们有两种方法来获得更高的MBPS:

设置max_sectors_kb为256 (系统默认为512),降低延迟

使用fio来测试,加大队列深度

通过设置max_sectors_kb这个参数,使用dd也可以测出170MB/s的吞吐量

root@ustack:~# cat /sys/block/vdb/queue/max_sectors_kb

512

root@ustack:~# echo "256" /sys/block/vdb/queue/max_sectors_kb

root@ustack:~#

root@ustack:~# dd if=/dev/zero of=/dev/vdb bs=32M count=40 oflag=direct

40+0 records in

40+0 records out

1342177280 bytes (1.3 GB) copied, 7.51685 s, 179 MB/s

root@ustack:~#

同时查看IO请求的延迟:

root@ustack:~# iostat -x vdb 5 100

...

Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util

vdb 0.00 0.00 0.00 688.00 0.00 176128.00 512.00 54.59 93.47 0.00 93.47 1.40 96.56

下面是使用fio工具的测试结果,也可以得到170MB/s的吞吐率。

不可测试的指标

IOPS和MBPS是用户可以使用工具测试的指标,云硬盘还有一些用户不可测量的指标

数据一致性

数据持久性

数据可用性

这些指标我们只能通过根据系统架构和约束条件计算得到,然后转告给用户。这些指标衡量着公有云厂商的良心,有机会会专门进行介绍。

总结

上面介绍了一下测试工具和一些观点,希望对你有所帮助。

测试需要定性和定量

了解存储模型可以帮助你更好的进行测试

增加队列深度可以有效测试出IOPS和MBPS的峰值

有哪些免费又好用的存储性能测试工具?

常用的免费存储性能测试工具有:IOZone、Iometer、dd、fio。

文件系统缓存会很大程度影响(虚高..)文件系统性能的测试结果。所以一般都是创建大于主机内存的测试文件,然后一定要在每次测试前清除缓存。比如Linux下命令是echo 3 /proc/sys/vm/drop_caches。Windows下可以使用Sysinternals RAMMap等其他各种工具:

Iometer工具】的内容来源于互联网,如引用不当,请联系我们修改。

赞(0)
文章名称:《Iometer工具(goniometer软件)》
文章链接:https://www.fzvps.com/150621.html
本站文章来源于互联网,如有侵权,请联系管理删除,本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。
图片版权归属各自创作者所有,图片水印出于防止被无耻之徒盗取劳动成果的目的。

评论 抢沙发

评论前必须登录!