我想更好地了解 I/O 访问类型如何影响访问时间。传统 HDD 能否同时执行随机和顺序访问?
如果是的话,你为什么要保留两者的规定?阅读后这帖子中我意识到顺序访问比随机访问更好,这是为什么呢?因为在顺序访问中,我必须遍历所有先前的内存位置才能到达我想要的位置。而在随机访问中,我可以直接“跳”到它。因此,随机访问提供了顺序访问的所有功能。
另外,在什么情况下 HDD 会采用随机/顺序访问?
答案1
传统 HDD 能否同时执行随机和顺序访问?
HDD 属于随机存取设备。HDD 的扇区是可寻址的,读取或写入操作需要指定扇区地址。AR/W 操作不依赖于前一次操作的位置。
顺序访问设备,例如磁带(卷轴或盒式磁带)和穿孔(纸或聚酯薄膜)磁带,没有可寻址的记录或块。记录/块与位置相关,并且读/写访问必须从介质的开头开始。有一些技巧(例如磁带上的文件标记)可以实现高速搜索,但如今顺序访问设备主要因为数据保留和每字节成本优势而存在。随着现代 HDD 和 SDD 的普及,顺序访问设备无法提供作为通用存储设备(例如文件系统)的性能。
如果是这样,为什么你想保留这两项规定?
顺序访问是随机访问设备的自然能力。
而顺序访问设备很难(即需要大量额外操作并耗费时间)执行随机访问。
从技术上讲,HDD 不执行顺序访问。命令接口没有“读取下一个”或“写入下一个”。必须指定明确的扇区地址。
阅读完这篇文章后,我发现顺序访问比随机访问更好,这是为什么呢?
在哪些方面更好?
(顺便说一下,这些答案并不是 100% 准确的。)
有些应用程序(例如数据记录器/记录器或 HDD 存档)在顺序访问下表现非常好,使用随机访问则毫无优势。
有些应用程序绝对需要随机访问才能及时完成任务(例如数据库查询或文件系统)。
请注意,典型的 PC 没有顺序访问存储设备。
一般来说,随机访问设备比仅限于顺序访问的设备更实用。这就是为什么 HDD(或 SDD)(两者都是随机访问设备)是计算机大容量存储的必备外围设备,而磁带等顺序访问设备则被视为可选设备,主要用于存档功能。
因此随机访问提供了顺序访问的所有功能。
正确的。
另外,在什么情况下 HDD 会采用随机/顺序访问?
由于 HDD 具有命令接口,因此它始终执行随机访问。
为了访问“下一个连续”扇区,主机必须请求“上一个扇区 + 1”;没有“读取(或写入)下一个”的命令。每个 R/W 命令都必须指定一个扇区地址。
请注意,操作系统文件系统软件会掩盖此 HDD 特性。大多数文件都是按顺序访问的:您从文件的开头开始写入或读取文件,然后继续一次访问一个记录或一行(即按顺序)。复制文件始终是通过按顺序读取源文件来执行的。但研究这个答案了解文件系统和 HDD 如何执行额外的随机访问来完成文件内容的顺序复制。
I/O 访问类型如何影响访问时间?
首先,我们需要正确定义 HDD 的“访问时间”(因为您提到的那篇文章中的答案不准确)。访问时间有几个组成部分,它们与 HDD 操作相对应:
- 读取或写入命令必须通过主机到驱动器接口(例如 SATA)从主机发送到 HDD。
- HDD 控制器处理该命令。如果可以从缓存中满足读取请求,则扇区数据已经可用;转到步骤 #8。对于写入请求,还必须发送扇区数据,然后计算 ECC 字节。
- 实际的磁盘操作将以可选的寻道操作开始。
如果 R/W 磁头组件尚未定位在请求的柱面,则必须执行寻道操作。执行此 R/W 磁头移动操作的时间间隔称为寻道时间。请注意,寻道(即 R/W 磁头的移动)需要加速、可选的最大速度阶段,然后减速。速度不是恒定的,寻道时间与经过的磁柱数量不成线性比例。这些事实使得大多数短行程计算都是错误的。
如果 R/W 磁头组件已经定位在请求的磁柱上,则不需要寻道,寻道时间实际上为零。 - 一旦 R/W 头组件位于请求的圆柱体,就会选择与请求磁道相对应的 R/W 头。
- 当盘片在读写头“下方”旋转时,控制器必须等待请求的扇区旋转。这个等待时间称为旋转潜伏期除非您能预测控制器何时开始等待所请求扇区的旋转位置,否则平均旋转延迟是旋转周期的一半。(周期是旋转速度的倒数。)
- 一旦找到请求的扇区,就会执行实际的读取或写入操作。对于读取操作,从盘片表面读取的位将以字节的形式写入扇区缓冲区。对于写入操作,扇区缓冲区中的数据将被序列化并写入盘片表面。
- 一旦将整个扇区读入(控制器的)扇区缓冲区,就会使用 ECC 验证数据。如有必要,将应用更正(软错误)。如果无法更正错误,则尝试重试读取。
- 通过使用已读取的扇区数据或主机到驱动器接口的“写入 OK”确认来向主机做出响应,来完成 R/W 请求。
这访问时间是执行所有这些操作所用的总时间。除了第 3 项(寻道时间)和第 5 项(旋转延迟)之外,与这两个操作相比,其他操作的持续时间往往相对较短且可预测。
随机 HDD 访问往往具有较长的访问时间,因为需要未知跨度的寻道和旋转延迟。顺序 HDD 访问可能具有最短的访问时间,因为
不太可能进行寻道(除非前一次访问是该柱面的最后一个扇区),并且如果请求已排队或前一次读取执行“提前读取”,则旋转延迟可能为零。如果向 HDD 发送顺序请求的时间较差(即太晚,错过下一个扇区),则由于旋转延迟等于接近完整的旋转时间,访问时间会增加。该延迟大约与一个柱面的寻道时间相同。
答案2
顺序访问并不意味着读取某个点之前的所有内容,而是意味着依次读取一组扇区或簇,即“顺序地”。
实际上,您可以将其视为一次“随机”访问,随后是一系列连续访问。
为了说明为什么顺序访问优于完全地随机访问您需要了解从磁盘读取的过程涉及哪些内容。
当您向硬盘请求单个簇时,驱动器必须将磁头移到位,然后等待旋转的盘片旋转,以便簇位于磁头下方并准备读取。这称为磁盘的“寻道时间”。对于大多数硬盘,寻道时间平均约为 9 毫秒。
对于真正的随机访问(每一个请求是针对非连续扇区/簇)则每一个请求的平均寻道时间为 9 毫秒,因为磁头每次都必须移动,然后等待正确的扇区,这种延迟严重限制了整体数据吞吐量,因为您有一个周期
seek
data
seek
data
seek
data
seek
data
对于 4 次随机读取。假设读取 4KB,在获取最后一个数据块之前,您至少需要等待 36 毫秒(加上读取每个块的可忽略不计的时间)。
对于顺序访问,您可以指定一个起点,然后说“继续读取 X 个块”。您不再需要等待磁头移动或磁盘盘片移动到磁头下方,一旦磁头完成前一个数据块的读取,它就已经处于下一个数据块的正确位置,因此您只需继续读取即可。这样可以有效地消除每次数据请求之间的 9 毫秒寻道时间。
对于顺序读取,您将获得
seek
data
data
data
data
这就为每个块提供了 9 毫秒加上 4 个小数据传输时间。
假设读取 4KB 需要 1ms(这是一个大概的数字),这基本上意味着对于 4K 读取,数据吞吐量约为
- 随机读取 32KB 需要 40 毫秒,并且
- 连续读取 32KB 耗时 13 毫秒
因此顺序读取很多快点。
SSD 驱动器则不同,它们没有移动盘片,因此寻道时间几乎不存在。随机访问基本上与顺序访问一样快。