• 磁盘相关


    SSD 使用寿命

    SSD 使用寿命的机制为“每日硬盘写入次数”(DW/D),而 Fusion ioMemory 设备的使用寿命则指定为“PB 单位写入量”(PBW)。由于 Ultrastar SN200 系列提供 5 年质保,因此将 DW/D 数字乘以容量,再乘以每年的天数即可转换为 PBW 数。

    比如:Ultrastar SN260 的容量为 6.4TB,DW/D 为 3,由此计算出的使用寿命为 35.0PBW(6.4TB * 3(DW/D) * 365(天) * 5(年)=35040TB=35PB)

    PCIe的带宽

    https://en.wikipedia.org/wiki/PCI_Express

    磁盘IO调度算法

    I/O调度程序的总结:

    1)当向设备写入数据块或是从设备读出数据块时,请求都被安置在一个队列中等待完成.
    2)每个块设备都有它自己的队列.
    3)I/O调度程序负责维护这些队列的顺序,以更有效地利用介质.I/O调度程序将无序的I/O操作变为有序的I/O操作.
    4)内核必须首先确定队列中一共有多少个请求,然后才开始进行调度.

    I/O调度的4种算法:

    CFQ(完全公平排队I/O调度程序)

    在最新的内核版本和发行版中,都选择CFQ做为默认的I/O调度器,对于通用的服务器也是最好的选择。CFQ对于多媒体应用(video,audio)和桌面系统是最好的选择。CFQ赋予I/O请求一个优先级,而I/O优先级请求独立于进程优先级,高优先级的进程的读写不能自动地继承高的I/O优先级。

    对于很多IO压力较大的场景就并不是很适应,尤其是IO压力集中在某些进程上的场景。因为这种场景我们需要更多的满足某个或者某几个进程的IO响应速度,而不是让所有的进程公平的使用IO,比如数据库应用。


    CFQ试图均匀地分布对I/O带宽的访问,避免进程被饿死并实现较低的延迟,是deadline和as调度器的折中.


    工作原理:
    CFQ为每个进程/线程,单独创建一个队列来管理该进程所产生的请求,也就是说每个进程一个队列,每个队列按照上述规则进行merge和sort。各队列之间的调度使用时间片来调度,以此来保证每个进程都能被很好的分配到I/O带宽.I/O调度器每次执行一个进程的4次请求。可以调 queued 和 quantum 来优化

    NOOP(电梯式调度程序)


    在Linux2.4或更早的版本的调度程序,那时只有这一种I/O调度算法.I/O请求被分配到队列,调度由硬件进行,只有当CPU时钟频率比较有限时进行。

    Noop对于I/O不那么操心,对所有的I/O请求都用FIFO队列形式处理,默认认为 I/O不会存在性能问题。这也使得CPU也不用那么操心。它像电梯的工作主法一样对I/O请求进行组织,当有一个新的请求到来时,它将请求合并到最近的请求之后,以此来保证请求同一介质.

    NOOP倾向饿死读而利于写.
    NOOP对于闪存设备,RAM,嵌入式系统是最好的选择.

    电梯算法饿死读请求的解释:
    因为写请求比读请求更容易.
    写请求通过文件系统cache,不需要等一次写完成,就可以开始下一次写操作,写请求通过合并,堆积到I/O队列中.
    读请求需要等到它前面所有的读操作完成,才能进行下一次读操作.在读操作之间有几毫秒时间,而写请求在这之间就到来,饿死了后面的读请求.

    Deadline(截止时间调度程序)


    通过时间以及硬盘区域进行分类,这个分类和合并要求类似于noop的调度程序.
    Deadline确保了在一个截止时间内服务请求,这个截止时间是可调整的,而默认读期限短于写期限.这样就防止了写操作因为不能被读取而饿死的现象.
    Deadline对数据库环境(ORACLE RAC,MYSQL等)是最好的选择。

    deadline实现了四个队列,其中两个分别处理正常read和write,按扇区号排序,进行正常io的合并处理以提高吞吐量.因为IO请求可能会集中在某些磁盘位置,这样会导致新来的请求一直被合并,于是可能会有其他磁盘位置的io请求被饿死。于是实现了另外两个处理超时read和write的队列,按请求创建时间排序,如果有超时的请求出现,就放进这两个队列,调度算法保证超时(达到最终期限时间)的队列中的请求会优先被处理,防止请求被饿死。由于deadline的特点,无疑在这里无法区分进程,也就不能实现针对进程的io资源控制。

    AS(预料I/O调度程序)


    本质上与Deadline一样,但在最后一次读操作后,要等待6ms,才能继续进行对其它I/O请求进行调度.可以从应用程序中预订一个新的读请求,改进读操作的执行,但以一些写操作为代价.它会在每个6ms中插入新的I/O操作,而会将一些小写入流合并成一个大写入流,用写入延时换取最大的写入吞吐量.
    AS适合于写入较多的环境,比如文件服务器
    AS对数据库环境表现很差.

    从原理上看:

    1、cfq是一种比较通用的调度算法,是一种以进程为出发点考虑的调度算法,保证大家尽量公平。

    2、deadline是一种以提高机械硬盘吞吐量为思考出发点的调度算法,只有当有io请求达到最终期限的时候才进行调度,非常适合业务比较单一并且IO压力比较重的业务,比如数据库。

    3、noop?思考对象如果拓展到固态硬盘,那么你就会发现,无论cfq还是deadline,都是针对机械硬盘的结构进行的队列算法调整,而这种调整对于固态硬盘来说,完全没有意义。对于固态硬盘来说,IO调度算法越复杂,效率就越低,因为额外要处理的逻辑越多。所以,固态硬盘这种场景下,使用noop是最好的,deadline次之,而cfq由于复杂度的原因,无疑效率最低。

    各调度方法的原理,详细内容可见:linux的IO调度

    I/O调度方法的查看与设置

    1)查看当前系统的I/O调度方法:

    # cat /sys/block/sda/queue/scheduler 
    noop anticipatory deadline [cfq]

    2)临地更改I/O调度方法:
    例如:想更改到noop电梯调度算法:
    echo noop > /sys/block/sda/queue/scheduler

    3)想永久的更改I/O调度方法:
    修改内核引导参数,加入elevator=调度程序名
    # vi /boot/grub/menu.lst
    更改到如下内容:
    kernel /boot/vmlinuz-2.6.18-8.el5 ro root=LABEL=/ elevator=deadline rhgb quiet

    重启之后,查看调度方法:
    # cat /sys/block/sda/queue/scheduler 
    noop anticipatory [deadline] cfq 
    已经是deadline了

  • 相关阅读:
    越来越火的5G公网专用,到底是啥意思?
    看懂IPv6+,这篇就够了
    今年诺贝尔奖得主居然把这事研究清楚了:学历和收入到底有多大关系?
    华为发布《智能世界2030》报告,多维探索未来十年趋势
    每天一个离职小技巧
    Deepsort + Yolo 实现行人检测和轨迹追踪
    “5G+AI”到底有啥用?这篇漫画告诉你答案…
    全国多地拉闸限电 背后到底怎么了?
    【Ajax请求 】- 1.1前端和后台数据交互的说明
    【Web API系列教程】3.3 — 实战:处理数据(建立数据库)
  • 原文地址:https://www.cnblogs.com/alpha1981/p/9273931.html
Copyright © 2020-2023  润新知