• Linux I/O调度器


    Linux I/O调度策略

    目前Linux主要提供三种IO调度策略:CFQ(Completely Fair Queue,完全公平队列)、DEADLINE和NOOP(No operation),其中:

    • CFQ:按照IO请求的地址进行排序,而不是按照先来后到的顺序来进行响应,同时对I/O请求进行合并。(CFQ 为所有进程尽量分配等量的带宽,适合于桌面多任务及多媒体应用。)
    • Deadline:DEADLINE算法是基于CFQ实现的,除CFQ原有机制外,它新增超时机制,避免IO饿死的极端情况,同时还对读写请求分别增加了FIFO队列
            FIFO(Read) > FIFO(Write) > CFQ。(DeadLine是一种以提高机械硬盘吞吐量为思考出发点的调度算法,适合业务比较单一并且I/O压力比较重的业务,比如Web服务器,数据库应用等。)
    • NOOP:该算法不会对I/O请求进行排序,只会对I/O请求进行合并。(NOOP 对于闪存设备和嵌入式系统是最好的选择。对于固态硬盘来说使用NOOP是最好的,DeadLine次之,而CFQ效率最低。)

    其中,CFQ和DEADLINE主要针对的是机械盘设计的,其对IO请求进行地址重排,可以尽量减少磁盘旋转次数。但对于固态盘,这种机制增加了IO请求在IO队列中的开销。所以,

    • SSD推荐使用NOOP。因为它无需移动电子元件,I/O重排对其是一种不必要的开销,不适合CFQ和Deadline。
    • HDD使用Deadline或CFQ。这调度策略不会有明显性能差异,但在I/O压力较大情况下,CFQ会导致部分进程I/O延迟过高。

    查看Linux系统的 I/O调度器

    查看系统支持的I/O调度器

    查看Linux系统的I/O调度器一般分成两个部分,一个是查看Linux系统整体使用的I/O调度器,另一个是查看某磁盘使用的I/O调度器。

    # dmesg | grep -i scheduler
    [    1.508820] io scheduler noop registered
    [    1.508827] io scheduler deadline registered
    [    1.508850] io scheduler cfq registered (default)

    查看某块硬盘使用的I/O调度器

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

    修改磁盘的I/O调度器

    Linux下更改的I/O调度器很简单,不需要更新内核,无需重启计算机,可以使用shell命令修改

    #其中,sdx设置为实际SSD设备
    sudo echo noop > /sys/block/sdx/queue/scheduler
  • 相关阅读:
    【设计模式】适配器
    【c++算法】变序性算法
    【电信业务】【原则与规范】TMF的NGOSS
    【电信业务】【原则与规范】ITU的TMN
    【c++算法】排序算法
    家后
    【设计模式】桥接
    【电信业务】【原则与规范】SOA 面向服务架构
    UIImage转换成UIView
    ASIHTTPREQUEST网络加载图片
  • 原文地址:https://www.cnblogs.com/abcdef/p/13341782.html
Copyright © 2020-2023  润新知