怎么样判断一个硬盘的传输文件的速度,是看读取速度和写入速度还是写入速度呢?

加载中,请稍候...
加载中,请稍候...
商品名称:
京东价:暂无报价
评价得分:
·购买须知
·名词解释
·实用指南
咨询内容:
我已经买过了一个黑甲壳虫的1TB的,但是我的传输速度才20兆每秒,读取速度和写入速度都很慢,是USB3.0的,求解释一下。。谢谢
京东回复:
您好!因传输文件类型,传输文件大小,连接移动硬盘的电脑配置,电脑操作系统都会影响到移动硬盘实际传输速度,具体的请以实物为准。感谢您对京东的支持!祝您购物愉快!
发表咨询:
声明:您可在购买前对产品包装、颜色、运输、库存等方面进行咨询,我们有专人进行回复!因厂家随时会更改一些产品的包装、颜色、产地等参数,所以该回复仅在当时对提问者有效,其他网友仅供参考!咨询回复的工作时间为:周一至周五,9:00至18:00,请耐心等待工作人员回复。
咨询类型:
库存及配送
发票及保修
促销及赠品
京东承诺:商品均为原装正品行货,自带机打发票,严格执行国家三包政策,享受全国联保服务。
功能咨询:咨询商品功能建议您拨打各品牌的官方客服电话,以便获得更准确的信息。
发货时间:现货:下单后一日内即可发货;在途:一般1-2天发货; 预订:一般1-6天可发货;无货:已售完,相应物流中心覆盖地区内的用户不能购买
运&&&&费:如需查看快递运输收费标准及免运费规则,
货到付款:如需查看开通货到付款地区及运费,
上门自提:上门自提不收取运费,如需查看全部自提点位置、地图、注意事项,
物流中心:京东商城拥有北京、上海、广州三个物流中心,各物流中心覆盖不同的城市,
限&&&&额:如需查看各银行在线支付限额,
大额支付:快钱支付中的招行、工行、建行、农行、广发支持大额支付,最高单笔一次支付10000元
分期付款:单个商品价格在500元以上,可使用中国银行、招商银行发行的信用卡申请分期付款,
货到付款:如需查看开通货到付款地区及运费,
京东承诺:商品均为原装正品行货,自带机打发票,严格执行国家三包政策,享受全国联保服务。
发票类型:京东商城所售商品均自带机打发票,在提供相关企业资料证明后,可申请开取增值税发票。
退 换 货:京东商城为您提供完善的退换货服务,
咨询内容:
&将客服的回复发到我的邮箱【转】选购硬盘,究竟是SATA2.0的好还是SATA&3.0的好?
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。电脑的硬盘转速与移动硬盘的写入或读取速度有关系吗
电脑的硬盘转速与移动硬盘的写入或读取速度有关系吗 10
比如说我的笔记本硬盘转速是5400,盘符之间调动文件速度是50几兆每秒,而纽曼无忧这款移动硬盘介绍说它的E-sata接口读取和写入速度都达到100兆以上,想知道我的电脑能达到他说的读写速度吗?
补充:当然我的电脑主板支持E-sata接口,型号是三星R518-DS03
读写速度和转速关系不大,如果你要从一个吞吐速度50多m的硬盘里拷贝文件到一个吞吐速度为100多m的移动硬盘,速度最大就是50多m而已!--------一般硬盘的速度看接口,不同接口的硬盘有不同的吞吐量,但要达到所标示的值,必须主板要支持才可以,而硬盘里的一些其他参数多只是辅助作用,不是主要的决定因素。
就如纽曼这个玩意介绍说e-sata接口的读写速度可以达到什么什么,但如果你的主板不支持该接口,那么也是白搭。
也就是说我的电脑参数限制了数据传输速度,即使读写数据也达不到100多兆的速度喽?
不是你电脑的参数限制,应该说电脑的硬件参数限制!---------呵呵,其实就是这样的,我就是爱挑字眼。----------不过:
1,如果你的数据是从内存直接读写入该硬盘的话,或者可能有100m的速度,前提必须该硬盘的接口支持速度能超过100m!当然这里不会有很大的数据可以读写入。
2,或者数据从该硬盘的缓存写入该硬盘下,写入速度肯定能达到100m!数据其实不是直接写入硬盘的,一般会先存放在硬盘的缓存中到一定的量在写入硬盘,这样可以让硬盘间中休息而达到保护作用,所以大缓存的硬盘是有很大作用的!
呵呵&& 了解不少知识啊~! 最近想琢磨个移动硬盘,上网看看无意间遇到这样一个读写速度特别快的,但是想到电脑内部间移动文件只有50几兆,不知道能不能完全发挥这款硬盘的功能,还是非常感谢了!
其实现在的sata接口1的速度已经为150m/s的,接口2的速度为300m/s,接口3已经是600m/s吧。---我知道的也不很详细,难免说错的可能哦。
其他回答 (9)
有关系, 硬盘转速也大 传的越快
能不能不知道。反正会比你的快,
硬盘有串口,和并口,串口是后来兴起的,你那是并口的?你想想应该哪个快呢?
你的硬盘传输速度已经限制,所以即使能达到你也感觉不出来
不用去追求那个参数,我们的网卡、网线也都是可以达到100M的,可是我们又什么时候用得上过呢。他只是表明那种接口速度更快,而不是我们必须要那么快的。
嗯 你去买个7200转硬盘,读写速度会大大提高
嗯& 可以达到
对于你说的电脑的硬盘转速与移动硬盘的写入或读取速度一般有联系的!但影响不算很大!如果你的移动硬盘写入和读取的速度比较快!那么硬盘会自动调整两个硬盘之间的速度!但是速度越快越好
sata接口!目前还说,大部分都可以的!!
E-sata理论上的读写速度和实际是有差距的。这和硬盘转数确实有关。接口理论速度不论多快,都会受到硬盘自身读写速度的限制。一个每秒只能达到50兆的硬盘,就算用上可以每秒读写达1000兆的接口,硬盘的读写能力也还是50兆,不会随接口速度提高的。
这个要看你的硬盘速度是不是和移动硬盘速度是不是随时都是同步的?
电脑的硬盘转速只是说电脑本身处理问题的快慢移动硬盘的快慢只是取决于移动硬盘处理它自己本身的数据的快慢根电脑硬盘没关系及时它快电脑慢那读取电脑中的数据也是慢的。
我的意思一般你这个有两个硬盘一般是以慢的为基准的。电脑硬盘的转速只代表电脑本身的处理速度你即使电脑的硬盘转速快说明他处理问题快,但是你的移动硬盘转速慢那你的移动硬盘的处理数据慢,你输出的数据慢他电脑的硬盘转速在快处理问题在快你每分钟就输出那么点东西那总体上来说不是还是满慢吗?只要知道硬盘转速越快处理问题越快就行了,你问的问题本身有矛盾。我不太明白你的问题你应该详细描述一下你心中到底想说什么?想让解决什么问题?哪里不清楚?你是怎么想的?
谢谢你的补充,我不是很了解计算机内部数据交换需要的这些条件,就像我跟四楼的兄弟说的,在网上看到的一个读写很快的移动硬盘,但是不知道我的电脑能不能达到他的条件,能不能有那样的一个读写速度,想看看你们有没有用过的这类产品的人来说明一下!!
当然有关系!
相关知识等待您来回答
硬件领域专家usb最大读取速度和最大写入速度什么意思?传东西的速度是看那个,另一个又是什么用的呢?_百度知道
usb最大读取速度和最大写入速度什么意思?传东西的速度是看那个,另一个又是什么用的呢?
提问者采纳
最大读取速度是从usb往电脑拷东西, 最快是多少.最大写入时从电脑拷东西到usb最快为多少.
提问者评价
原来是这样,感谢!
其他类似问题
按默认排序
其他3条回答
读取速度是 你传东西进电脑的速度写入速度是从电脑传东西进U盘的速度传东西是相互的。。2个都看
针对闪存式U盘来说,最大读取速度与最大写入速度受限于U盘的控制芯片与U盘上用的NAND FLASH的读取与写入速度,一般最大读取速度&最大写入速度。针对USB移动硬盘来说,最大读取速度与最大写入速度受限于PC USB接口的读取与写入速度,一般最大读取速度&最大写入速度,如果是USB 2.0应该能达到20~40MB/S
金山卫士可以检测
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁6638人阅读
windows下如何查看磁盘IO性能
通常,我们很容易观察到数据库服务器的内存和CPU压力。但是对I/O压力没有直观的判断方法。
磁盘有两个重要的参数:Seek time、Rotational &latency。
正常的I/O计数为:①1000/(Seek time+Rotational latency)*0.75,在此范围内属正常。当达到85%的I/O计数以上时则基本认为已经存在I/O瓶颈。理论情况下,磁盘的随机读计数为125、 顺序读计数为225。对于数据文件而言是随机读写,日志文件是顺序读写。因此,数据文件建议存放于RAID5上,而日志文件存放于RAID10或 RAID1中。 &
下面假设在有4块硬盘的RAID5中观察到的Physical Disk性能对象的部分值: &
Avg. DiskQueue Length 12 &队列长度
Avg. DiskSec/Read .035 && 读数据所用时间ms
Avg. DiskSec/Write .045 && 写数据所用时间ms
DiskReads/sec 320 &&&&&& 每秒读数据量
DiskWrites/sec 100 &&&&&&&每秒写数据量
Avg. DiskQueue Length,12/4=3,每块磁盘的平均队列建议不超过2。 &
Avg. DiskSec/Read一般不要超过11~15ms。 &
Avg. DiskSec/Write一般建议小于12ms。 &
从上面的结果,我们看到磁盘本身的I/O能力是满足我们的要求的,原因是因为有大量的请求才导致队列等待,这很可能是因为你的SQL语句导致大量的表扫描所致。在进行优化后,如果还是不能达到要求,下面的公式可以帮助你计算使用几块硬盘可以满足这样的并发要求:
Raid 0 -- I/Os per disk = (reads +writes) / number of disks
Raid 1 -- I/Os per disk = [reads +(2 * writes)] / 2
Raid 5 -- I/Os per disk = [reads +(4 * writes)] / number of disks
Raid 10 -- I/Os per disk = [reads +(2 * writes)] / number of disks &
我们得到的结果是:(320+400)/4=180,这时你可以根据公式①来得到磁盘的正常I/O值。假设现在正常I/O计数为125,为了达到这个结果:720/125=5.76。就是说要用6块磁盘才能达到这样的要求。 &
但是上面的Disk Reads/sec和Disk Writes/sec是个很难正确估算的值。因此只能在系统比较忙时,大概估算一个平均值,作为计算公式的依据。另一个是你很难从客户那里得到Seek time、 Rotational latency参数的值,这也只能用理论&#进行计算。
作为一个数据库管理员,关注系统的性能是日常最重要的工作之一,而在所关注的各方面的性能只能IO性能却是最令人头痛的一块,面对着各种生涩的参数和令人眼花缭乱的新奇的术语,再加上存储厂商的忽悠,总是让我们有种云里雾里的感觉。本系列文章试图从基本概念开始对磁盘存储相关的各种概念进行综合归纳,让大家能够对IO性能相关的基本概念,IO性能的监控和调整有个比较全面的了解。
在这一部分里我们先舍弃各种结构复杂的存储系统,直接研究一个单独的磁盘的性能问题,藉此了解各个衡量IO系统系能的各个指标以及之间的关系。
在研究磁盘性能之前我们必须先了解磁盘的结构,以及工作原理。不过在这里就不再重复说明了,关系硬盘结构和工作原理的信息可以参考维基百科上面的相关词条——和。
读写IO(Read/Write IO)操作
磁盘是用来给我们存取数据用的,因此当说到IO操作的时候,就会存在两种相对应的操作,存数据时候对应的是写IO操作,取数据的时候对应的是读IO操作。
单个IO操作
当控制磁盘的控制器接到操作系统的读IO操作指令的时候,控制器就会给磁盘发出一个读数据的指令,并同时将要读取的数据块的地址传递给磁盘,然后磁盘会将读取到的数据传给控制器,并由控制器返回给操作系统,完成一个写IO的操作;同样的,一个写IO的操作也类似,控制器接到写的IO操作的指令和要写入的数据,并将其传递给磁盘,磁盘在数据写入完成之后将操作结果传递回控制器,再由控制器返回给操作系统,完成一个写IO的操作。单个IO操作指的就是完成一个写IO或者是读IO的操作。
随机访问(Random Access)与连续访问(Sequential Access)
随机访问指的是本次IO所给出的扇区地址和上次IO给出扇区地址相差比较大,这样的话磁头在两次IO操作之间需要作比较大的移动动作才能重新开始读/写数据。相反的,如果当次IO给出的扇区地址与上次IO结束的扇区地址一致或者是接近的话,那磁头就能很快的开始这次IO操作,这样的多个IO操作称为连续访问。因此尽管相邻的两次IO操作在同一时刻发出,但如果它们的请求的扇区地址相差很大的话也只能称为随机访问,而非连续访问。
顺序IO模式(Queue Mode)/并发IO模式(BurstMode)
磁盘控制器可能会一次对磁盘组发出一连串的IO命令,如果磁盘组一次只能执行一个IO命令时称为顺序IO;当磁盘组能同时执行多个IO命令时,称为并发IO。并发IO只能发生在由多个磁盘组成的磁盘组上,单块磁盘只能一次处理一个IO命令。
的大小(IO ChunkSize)
熟悉数据库的人都会有这么一个概念,那就是数据库存储有个基本的块大小(Block Size),不管是SQL Server还是Oracle,默认的块大小都是8KB,就是数据库每次读写都是以8k为单位的。那么对于数据库应用发出的固定8k大小的单次读写到了写磁盘这个层面会是怎么样的呢,就是对于读写磁盘来说单个IO操作操作数据的大小是多少呢,是不是也是一个固定的值?答案是不确定。首先操作系统为了提高
IO的性能而引入了文件系统缓存(File System Cache),系统会根据请求数据的情况将多个来自IO的请求先放在缓存里面,然后再一次性的提交给磁盘,也就是说对于数据库发出的多个8K数据块的读操作有可能放在一个磁盘读IO里就处理了。还有对于有些存储系统也是提供了缓存(Cache)的,接收到操作系统的IO请求之后也是会将多个操作系统的
IO请求合并成一个来处理。不管是操作系统层面的缓存还是磁盘控制器层面的缓存,目的都只有一个,提高数据读写的效率。因此每次单独的IO操作大小都是不一样的,它主要取决于系统对于数据读写效率的判断。
当一次IO操作大小比较小的时候我们成为小的IO操作,比如说1K,4K,8K这样的;当一次IO操作的数据量比较的的时候称为大IO操作,比如说32K,64K甚至更大。
在我们说到块大小(Block Size)的时候通常我们会接触到多个类似的概念,像我们上面提到的那个在数据库里面的数据最小的管理单位,Oralce称之为块(Block),大小一般为8K,SQL
Server称之为页(Page),一般大小也为8k。在文件系统里面我们也能碰到一个文件系统的块,在现在很多的Linux系统中都是4K(通过
/usr/bin/time -v可以看到),它的作用其实跟数据库里面的块/页是一样的,都是为了方便数据的管理。但是说到单次IO的大小,跟这些块的大小都是没有直接关系的,在英文里单次IO大小通常被称为是IO
Chunk Size,不会说成是IO Block Size的。
IOPS,IO系统每秒所执行IO操作的次数,是一个重要的用来衡量系统IO能力的一个参数。对于单个磁盘组成的IO系统来说,计算它的IOPS不是一件很难的事情,只要我们知道了系统完成一次IO所需要的时间的话我们就能推算出系统IOPS来。
现在我们就来推算一下磁盘的IOPS,假设磁盘的转速(Rotational Speed)为15K
RPM,平均寻道时间为5ms,最大传输速率为40MB/s(这里将读写速度视为一样,实际会差别比较大)。
对于磁盘来说一个完整的IO操作是这样进行的:当控制器对磁盘发出一个IO操作命令的时候,磁盘的驱动臂(ActuatorArm)带读写磁头(Head)离开着陆区(LandingZone,位于内圈没有数据的区域),移动到要操作的初始数据块所在的磁道(Track)的正上方,这个过程被称为寻址(Seeking),对应消耗的时间被称为寻址时间(SeekTime);但是找到对应磁道还不能马上读取数据,这时候磁头要等到磁盘盘片(Platter)旋转到初始数据块所在的扇区(Sector)落在读写磁头正上方的之后才能开始读取数据,在这个等待盘片旋转到可操作扇区的过程中消耗的时间称为旋转延时(RotationalDelay);接下来就随着盘片的旋转,磁头不断的读/写相应的数据块,直到完成这次IO所需要操作的全部数据,这个过程称为数据传送(DataTransfer),对应的时间称为传送时间(TransferTime)。完成这三个步骤之后一次IO操作也就完成了。
在我们看硬盘厂商的宣传单的时候我们经常能看到3个参数,分别是平均寻址时间、盘片旋转速度以及最大传送速度,这三个参数就可以提供给我们计算上述三个步骤的时间。
第一个寻址时间,考虑到被读写的数据可能在磁盘的任意一个磁道,既有可能在磁盘的最内圈(寻址时间最短),也可能在磁盘的最外圈(寻址时间最长),所以在计算中我们只考虑平均寻址时间,也就是磁盘参数中标明的那个平均寻址时间,这里就采用当前最多的10krmp硬盘的5ms。
第二个旋转延时,和寻址一样,当磁头定位到磁道之后有可能正好在要读写扇区之上,这时候是不需要额外额延时就可以立刻读写到数据,但是最坏的情况确实要磁盘旋转整整一圈之后磁头才能读取到数据,所以这里我们也考虑的是平均旋转延时,对于10krpm的磁盘就是(60s/15k)*(1/2)=
第三个传送时间,磁盘参数提供我们的最大的传输速度,当然要达到这种速度是很有难度的,但是这个速度却是磁盘纯读写磁盘的速度,因此只要给定了单次IO的大小,我们就知道磁盘需要花费多少时间在数据传送上,这个时间就是IOChunk
Size / Max Transfer Rate。
现在我们就可以得出这样的计算单次IO时间的公式:
IO&Time&=&Seek&Time&+&60&sec/Rotational&Speed/2&+&IO&ChunkSize/Transfer&Rate
于是我们可以这样计算出IOPS
IOPS&=&1/IO&Time&=&1/(Seek&Time&+&60&sec/Rotational&Speed/2&+&IOChunk&Size/Transfer&Rate)
对于给定不同的IO大小我们可以得出下面的一系列的数据
4K&(1/7.1&ms&=&140&IOPS)
&& &5ms&+&(60sec/15000RPM/2)&+&4K/40MB&=&5&+&2&+&0.1&=&7.1
8k&(1/7.2&ms&=&139&IOPS)
&& &5ms&+&(60sec/15000RPM/2)&+&8K/40MB&=&5&+&2&+&0.2&=&7.2
16K&(1/7.4&ms&=&135&IOPS)
&& &5ms&+&(60sec/15000RPM/2)&+&16K/40MB&=&5&+&2&+&0.4&=&7.4
32K&(1/7.8&ms&=&128&IOPS)
&& &5ms&+&(60sec/15000RPM/2)&+&32K/40MB&=&5&+&2&+&0.8&=&7.8
64K&(1/8.6&ms&=&116&IOPS)
&& &5ms&+&(60sec/15000RPM/2)&+&64K/40MB&=&5&+&2&+&1.6&=&8.6
从上面的数据可以看出,当单次IO越小的时候,单次IO所耗费的时间也越少,相应的IOPS也就越大。
上面我们的数据都是在一个比较理想的假设下得出来的,这里的理想的情况就是磁盘要花费平均大小的寻址时间和平均的旋转延时,这个假设其实是比较符合我们实际情况中的随机读写,在随机读写中,每次IO操作的寻址时间和旋转延时都不能忽略不计,有了这两个时间的存在也就限制了IOPS的大小。现在我们考虑一种相对极端的顺序读写操作,比如说在读取一个很大的存储连续分布在磁盘的文件,因为文件的存储的分布是连续的,磁头在完成一个读IO操作之后,不需要从新的寻址,也不需要旋转延时,在这种情况下我们能到一个很大的IOPS值,如下
4K&(1/0.1&ms&=&10000&IOPS)
&& &0ms&+&0ms&+&4K/40MB&=&0.1
8k&(1/0.2&ms&=&5000&IOPS)
&& &0ms&+&0ms&+&8K/40MB&=&0.2
16K&(1/0.4&ms&=&2500&IOPS)
&& &0ms&+&0ms&+&16K/40MB&=&0.4
32K&(1/0.8&ms&=&1250&IOPS)
&& &0ms&+&0ms&+&32K/40MB&=&0.8
64K&(1/1.6&ms&=&625&IOPS)
&& &0ms&+&0ms&+&64K/40MB&=&1.6
相比第一组数据来说差距是非常的大的,因此当我们要用IOPS来衡量一个IO系统的系能的时候我们一定要说清楚是在什么情况的IOPS,也就是要说明读写的方式以及单次IO的大小,当然在实际当中,特别是在OLTP的系统的,随机的小IO的读写是最有说服力的。
吞吐率(Throughput)
现在我们要说的传输速度(另一个常见的说法是吞吐率)不是磁盘上所表明的最大传输速度或者说理想传输速度,而是磁盘在实际使用的时候从磁盘系统总线上流过的数据量。有了IOPS数据之后我们是很容易就能计算出对应的传输速度来的
Transfer&Rate&=&IOPS&*&IO&Chunk&Size
还是那上面的第一组IOPS的数据我们可以得出相应的传输速度如下
4K:&140&*&4K&=&&560K&/&40M&=&1.36%
&8K:&139&*&8K&=&1112K&/&40M&=&2.71%
16K:&135&*&16K&=&2160K&/&40M&=&5.27%
32K:&116&*&32K&=&3712K&/&40M&=&9.06%
可以看出实际上的传输速度是很小的,对总线的利用率也是非常的小。
这里一定要明确一个概念,那就是尽管上面我们使用IOPS来计算传输速度,但是实际上传输速度和IOPS是没有直接关系,在没有缓存的情况下它们共同的决定因素都是对磁盘系统的访问方式以及单个IO的大小。对磁盘进行随机访问时候我们可以利用IOPS来衡量一个磁盘系统的性能,此时的传输速度不会太大;但是当对磁盘进行连续访问时,此时的IOPS已经没有了参考的价值,这个时候限制实际传输速度却是磁盘的最大传输速度。因此在实际的应用当中,只会用IOPS
来衡量小IO的随机读写的性能,而当要衡量大IO连续读写的性能的时候就要采用传输速度而不能是IOPS了。
响应时间(IOResponse Time)
最后来关注一下能直接描述IO性能的IO响应时间。IO响应时间也被称为IO延时(IOLatency),IO响应时间就是从操作系统内核发出的一个读或者写的IO命令到操作系统内核接收到IO回应的时间,注意不要和单个IO时间混淆了,单个IO时间仅仅指的是IO操作在磁盘内部处理的时间,而IO响应时间还要包括IO操作在IO等待队列中所花费的等待时间。
计算IO操作在等待队列里面消耗的时间有一个衍生于利托氏定理(Little’sLaw)的排队模型M/M/1模型可以遵循,由于排队模型算法比较复杂,到现在还没有搞太明白(如果有谁对M/M/1模型比较精通的话欢迎给予指导),这里就罗列一下最后的结果,还是那上面计算的IOPS数据来说:
8K&IO&Chunk&Size&(135&IOPS,&7.2&ms)
&& &135&=&&240.0&ms
&& &105&=&&29.5&ms
&& &75& =&&15.7&ms
&& &45& =&&10.6&ms
64K&IO&Chunk&Size(116&IOPS,&8.6&ms)
&& &135&=&
没响应了……
&& &105&=&&88.6&ms
&& &75& =&&24.6&ms
&& &45& =&&14.6&ms
从上面的数据可以看出,随着系统实际IOPS越接近理论的最大值,IO的响应时间会成非线性的增长,越是接近最大值,响应时间就变得越大,而且会比预期超出很多。一般来说在实际的应用中有一个70%的指导值,也就是说在IO读写的队列中,当队列大小小于最大IOPS的70%的时候,IO的响应时间增加会很小,相对来说让人比较能接受的,一旦超过70%,响应时间就会戏剧性的暴增,所以当一个系统的IO压力超出最大可承受压力的70%的时候就是必须要考虑调整或升级了。
另外补充说一下这个70%的指导值也适用于CPU响应时间,这也是在实践中证明过的,一旦CPU超过70%,系统将会变得受不了的慢。很有意思的东西。
从的计算中我们可以看到一个15k转速的磁盘在随机读写访问的情况下IOPS竟然只有140左右,但在实际应用中我们却能看到很多标有5000IOPS甚至更高的存储系统,有这么大IOPS的存储系统怎么来的呢?这就要归结于各种存储技术的使用了,在这些存储技术中使用最广的就是高速缓存(Cache)和磁盘冗余阵列(RAID)了,本文就将探讨缓存和磁盘阵列提高存储IO性能的方法。
高速缓存(Cache)
在当下的各种存储产品中,按照速度从快到慢应该就是内存&闪存&磁盘&磁带了,然而速度越快也就意味着价格越高,闪存虽然说是发展势头很好,但目前来说却还是因为价格问题无法普及,因此现在还是一个磁盘作霸王的时代。与CPU和内存速度相比,磁盘的速度无疑是计算机系统中最大的瓶颈了,所以在必须使用磁盘而又想提高性能的情况下,人们想出了在磁盘中嵌入一块高速的内存用来保存经常访问的数据从而提高读写效率的方法来折中的解决,这块嵌入的内存就被称为高速缓存。
说到缓存,这东西应用现在已经是无处不在,从处于上层的应用,到操作系统层,再到磁盘控制器,还有CPU内部,单个磁盘的内部也都存在缓存,所有这些缓存存在的目的都是相同的,就是提高系统执行的效率。当然在这里我们只关心跟IO性能相关的缓存,与IO性能直接相关的几个缓存分别是文件系统缓存(FileSystem
Cache)、磁盘控制器缓存(DiskController Cache)和磁盘缓存(DiskCache,也称为DiskBuffer),不过当在计算一个磁盘系统性能的时候文件系统缓存也是不会考虑在内的,因此我们重点考察的就是磁盘控制器缓存和磁盘缓存。
不管是控制器缓存还是磁盘缓存,他们所起的作用主要是分为三部分:缓存数据、预读(Read-ahead)和回写(Write-back)。
首先是系统读取过的数据会被缓存在高速缓存中,这样下次再次需要读取相同的数据的时候就不用在访问磁盘,直接从缓存中取数据就可以了。当然使用过的数据也不可能在缓存中永久保留的,缓存的数据一般那是采取来进行管理,目的是将长时间不用的数据清除出缓存,那些经常被访问的却能一直保留在缓存中,直到缓存被清空。
预读是指采用预读算法在没有系统的IO请求的时候事先将数据从磁盘中读入到缓存中,然后在系统发出读IO请求的时候,就会实现去检查看看缓存里面是否存在要读取的数据,如果存在(即命中)的话就直接将结果返回,这时候的磁盘不再需要寻址、旋转等待、读取数据这一序列的操作了,这样是能节省很多时间的;如果没有命中则再发出真正的读取磁盘的命令去取所需要的数据。
缓存的命中率跟缓存的大小有很大的关系,理论上是缓存越大的话,所能缓存的数据也就越多,这样命中率也自然越高,当然缓存不可能太大,毕竟成本在那儿呢。如果一个容量很大的存储系统配备了一个很小的读缓存的话,这时候问题会比较大的,因为小缓存的数据量非常小,相比整个存储系统来说比例非常低,这样随机读取(数据库系统的大多数情况)的时候命中率也自然就很低,这样的缓存不但不能提高效率(因为绝大部分读IO都还要读取磁盘),反而会因为每次去匹配缓存而浪费时间。
执行读IO操作是读取数据存在于缓存中的数量与全部要读取数据的比值称为缓存命中率(ReadCache Hit Radio),假设一个存储系统在不使用缓存的情况下随机小IO读取能达到150IOPS,而它的缓存能提供10%的缓存命中率的话,那么实际上它的IOPS可以达到150/(1-10%)=166。
首先说一下,用于回写功能的那部分缓存被称为写缓存(WriteCache)。在一套写缓存打开的存储中,操作系统所发出的一系列写IO命令并不会被挨个的执行,这些写IO的命令会先写入缓存中,然后再一次性的将缓存中的修改推到磁盘中,这就相当于将那些相同的多个IO合并成一个,多个连续操作的小IO合并成一个大的IO,还有就是将多个随机的写IO变成一组连续的写IO,这样就能减少磁盘寻址等操作所消耗的时间,大大的提高磁盘写入的效率。
读缓存虽然对效率提高是很明显的,但是它所带来的问题也比较严重,因为缓存和普通内存一样,掉点以后数据会全部丢失,当操作系统发出的写IO命令写入到缓存中后即被认为是写入成功,而实际上数据是没有被真正写入磁盘的,此时如果掉电,缓存中的数据就会永远的丢失了,这个对应用来说是灾难性的,目前解决这个问题最好的方法就是给缓存配备电池了,保证存储掉电之后缓存数据能如数保存下来。
和读一样,写缓存也存在一个写缓存命中率(WriteCache Hit Radio),不过和读缓存命中情况不一样的是,尽管缓存命中,也不能将实际的IO操作免掉,只是被合并了而已。
控制器缓存和磁盘缓存除了上面的作用之外还承当着其他的作用,比如磁盘缓存有保存IO命令队列的功能,单个的磁盘一次只能处理一个IO命令,但却能接收多个IO命令,这些进入到磁盘而未被处理的命令就保存在缓存中的IO队列中。
RAID(Redundant Array Of InexpensiveDisks)
如果你是一位数据库管理员或者经常接触服务器,那对RAID应该很熟悉了,作为最廉价的存储解决方案,RAID早已在服务器存储中得到了普及。在RAID的各个级别中,应当以RAID10和RAID5(不过RAID5已经基本走到头了,RAID6正在崛起中,看看了解下原因)应用最广了。下面将就RAID0,RAID1,RAID5,RAID6,RAID10这几种级别的RAID展开说一下磁盘阵列对于磁盘性能的影响,当然在阅读下面的内容之前你必须对各个级别的RAID的结构和工作原理要熟悉才行,这样才不至于满头雾水,推荐查看上面的如下条目:,,。
RAID0将数据条带化(striping)将连续的数据分散在多个磁盘上进行存取,系统发出的IO命令(不管读IO和写IO都一样)就可以在磁盘上被并行的执行,每个磁盘单独执行自己的那一部分请求,这样的并行的IO操作能大大的增强整个存储系统的性能。假设一个RAID0阵列有n(n&=2)个磁盘组成,每个磁盘的随机读写的IO能力都达到140的话,那么整个磁盘阵列的IO能力将是140*n。同时如果在阵列总线的传输能力允许的话RAID0的吞吐率也将是单个磁盘的n倍。
RAID1在容量上相当于是将两个磁盘合并成一个磁盘来使用了,互为镜像的两个磁盘里面保存的数据是完全一样的,因此在并行读取的时候速度将是n个磁盘速度的总和,但是写入就不一样了,每次写入都必须同时写入到两个磁盘中,因此写入速度只有n/2。
我们那一个有n(n&=3)个磁盘的RAID5阵列来看,首先看看RAID5阵列的读IO,RAID5是支持并行IO的,而磁盘上的数据呈条带状的分布在所有的磁盘上,因此读IO的速度相当于所有磁盘速度的总和。不过这是在没有磁盘损坏的情况下,当有一个磁盘故障的时候读取速度也是会下降的,因为中间需要花时间来计算丢失磁盘上面的数据。
读取数据的情况相对就要复杂的多了,先来看下RAID5奇偶校验数据写入的过程,我们把写入的数据称为D1,当磁盘拿到一个写IO的命令的时候,它首先会读取一次要写入的地址的数据块中修改之前的数据D0,然后再读取到当前条带中的校验信息P0,接下来就根据D0,P0,D1这三组数据计算出数据写入之后的条带的奇偶校验信息P1,最后发出两个写IO的命令,一个写入D1,另一个写入奇偶校验信息P1。可以看出阵列在实际操作的时候需要读、读、写、写一共4个
IO才能完成一次写IO操作,也就是实际上的写入速度只有所有磁盘速度总和的1/4。从这点可以看出RAID5是非常不适合用在要大批量写入数据的系统上的。
RAID6和RAID5很类似,差别就在于RAID6多了一个用于校验的磁盘。就读IO速度上来说这两个是完全一样的,都是所有磁盘IO速度的总和。
在写IO上也很是类似,不同的是RAID将一个命令分成了三次读、三次写一共6次IO命令才能完成,也就是RAID6实际写入磁盘的速度是全部磁盘速度之和的1/6。可以看出从写IO看RAID6比RAID5差别是很大的。
RAID0 读写速度都很好,却没有冗余保护;RAID5和RAID6都有同样的毛病就是写入的时候慢,读取的时候快。那么RAID1呢?嗯,这里要说的就是RAID1,其实不管是RAID10还是RAID01,其实都是组合大于2块磁盘时候的RAID1,当先镜像后条带时候就称为RAID10,先条带后镜像的时候称为RAID01。从性能上看RAID01和RAID10都是一样的,都是RAID1嘛,但是RAID10在重建故障磁盘的时候性能比RAID01
要快。因为RAID10其实就是RAID1,所以它的性能与RAID1也就是一样的了,这里不需要再做过多的讨论。
四个性能指标的变化
IO响应时间(IOResponse Time)
在任何时候IO响应时间值得都是单个IO的响应时间,因此,不管磁盘是否组成了磁盘阵列,它的IO响应时间应该都是一样的。从前面的计算中我们可以看到,如果IO响应时间在10ms左右的话是很正常的,但是当IO响应时间比这个值超出太多的时候,你就要开始注意了,很可能就意味着此时你的磁盘系统已经成为了一个瓶颈。
综合上面两个部分的讨论我们来估算一下阵列下的磁盘总体IOPS,在这里我们先假设组成阵列的单个磁盘的随机读写的IOPS为140,读写缓存命中率都为10%,组成阵列的磁盘个数为4。
因为不管是那种阵列,磁盘的读取性能都是所有磁盘之和,所以可以得出下面的读取IOPS:
read&IOPS&=&disk_IOPS/(1-read_cache_hit_ratio)*disk_num&=140/(1-10%)*4&=&622
而写入性能就完全不一样了,根据上面的讨论我们可以得出下面结论:
RAID0:&1&IO&request&=&&need&1&actual&IO&on&disk
RAID1:&1&IO&request&=&&need&2&actual&IO&on&disk
RAID5:&1&IO&request&=&&need&4&actual&IO&on&disk
RAID6:&1&IO&request&=&&need&6&actual&IO&on&disk
由此我们也可以计算出写入IOPS估算公式:
RAID0&write&IOPS&=disk_IOPS/(1-write_cache_hit_ratio)*disk_num/acture_IO_num&=140/(1-10%)*4/1&=&622
RAID1&write&IOPS&=disk_IOPS/(1-write_cache_hit_ratio)*disk_num/acture_IO_num&=140/(1-10%)*4/2&=&311
RAID5&write&IOPS&=disk_IOPS/(1-write_cache_hit_ratio)*disk_num/acture_IO_num&=140/(1-10%)*4/4&=&155
RAID6&write&IOPS&=disk_IOPS/(1-write_cache_hit_ratio)*disk_num/acture_IO_num&=140/(1-10%)*4/6&=&103
实际上从通过上面的计算方法我们还可以估算当给定一个要求的IOPS的情况下,估计下使用各个阵列级别所需要的磁盘的数量。当然我们上面的计算方法只是一个估算,我们忽略很多其他的因素,得出的只是一个大概的数值,不过在实际的应用还是有一定的参考作用的。
本篇最后附送一个计算磁盘系统IOPS的网站――,这个网站提供的计算公式还考虑了诸如阵列条带大小以及主机方面的因素,很有参考价值,至于怎么选择合适的条带大小,请参考【延伸阅读】部分。
传输速度(Transfer Rate)/吞吐率(Throughput)
实际上估算除了随机读写的IOPS也就知道了随机读写的吞吐率。对于顺序读写的呢,还是跟前一篇所讲的一样,主要受限于磁盘的限制,不能再拿IOPS来衡量了。
random_throughtput&=&random_IOPS&*&IO_chunk_size
dd其实是工作于比较低层的一个数据拷贝和转换的*nix平台的工具,但是因为dd命令支持*nix平台的一些特殊设备,因此我们可以利用dd命令的这个特性来简单的测试磁盘的性能。
先说一下两个相关的特殊设备
空设备,通常用作输出设备,这个是*nix系统上面的黑洞,所有送到这个空设备上的内容都会凭空消失。
空字符,通常用作输入,从/dev/zero中读取时,它能源源不断的提供空字符(ASCII NUL, 0×00)出来,要多少有多少。
于是就有了下面的用法:
测试磁盘的写入
/usr/bin/time dd if=/dev/zero of=/tmp/foo bs=4k count=1024000
这个命令时往磁盘的文件/tmp/foo中写入一个4G大小的文件,当然文件的内容全部是空字符了,同时用/usr/bin/time来对命令的执行进行计时,命令中的bs指的是写入文件时的块大小,其实就相当于Oracle中的block大小了,count是写入的块数。采取这种方法来写入数据时只是测试的连续读磁盘的性能,而不是随机读的性能,不能采取这种方法检查一个机器的IOPS的,只能检查磁盘的吞吐率。
测试磁盘的读取
/usr/bin/time dd if=/tmp/foo of=/dev/null bs=4k
上面的命令是从/tmp/foo文件中读取数据,然后扔掉,这里bs用的是读取时块的大小。和上面写入的命令一样,这样测试的仅仅是最大的读取性能,而不是随机IO的性能。
还能读写同时测试
/usr/bin/time dd if=/tmp/foo of=/tmp/foo2 bs=4k
在上面的命令中都用到了time命令对操作进行计时,这样才能正确的进行判断。要记住的一点是dd命令只能够提供一个大概的测试,通过这个简单的命令可以对磁盘系统的最大性能有一个大概的了解,要了解更详细的信息还要通过其他方法来查看。
iostat命令
理解iostat的各项输出
在Linux中,我们执行一个iostat -x命令,我们能看到如下的输出
$iostat -x
Linux 2.4.21-50a6smp (linux)& & & & &11/03/2009
avg-cpu:& %user& &%nice& & %sys %iowait&&%idle
&& & & & & 0.42& & 0.00& &0.26& & 0.47& &98.86
Device:& & rrqm/s wrqm/s& &r/s& &w/s&rsec/s& wsec/s& & rkB/s& & wkB/s avgrq-szavgqu-sz& &await& svctm& %util
hdc& & & & & 0.01& &0.00& 0.00&0.00& & 0.07& & 0.00& & &0.03& &&0.00& & 24.48& & &0.00& & 4.90&&4.57& &0.00
hda& & & & & 0.89& &8.54& 0.74&4.49& &12.60& 104.22& & &6.30& &52.11& & 22.32& & &0.03& & 5.41&&1.01& &0.53
我们先列举一下各个性能指标的简单说明。
每秒进行merge的读操作数目。
每秒进行merge的写操作数目。
每秒完成的读I/O设备次数。
每秒完成的写I/O设备次数。
每秒读扇区数。
每秒写扇区数。
每秒读K字节数。
每秒写K字节数。
平均每次设备I/O操作的数据大小(扇区)。
平均I/O队列长度。
平均每次设备I/O操作的等待时间(毫秒)。
平均每次设备I/O操作的服务时间(毫秒)。
一秒中有百分之多少的时间用于I/O操作,或者说一秒中有多少时间I/O队列是非空的。
要理解这些性能指标我们先看下图
IO的执行过程的各个参数
上图的左边是iostat显示的各个性能指标,每个性能指标都会显示在一条虚线之上,这表明这个性能指标是从虚线之上的那个读写阶段开始计量的,比如说图中的w/s从Linux
IO scheduler开始穿过硬盘控制器(CCIS/3ware),这就表明w/s统计的是每秒钟从Linux
IO scheduler通过硬盘控制器的写IO的数量。
结合上图对读IO操作的过程做一个说明,在从OS Buffer Cache传入到OS
Kernel(Linux IO scheduler)的读IO操作的个数实际上是rrqm/s+r/s,直到读IO请求到达OS
Kernel层之后,有每秒钟有rrqm/s个读IO操作被合并,最终转送给磁盘控制器的每秒钟读IO的个数为r/w;在进入到操作系统的设备层
(/dev/sda)之后,计数器开始对IO操作进行计时,最终的计算结果表现是await,这个值就是我们要的IO响应时间了;svctm是在IO操作进入到磁盘控制器之后直到磁盘控制器返回结果所花费的时间,这是一个实际IO操作所花的时间,当await与svctm相差很大的时候,我们就要注意磁盘的IO性能了;而avgrq-sz是从OS
Kernel往下传递请求时单个IO的大小,avgqu-sz则是在OS Kernel中IO请求队列的平均大小。
现在我们可以将iostat输出结果和我们前面讨论的指标挂钩了。
平均单次IO大小(IO Chunk Size) &=&avgrq-sz
平均IO响应时间(IO Response Time) &=&await
IOPS(IO per Second) &=& r/s + w/s
吞吐率(Throughtput)&=& rkB/s + wkB/s
iostat的应用实例
观察IOScheduler的IO合并(IOMerge)
前面说过IO在执行过程中会被合并以提高效率,下面就结合dd命令和iostat命令看一下。
我们先执行dd命令,设置bs参数值为1k,完整命令如下
ddif=/dev/zero of=test bs=1k count=1024000
同时打开另外一个终端执行iostat命令,这里只查看变化那个磁盘的更改,每秒刷新一次数据,完整命令如下
iostat-x hdc7 1
然后我们可以得到下面的结果
Device:&& rrqm/s wrqm/s& &r/s& &w/s& rsec/s&wsec/s& & rkB/s& & wkB/s avgrq-sz avgqu-sz&&await& svctm& %util
hdc7& & & & &0.00 .00 776.00&& 0.00 80616.00& & &0.00 40308.00& &103.89&&480.18& 805.95& &1.29 100.00
avg-cpu:& %user& &%nice& & %sys %iowait&&%idle
&& & & & & 0.50& & 0.00&&56.00& &43.50& & 0.00
Device:& & rrqm/s wrqm/s& &r/s& &w/s&rsec/s& wsec/s& & rkB/s& & wkB/s avgrq-szavgqu-sz& &await& svctm& %util
hdc7& & & & &0.00 .00 872.00&& 0.00 81384.00& & &0.00 40692.00& & 93.33&&274.56& 401.19& &1.14& 99.00
avg-cpu:& %user& &%nice& & %sys %iowait&&%idle
&& & & & & 2.50& & 0.00&&46.50& &14.00& &37.00
Device:& & rrqm/s wrqm/s& &r/s& &w/s&rsec/s& wsec/s& & rkB/s& & wkB/s avgrq-sz avgqu-sz&&await& svctm& %util
hdc7& & & & &0.00 .00 276.00&& 8.00 58808.00& & &4.00 29404.00& &212.33&&197.27& 321.66& &1.95& 54.00
avg-cpu:& %user& &%nice& & %sys %iowait&&%idle
&& & & & & 0.50& & 0.00& &0.50& & 0.00& &99.00
看结果中第一组数据中的avgrq-sz,为103.89个扇区,磁盘的每个扇区为512字节,因此平均IO大小为103.89*512/1024=52k字节,远远大于我们dd命令时给定的参数1k字节,也就是说IO在中间被合并了。看巨大的wrqm/s也能得出同样的结论。
附:在Windows中监视IO性能
本来准备写一篇windows中监视IO性能的,后来发现好像可写的内容不多,windows在细节这方面做的不是那么的好,不过那些基本信息还是有的。
在Windows中监视性能基本都用性能监视器了,与IO性能相关的有两个大类,一个是”LogicalDisk”,另外一个是”PhysicalDisk”,”LogicalDisk”更多的是用来监视文件相关的IO性能,而”PhysicalDisk”则是用来监视LUN或者是磁盘卷,下面就列举下与前面所列举的IO性能相关的计数器,具体的自己研究了:
单次IO大小
Avg.Disk Bytes/Read
Avg.Disk Bytes/Write
IO响应时间
Avg.Disk sec/Read
Avg.Disk sec/Write
DiskReads/sec
DiskWrites/sec
DiskTransfers/sec
DiskBytes/sec
DiskRead Bytes/sec
DiskWrite Bytes/sec
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:287794次
积分:4655
积分:4655
排名:第2409名
原创:143篇
转载:143篇
评论:57条
(6)(7)(1)(29)(10)(8)(7)(35)(16)(1)(2)(1)(6)(2)(4)(3)(16)(1)(3)(9)(1)(4)(2)(2)(2)(32)(18)(2)(26)(1)(14)(20)(1)

我要回帖

更多关于 读取写入 的文章

 

随机推荐