本文目录:
- 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平均响应时间
1332.9315253.002217
2333.9850745.986528
4332.59465312.025060
8336.56801223.766359
16329.78560648.513477
32332.05459096.353934
64331.041063193.200815
128331.309109385.163111
256327.442963774.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平均响应时间
11215.9958420.820917
24657.0613170.428420
45369.3269700.744060
85377.3873031.486629
165487.9116602.914048
325470.9726635.846616
645520.23401511.585251
1285542.73981623.085843
2565513.99461146.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顺序写64164.07 MB/s
顺序读吞吐测试256KB顺序读64179.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工具】的内容来源于互联网,如引用不当,请联系我们修改。
网友留言: