4

磁盘调度

 2 years ago
source link: http://www.kongjunblog.xyz/2021/04/blog-post.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

磁盘调度

对磁盘发起I/O操作的时间主要由寻道时间和旋转时间决定,磁盘在不同时刻访问不同扇区的时间成本是不同的。当有多个I/O请求发出时,磁盘先服务哪个请求会极大地影响I/O性能。比如,当前磁头在内侧磁道上,有三个I/O请求分别访问内、中、外侧磁道上的扇区。显然,这种情况下自内向外处理请求比从外向内处理请求更加高效。

为了获得更高的I/O性能,磁盘必须对I/O请求进行调度。这些调度的主要依据是当前磁头的位置和要访问的扇区的位置信息。在早期的计算机系统中,磁盘调度由操作系统实现;在现代计算机系统中,磁盘调度算法被内置到磁盘中,磁盘利用内部的各种信息来完成磁盘调度。

磁盘的调度与进程的调度有相似之处,比如都追求高性能,都要考虑公平性,避免饿死的发生。但是磁盘调度与进程调度也有着明显的不同:进程的生命期是不确定的,而I/O操作的时间却可以被估算出来。所以我们自然地想到了SJF(shortest job first)的原则。

SSTF: Shortest Seek Time First

SSTF的思路非常简单,每次都先服务访问扇区所在磁道离磁头当前位置最近的请求。

SSTF易于实现,但是却存在明显的缺陷:

  1. 公平性

SSTF总是先服务那些访问扇区所在磁道离当前磁头所在磁道最近的请求,很可能会出现某个I/O请求运气特别差,总是有别的请求比它更先被服务,最终导致饿死。想象一下,某个人在队伍最前面,但是接受服务的次序却不是按先来后到,每次它要接受服务时,都有别人合法地插队,明明他在最前面却无法接受服务。

  1. 性能

SSTF只考虑到了寻道时间,却忽略了旋转时间,这种粗粒度的策略并不能实现接近最优的性能。

SPTF: Shortest Positioning Time First

SPTF从性能的角度改良了SSTF策略。每次确定要服务的I/O请求时,都计算访问各个请求扇区的时间,并服务其中耗时最短的请求。

SPTF策略同时考虑到了寻道时间和旋转时间,因此每次判断服务哪个请求都是综合判断的结果。

对于以下磁盘,分别有两个访问扇区8和扇区16的I/O请求。

SSTF和SPTF

在SSTF策略下,扇区16所在磁道距离磁头所在磁道最近,因此磁盘先服务访问扇区16的请求。但是这种决策既有可能不是最佳的。假如在这个磁盘中,旋转时间大于寻道实践,访问扇区8反而会是最好的选择。SPTF策略选择总体定位时间(寻道时间加旋转时间)最短的 I/O请求进行服务,在这里选扇区8。

Elevator(SCAN)

电梯算法(也叫SCAN)从处理I/O请求的公平性着手进行调度。在电梯算法中,磁头从最外侧磁道到最内侧磁道(反之)叫做一边扫描

电梯算法的原理就蕴含在它的名字中: 电梯上上下下(磁头不断扫描),每次是否开门(服务I/O请求),取决于是否在该层是否有人要下电梯(该磁道是否有请求访问的扇区)。

每次扫描中,如果磁盘发现有请求访问的扇区在磁头所在磁道中,就访问该扇区,否则继续扫描。

电梯算法的基本原理相同,但却有许多变种,比如F-SCAN,C-SCAN。

F-SCAN

在磁头扫描的过程中,系统可能会像磁盘发起I/O请求,F-SCAN变种不处理这些新发起的请求,而将它们加入到等待队列中,在下一次扫描时再处理这些请求。

C-SCAN

在电梯算法中,一次扫描结束就进行下一次扫描。当一次扫描结束后,最简单的想法是从上一次扫描结束位置反方向扫描。比如,上一次从外到内,下一次就从结束位置(最内侧)向外扫描。 这种策略符合直觉,但是会导致一些“不够公平”,在中间的磁道被扫描的时间会比在两侧的磁道更长(这么说可能不太准确,总之中间的磁道会比两侧的更占优势)。

为了解决这个问题,C-SCAN策略确定了统一的扫描方向:从一端开始扫描,并在扫描结束后回到起始位置开始新一轮的扫描。

C-SCAN策略统一扫描方向带来了一些好处:

  • 统一的等待时间
  • 较小的响应时间

同时也导致了一些问题:

  • 更多的寻道动作
  • 即使没有I/O请求,磁头可能要进行寻道,除非已经待在特定的磁道。

Recommend

  • 153

    分区:a.查看磁盘分区表:fdisk-lb.查看指定磁盘分区表:fdisk-l/dev/sdbc.分区命令:fdisk/dev/sdb常用命令:n:创建新分区d:删除已有分区t:修改分区类型l:查看所有支持的类型p:显示现有分区信息w:保存并退出q:不保存并退出m:查看帮助信息d.创建主分区:e....

  • 56

    推荐专栏更多

  • 147

    获取磁盘IOPS数值[shell]#!/bin/shDISK="vdc1"functiongetIops(){READ1=`cat/proc/diskstats|grep"${DISK}"|awk'{print$4}'`WRIT1=`cat/proc/diskstats|grep"${DISK}"|awk'{print$8}'`sleep10READ2=`cat/proc/diskstats|gr

  • 106

    oraclerac磁盘扩展采坑记录:系统环境:VMwareesxioraclerac11.2.0.4昨天扩展了asm的磁盘组,FRA磁盘组和DATA磁盘组,我添加了一块硬盘320g,200g扩展到了DATA组,120g扩展到了FRA组。因为oracle使用的是raw裸设备,扩展第一个磁盘的时候,正常进行,不用关机。坑1...

  • 90

    yum install wget -y && wget -O auto_disk.sh http://download.bt.cn/tools/auto_disk.sh && bash auto_disk.sh &nbs...

  • 64

    实验环境:一台linux服务器1、添加3块硬盘,创建1个卷组,卷组名vg1fdisk–l检查的结果第一个硬盘分区改8e过程Command(mforhelp):pDisk/dev/sdb:8589MB,8589934592bytes255heads,63sectors/track,1044cylindersUnits=cylindersof16065*512=8225280bytesDeviceBo

  • 93

                            df命...

  • 114

    磁盘格式化磁盘在格式化时会预先规定好每个块的大小,然后再把所有空间分割成一个一个的小块(指定块大小:1024B、2048B、4096B)Centos7支持的文件系统有?命令:#cat/etc/filesystems可以查看centos7在我们装系统时默认的文件系统就是xfs怎么查看一个分区的文件...

  • 29
    • blog.51cto.com 5 years ago
    • Cache

    Linux磁盘IO调度算法-0xsyshell

    Linux磁盘IO调度算法 A、CFQ(完全公平排队I/O调度程序) 最新的内核版本和发行版中,都选择CFQ做为默认的I/O调度器,对于通用的服务器是最好的选择。 CFQ对于多媒体应用(video,audio)和桌面系统是最好的选...

  • 48
    • www.tuicool.com 5 years ago
    • Cache

    磁盘的IO重排序与调度策略

    万芝堂是百年老字号了,主营中草药,并兼老中医出诊。虽然万芝堂有近百年的历史,但活动范围仅限北京城,即使在北京城也仅有2个分号。最近万芝堂换了新掌柜的。新掌柜新官上任三把火,不仅在北京增加了分号数量,在保定府也开了好几家分号...

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK