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

时间:2018-11-23 18:47:25

标签: time operating-system scheduling disk seek

搜索时间:将读/写头从其当前位置移至所需轨道所需的时间。

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

1 个答案:

答案 0 :(得分:0)

  

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

第一步是确定设备本身的地理位置。这是困难的。现代硬盘不能由旧的“圆柱,磁头,扇区”三元组定义,不同磁道的每个磁道的扇区数是不同的(外磁道的圆周越大,扇区越多,内磁道的圆周越小)较小的文件),并且您可以从驱动器上获得的所有信息(从设备本身,或者从任何固件或OS API)都可以使传统软件满意。

要解决此问题,您需要诉诸“基准化策略”。具体来说,先从LBA扇区0中读取,然后从LBA扇区1中读取,并测量所花费的时间(以建立“两个扇区处于同一磁道时所用的时间”假设),然后从LBA扇区0中读取,然后从LBA扇区N中读取( (N从2开始并增加),同时测量所需的时间并将其与以前的值进行比较,并寻找更大的花费时间,以表明您已经找到了“磁道0”和“磁道1”之间的边界。然后重复此步骤(从“磁道1”中的第一个扇区开始)以找到“磁道1”和“磁道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)。