如何在磁盘调度算法中找到平均寻道时间



寻道时间:将读/写磁头从当前位置移动到所需磁道所需的时间。

我正在寻找磁盘调度算法中使用的平均寻道时间的公式。

如何在磁盘调度算法中找到平均寻道时间?我正在寻找磁盘调度算法中使用的平均寻道时间的公式。

第一步是确定设备本身的地理位置。这很难。现代硬盘不能用旧的"柱面、磁头、扇区"三元组来定义,不同磁道的每个磁道的扇区数不同(外磁道上周长较大的扇区越多,内磁道上周长较小的扇区越少(,你能从设备本身或任何固件或操作系统API中获得的关于驱动器的所有信息都是为了让传统软件满意而编造的谎言。

为了解决这个问题,你需要采用"基准测试策略"。具体地说,从LBA扇区0读取,然后从LBA区段1读取,并测量所花费的时间(以建立"当两个扇区都在同一轨道上时花费的时间"假设(,然后从LBA扇区0读取,然后在循环中读取LBA扇区N(N从2开始并增加(,同时测量所花费的时间并将其与之前的值进行比较,并寻找所花费时间的更大增加,这表明您已经找到了"磁道0"one_answers"磁道1"之间的边界。然后重复此操作(从"轨道1"中的第一个扇区开始(,以找到"轨道1"one_answers"轨道2"之间的边界;并不断重复这一点,以构建"每条轨道上有多少扇区"的阵列。请注意,事情并没有这么简单——需要考虑各种陷阱(例如,物理扇区比逻辑扇区大、在磁道上交错的扇区、坏块替换、内置在磁盘驱动器中的内部缓存等(。当然,这会非常耗时(例如,您不想每次操作系统启动时都对每个磁盘执行此操作(,因此您需要获得硬盘的标识(制造商和型号(,并将自动检测到的几何图形存储在某个位置,这样,如果该型号磁盘的几何图形以前存储过,您就可以跳过自动检测。

下一步是使用关于真实几何体(而不是伪几何体(的信息,结合更多的"基准测试策略"来确定性能特征。理想情况下,你应该尝试为expected_time = sector_read_time + rotational_latency + distance_between_tracks * head_travel_time + head_settle_time这样的公式找到常数,这可以像一样完成

  • 测量从第一轨道中的第一扇区读取的时间,然后测量第一轨道中扇区N的读取时间;对于N的每个值(对于第一个磁道中的每个扇区(,并找到它可以花费的最小时间,将其除以2,并将其称为sector_read_time
  • 测量从第一轨道中的第一扇区然后从第一轨道的扇区N读取的时间;对于N的每个值(对于第一个磁道中的每个扇区(,并找到它可以花费的最大时间,将其除以第一个磁道的扇区数,并将其称为rotational_latency
  • 测量从磁道N中的第一个扇区开始读取的时间,然后测量磁道N+1中的第一扇区,N的范围从0到"max_track-1",并确定平均值,称之为time0
  • 测量从磁道N中的第一个扇区开始读取的时间,然后测量磁道N+2中的第一扇区,N的范围从0到"max_track-1",并确定平均值,称之为time1
  • 假设head_travel_time = time1 - time0
  • 假设head_settle_time = time0 - head_travel_time - sector_read_time

请注意,这也有各种陷阱(和以前一样(,并且(如果你解决了这些陷阱(你所能期望的最好结果是一个通用的估计(而不是一个准确的预测值(。

当然,这也会非常耗时,如果你将自动检测到的几何体存储在某个地方,最好也将自动检测的性能特征存储在同一个地方;这样,如果之前存储了该型号磁盘的所有信息,则可以跳过所有自动检测。

请注意,以上所有假设都是"没有缓存和混合/闪存层的独立旋转硬盘",在很多情况下都是完全无用的。对于其他一些情况(SSD、CD/DVD(,您需要不同的技术来自动检测它们的几何形状和/或特性。还有像RAID和虚拟化这样的东西使事情变得更加复杂。

大部分在实践中太麻烦了

相反;只需假设cost = abs(previous_LBA_sector_number - next_LBA_sector_number)和/或让硬盘自己按照最佳顺序进行排序(例如,使用本机命令队列-请参阅https://en.wikipedia.org/wiki/Native_Command_Queuing(。

最新更新