![计算硬盘块模型读取时间](https://linux22.com/image/1363417/%E8%AE%A1%E7%AE%97%E7%A1%AC%E7%9B%98%E5%9D%97%E6%A8%A1%E5%9E%8B%E8%AF%BB%E5%8F%96%E6%97%B6%E9%97%B4.png)
我的教授发布了一张幻灯片,介绍如何使用块模型计算从硬盘检索数据。规格如下:
- 7200 转/分
- 5毫秒寻道
- 80MB/s 传输速率
- 区块模型:区块大小 4KB
我不明白他是如何进行以下计算的,或者其中一些数字从何而来:
5ms + 1000/240 ms + 0.05ms = 9.216ms 读取块。
谁能告诉我 1000/240 毫秒和 0.05 毫秒是从哪里来的?
编辑:如果数字完全错误,那么您会怎么做?
答案1
有问题的磁盘的传输速率为 80 MiB/s,即 81920 kiB/s,或者20480 块/秒。这里,我们将四舍五入为 20,000 块/秒,因为这似乎是你的教授做的。这相当于 0.05 毫秒来传输一个块,解释了等式中的最后一个项。
最后,除了寻道时间(将驱动器头移到轨道上的时间),还有旋转潜伏期磁盘本身需要处理。在 7200 RPM 下,在最坏的情况下,我们必须等待 1 整圈,但平均而言,我们必须等待半圈 - 或 4.166 毫秒(7200 RPM = 120 转/秒 = 8.333 毫秒/转)。
因此,要将一个块传输到计算机,我们必须等待等效的Seek Time
++ :Rotational Latency
Transfer Time
5 ms + 4.166 ms + 0.05 ms = 9.216 ms
请注意,对于固态硬盘,虽然没有考虑旋转延迟,但肯定仍然存在可测量的寻道时间(实际寻址闪存中扇区的内容)和传输时间(很大程度上受用于传输数据本身的总线的限制,例如 SATA)。
因此,一般来说,总访问时间阅读单一部门对于驱动器来说(忽略软件):
Rotational/Hard Drive: Seek Time + Rotational Latency + Transfer Time
Solid-State Drive: Seek Time + Transfer Time
答案2
这5 毫秒寻道时间是硬盘将磁头移动到正确轨道的时间(并选择正确的磁头,这也需要时间,但你的教授忽略了这一点)。
一旦磁头位于正确的轨道上,它就需要等待正确的扇区通过 R/W 磁头下方。我们假设它是一个 7200 RPM 驱动器。这意味着:
- 在最坏的情况下,数据刚刚传递完毕就必须等待一个完整的旋转。
- 最好的情况是数据扇区刚刚到达。一切都很顺利。
- 在里面平均的在这种情况下,驱动器需要等待半圈旋转。
要获取 7200 RPM 驱动器完整旋转一次的时间:
- 每分钟 7200 转(又称 7200 RPM)
- 或者每秒 7200/60 次。
- 或者每秒 120 次。
- 或者一次旋转需要1/120秒。
- 即 8.3 毫秒
因此半次旋转应该花费一半的时间,即1/240秒。
1 秒是 1000 毫秒
这是你的1000 / 240多发性硬化症。
所有这些都是驱动器开始读取数据之前的时间。它仍然需要读取数据并将其传递给主机。
从驱动器读取通常比传递它要快得多,因此我将重点关注较慢的部分:
鉴于:
1)80 MB/s 传输速率
2)块模型:块大小 4KB
- 一秒钟 80 MiB,或者一秒钟 80*1024 KiB,或者每秒 4 * 20 * 1024 KiB。
- 除以 20480。
- 每1/20480秒4 KB 。
- 或者 0.488281 毫秒,这是你最近的 0.05 毫秒。
请注意,这个答案忽略了:
- 驱动器需要先读取数据才能传输,这会使其速度稍微慢一些。
- 但是没有关于从盘片读取数据的速度的信息。(这与旋转速度、要读取的数据长度、校验和数据的长度以及扇区间间隙有关。(4KiB 可以是 8 次“Header|data|checksum|gap”读取或一次读取。)
- 它还忽略了数据可能已经存在于驱动器缓存中。
- 并且它假设计算校验和几乎不需要任何时间。