给定一个将磁头移动到 n 个磁道的函数,如何估计磁盘的平均寻道次数

给定一个将磁头移动到 n 个磁道的函数,如何估计磁盘的平均寻道次数

f(x)如果给出一个函数作为将磁盘头移动到 n 个磁道的时间估计,那么如何计算磁盘的平均寻道时间?

答案1

先前的答案在 90 年代可能是准确的,因为当时寻道时间非常重要。

实际上,现代硬盘的寻道速度非常快,访问时间几乎总是由延迟决定——等待磁盘旋转到足以让数据正好位于磁头下方。寻道与旋转同时发生,因此您无需将它们相加,只需查看哪个最慢即可。旋转是最慢的。对于旋转,平均与最大比率将是 1/2,而不是 1/3,因此总体访问比率是 1/2。

创建许多小分区以将相关数据放在相邻轨道上是一个过时的建议。同样,这在 90 年代是正确的,但现在已不正确。但是,如今的磁盘经过格式化,较大的外轨道的数据量大约是内轨道的两倍。这不会改变平均与最大访问时间比率,但会改变磁盘开头附近的吞吐量。因此,仍然值得进行分区,以便您更经常使用的数据(例如操作系统)将位于磁盘的开头,从而获得与靠近驱动器末尾的区域相比两倍高的连续读取时间。

PS:我刚刚创建了我的帐户,但我的声誉还不足以回答@jitendra 的评论,所以让我在这里回答:“为什么一般情况下,平均寻道时间是最大寻道时间的 1/3?”

如果您有 N 条轨道(编号从 1 到 N),我们可以通过查看起始轨道(i)和目标轨道(j)的所有不同可能性来计算平均值。行进距离将为 abs(ji)。总距离:sum{ abs(ji) } for i=1..N,j=1..N。点数:N^2 最大距离:N 平均距离:(sum{ abs(ji) } for i=1..N,j=1..N) / N^2。平均/最大比率将为 (sum{ abs(ji) } for i=1..N,j=1..N) / N^3。

Wolframalpha 不想计算它,除非我简化它——我只会考虑 j > i 的情况,然后将结果加倍以近似地解释对称情况:——而不是 sum{ abs(ji) } for i=1..N,j=1..N——我将使用 2* sum{ ji } for i=1..N,j=i..N

在 Wolframalpha 语法中将其重写为嵌套和: 2*(sum(sum(ji) j=i 到 N) i=1 到 N)/(N * N * N)

得到 1/3 - 1/(3*N^2)。这差不多就是 1/3。

但正如我之前所说,这并不重要,因为访问时间主要取决于延迟而不是寻道。

答案2

可以通过计算从所有磁道到所有其他磁道的寻道时间并取平均值来完全枚举。有数学公式可用于简化计算。提供的值是基于真正随机访问的理论值。

实际上,使用中的特定磁盘的平均寻道时间可能会有很大差异。该值介于单个磁道移动的寻道时间和磁盘两端磁道之间的寻道时间之间。稳定时间对于小幅移动可能是一个重要因素。

将频繁访问的文件和分区放在一起可以缩短访问时间。这会增加稳定时间对磁盘访问的影响。

更糟糕的是,新磁盘的实际几何形状与旧 HCS 规范中描述的不同。在这种情况下,平均寻道时间更加复杂。

一种磁盘访问优化是在磁道之间筛选扇区,以便扇区 1 位于从前一磁道的最后一个扇区完成单磁道前向搜索后第一个读取的扇区的位置。

编辑:使用逐次近似法,最大寻道时间的 1/3 是一个很好的估计。平均寻道时间的极限将介于极限之间;0.5 最大寻道时间(最坏情况,从磁盘边缘开始)和 0.25 最大寻道时间(最佳情况,从磁盘中心开始)。对于两个边缘和中心,平均为 0.417。从磁盘 1/4 处开始的平均寻道时间为(1/4 * 0.125 + 3/4 * 0.375 = 0.315)。这五个样本的平均值是 0.376,更接近 1/3。使用的样本越多,结果就越接近 1/3。

相关内容