迅维网

查看: 855|回复: 3
打印 上一主题 下一主题
[求助中]

为什么机械硬盘随机读取性能和连续读写性能差那么多?

[复制链接]
跳转到指定楼层
1#
发表于 2018-5-11 20:39:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式 来自: LAN 来自 LAN

马上注册,获取阅读精华内容及下载权限

您需要 登录 才可以下载或查看,没有帐号?注册

x
为什么机械硬盘随机读取性能和连续读写性能差那么多?

2#
发表于 2018-5-11 20:39:37 | 只看该作者 来自: LAN 来自 LAN
磁盘结构介绍
磁盘结构简介

再来看下访问时间,主要有三个部分:
1. 寻道时间,为读取某个目标扇区的内容,传动臂首先将磁头定位到包含目标扇区的磁道上,这个过程花费的时间即为寻道时间。平均值 3 ~ 9 ms,最大可至 20 ms。
2. 旋转延迟,磁头定位到目标磁道后,驱动器等待目标扇区的第一个位旋转到磁头下,这个过程如果是 5400 转的磁盘,平均大概为 5 ms。
3. 传送时间,当目标扇区的第一个位位于磁头下,到访问完所有数据花费的时间,如果数据量为一个扇区的容量,这个时间取决于旋转速度和每个磁道的扇区数目(密度),假定每个磁道平均扇区数目为 400,那么这个时间大概为 0.03 ms。

综上,如果读取一个扇区的数据,那么平均用时大概为 9 + 5 + 0.03 = 14.03 ms。主要时间是 寻道时间 和 旋转延迟,而实际访问几乎不用时间。

这也是为什么连续读取速度很快,就是因为这个『连续』,这一次读取过程中,可以简单的理解为寻道和旋转延迟只有一次(不严谨),大部分时间都花费在实际传送上。简单计算下,如果只有传送时间,5400 转,每扇区 512 字节,每个磁道 400 个扇区,那么每秒可以传送 5400 RPM / 60 sec * 400 * 512 = 18,432,000 B / s = 17 MB / s。现在的磁盘,实际的实现复杂,比如每个磁道拥有的扇区数目不一致,不过一般而言,可以简单认为各个参数比上述的值要高很多(比如扇区数目 / 比如扇区容量),达到 100 + MB 也是可以的。不过整体原理没变,寻道时间和旋转延迟总是存在的,当大量的读取小文件的时候,也就是不是『顺序』读取,每次读取寻道时间和旋转延迟都要再来一遍,假设每个小文件每个 1 K,平均也就能到 1000 ms / 14 ms * 1 K = 70 KB / s(按上述 100 / 17 的倍数,也就是 420 KB / s,和你测试值相近),文件再小一点,速度还可以进一步下降。

推荐阅读
深入理解计算机系统(原书第2版) (豆瓣) 第六章 存储器层次结构

回复 支持 反对

使用道具 举报

3#
发表于 2018-5-11 20:39:37 | 只看该作者 来自: LAN 来自 LAN
袜子提到了磁盘寻道,这里再补充两个原因。

硬盘读取连续数据的时候会预读,也就是前面的数据还在路上,后面的数据就开始读了。但随机读取会浪费预读。

另一个原因是文件系统的overhead。读写一个文件之前,得一层层目录找到这个文件,以及做一堆属性、权限之类的检查。写新文件时还要加上寻找磁盘可用空间的耗时。对于小文件,这些时间消耗的占比就非常大了。

回复 支持 反对

使用道具 举报

4#
发表于 2018-5-11 20:39:37 | 只看该作者 来自: LAN 来自 LAN
随机读写的时候磁头要多次寻道,消耗很长时间。

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表
附近
店铺
微信扫码查看附近店铺
维修
报价
扫码查看手机版报价
信号元
件查询
点位图 AI维修
助手



芯片搜索

快速回复