`
j2002sx
  • 浏览: 36304 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

LINUX 的4中IO调度算法

阅读更多

IO调度器的总体目标是希望让磁头能够总是往一个方向移动,移动到底了再往反方向走,这恰恰就是现实生活中的电梯模型,所以IO调度器也被叫做电梯.(elevator)而相应的算法也就被叫做电梯算法.而Linux中IO调度的电梯算法有好几种,一个叫做as(Anticipatory),一个叫做cfq(Complete Fairness Queueing),一个叫做deadline,还有一个叫做noop(No Operation).具体使用哪种算法我们可以在启动的时候通过内核参数elevator来指定.
另一方面我们也可以单独的为某个设备指定它所采用的IO调度算法,这就通过修改在/sys/block/sda/queue/目录下面的scheduler文件.比如我们可以先看一下我的这块硬盘:
[root@localhost ~]# cat /sys/block/sda/queue/scheduler
noop anticipatory deadline [cfq]
可以看到我们这里采用的是cfq.
 
2.6内核的四种调度算法
In the 2.6 kernel series, there are four interchangeable schedulers, as follows:
cfq- “Completely Fair Queuing” makes a good default for most workloads on general-purpose servers.
as - “Anticipatory Scheduler” is best for workstations and other systems with slow, single-spindle storage.
deadline - “Deadline” is a relatively simple scheduler which tries to minimize I/O latency by re-ordering requests to improve performance.
noop- “NOOP” is the most simple scheduler of all, and is really just a single FIFO queue.
修改默认的IO调度算法
There are two ways to change the I/O scheduler - at boot time, or with new kernels at runtime. For all Linux kernels, appending ‘elevator={noop|deadline}’ to the kernel boot string sets the I/O elevator.
With LILO, you can use the ‘append’ keyword:
image=/boot/vmlinuz-2.6.14.2
label=14.2
append=”elevator=deadline”
read-only
optional
With GRUB, append the string to the end of the kernel command:
title Fedora Core (2.6.9-5.0.3.EL_lustre.1.4.2custom)
root (hd0,0)
kernel /vmlinuz-2.6.9-5.0.3.EL_lustre.1.4.2custom ro
root=/dev/VolGroup00/LogVol00 rhgb noapic quiet elevator=deadline
With newer Linux kernels (Red Hat Enterprise Linux v3 Update 3 does not have this feature. It is present in the main Linux tree as of 2.6.15), one can change the scheduler while running. If the file /sys/block/<DEVICE>/queue/scheduler exists (where DEVICE is the block device you wish to affect), it will contain a list of available schedulers and can be used to switch the schedulers.
(hda is the <disk>):
[root@cfs2]# cat /sys/block/hda/queue/scheduler
noop [anticipatory] deadline cfq
[root@cfs2 ~]# echo deadline > /sys/block/hda/queue/scheduler
[root@cfs2 ~]# cat /sys/block/hda/queue/scheduler
noop anticipatory [deadline] cfq
The other schedulers (anticipatory and cfq) are better suited for desktop use.
查看当前系统支持的IO调度算法
dmesg | grep -i scheduler
cat /sys/block/sda/queue/scheduler ##查看系统使用的IO调度机制
noop anticipatory deadline [cfq]
其中用[ ]起来的,表示目前系统正使用的IO调弃机制,当前系统支持noop anticipatory deadline 和cfq
echo cfq >/sys/block/sda/queue/scheduler 来让更改及时生效
在2.6的内核中共计有4种IO调度机制:
1.Deadline scheduler Deadline scheduler 用 deadline 算法保证对于既定的 IO 请求以最小的延迟时间,从这一点理解,对于 DSS 应用应该会是很适合的。
2.Anticipatory scheduler(as) 曾经一度是 Linux 2.6 Kernel 的 IO scheduler 。Anticipatory 的中文含义是”预料的, 预想的”, 这个词的确揭示了这个算法的特点,简单的说,有个 IO 发生的时候,如果又有进程请求 IO 操作,则将产生一个默认的 6 毫秒猜测时间,猜测下一个 进程请求 IO 是要干什么的。这对于随即读取会造成比较大的延时,对数据库应用很糟糕,而对于 Web Server 等则会表现的不错。这个算法也可以简单理解为面向低速磁盘的,因为那个”猜测”实际上的目的是为了减少磁头移动时间。
3.Completely Fair Queuing  虽然这世界上没有完全公平的事情,但是并不妨碍开源爱好者们设计一个完全公平的 IO 调度算法。Completely Fair Queuing (cfq, 完全公平队列) 在 2.6.18 取代了 Anticipatory scheduler 成为 Linux Kernel 默认的 IO scheduler 。cfq 对每个进程维护一个 IO 队列,各个进程发来的 IO 请求会被 cfq 以轮循方式处理。也就是对每一个 IO 请求都是公平的。这使得 cfq 很适合离散读的应用(eg: OLTP DB)。我所知道的企业级 Linux 发行版中,SuSE Linux 好像是最先默认用 cfq 的.
4.NOOP Noop 对于 IO 不那么操心,对所有的 IO请求都用 FIFO 队列形式处理,默认认为 IO 不会存在性能问题。这也使得 CPU 也不用那么操心。当然,对于复杂一点的应用类型,使用这个调度器,用户自己就会非常操心。
 
redhat上介绍io调度算法的页面:

分享到:
评论

相关推荐

    Linux IO调度算法比较

    ### Linux IO调度算法详解 #### 一、引言 在现代计算系统中,I/O(输入/输出)操作是不可避免的。特别是在涉及大量数据存取的场景下,如数据库服务、文件系统操作等,I/O性能直接影响着系统的整体效率。由于磁盘...

    在Linux系统中IO调度的选择

    ### 在Linux系统中IO调度的选择 #### I/O调度概述 在Linux系统中,I/O调度算法扮演着极其重要的角色,特别是在多个进程同时竞争磁盘I/O资源时。它负责优化请求的顺序和时机,以达到最佳的整体I/O性能。本文将详细...

    IO调度算法共4页.pdf.zip

    本资料“IO调度算法共4页.pdf”将深入探讨这个主题,虽然只有四页,但内容通常会涵盖以下几个关键知识点: 1. **调度目标**:I/O调度的主要目标包括提高系统整体效率,减少平均等待时间,确保公平性,并尽可能避免...

    英本linux IO调度算法之CFQ详解

    CFQ(Complete Fair Queuing)调度算法是Linux内核中的一个I/O调度器,其主要目的是提供一种相对公平的I/O资源分配机制,确保系统中所有进程获得平等的磁盘访问机会,从而防止饥饿现象发生,即不会有一个进程长时间...

    Linux Kernel IO调度中文手册

    Linux内核提供了多种不同的IO调度算法,包括: 1. **先入先出(FCFS)**:这是一种简单的调度策略,按照请求到达的顺序进行服务。尽管简单,但在多任务环境下可能会导致响应时间较长。 2. **最短寻道时间优先...

    IO调度算法.docx

    在Linux系统中,可以通过`/sys/block/sda/queue/scheduler`路径下的文件查看和设置当前使用的I/O调度算法,其中的选项包括`noop`、`anticipatory`、`deadline`和`cfq`。此外,`ionice`命令用于改变进程的I/O优先级,...

    Linux IO调度算法之CFQ详解.pdf

    CFQ调度是基于优先级调度的,系统中的每一个进程都有一个优先级类(这个优先级类关联了3种:实时(RT),最佳(BE),空闲),RT 和BE作为了一组8种不同的优先级来说明服务的不同优先级。 每一个进程都有有一个...

    linux磁盘io调度分析

    ### Linux磁盘IO调度分析 在现代操作系统中,磁盘输入输出(I/O)调度扮演着极其重要的角色,直接影响到系统的响应时间和整体性能。Linux作为一款广泛应用的操作系统,在磁盘I/O调度方面提供了多种策略来适应不同的...

    IO调度算法.pdf

    **I/O 调度算法**是操作系统管理存储设备输入输出的重要策略,其目标是优化磁盘访问效率,平衡不同进程的I/O需求,减少延迟并提高整体性能。以下是四种常见的I/O调度算法的详细说明: 1. **CFQ (Completely Fair ...

    Mysql数据库文件系统及IO调度算法的选择实用.pdf

    MySQL数据库的性能优化不仅涉及到查询优化、索引设计,还与数据库文件系统和I/O调度算法密切相关。文件系统的选择能够显著影响I/O性能,而I/O调度算法则决定了磁盘操作的顺序和效率,这对于数据库服务尤其关键,因为...

    Linux IO数据通道我理解

    Linux提供了多种IO调度算法,每种算法都有其适用场景: 1. **Deadline**:默认调度算法,兼顾了公平性和响应时间。 2. **CFQ**(Completely Fair Queuing):力求在所有进程间公平分配IO带宽。 3. **NOOP**(No ...

    Linux.Kernel.IO.Scheduler.pdf

    在讨论的文件中,“Linux.Kernel.IO.Scheduler.pdf”详细介绍了Linux内核中IO调度层的相关知识点,包括请求队列、调度器操作、I/O调度器的工作原理、调度算法、请求队列的管理和处理,以及与块设备驱动的交互等。...

    34 生产经验:Linux操作系统的存储系统软件层原理剖析以及IO调度优化原理.pdf

    因此,推荐使用Deadline IO调度算法,这种算法强调了IO请求的截止时间,能够减少某些IO请求的等待时间,从而提高数据库操作的性能。 6. Block设备驱动层 最后一层是Block设备驱动层,它是与硬件设备直接交互的层。...

    漫谈linux文件IO

    3. **Page Cache**:内核使用 pdflush 线程监控 Page Cache 中的脏页,并根据需要将其提交到 IO 调度队列。IO 调度器负责决定何时以及如何将数据写回磁盘。 #### 五、磁盘 I/O 调度与优化 磁盘 I/O 调度是一个复杂...

    linux IO优化

    Linux系统中的IO调度算法是操作系统内核的重要组成部分,负责管理和调度磁盘I/O请求,以提高系统的整体性能。根据不同的应用场景,Linux提供了多种I/O调度算法供用户选择。 #### 二、I/O调度算法类型 Linux系统...

    linuxI/O调度器

    Linux I/O 调度器是操作系统中负责管理输入/输出(I/O)操作的模块。在 Linux 中,I/O 调度器的主要任务是将无序的 I/O 操作变为有序的 I/O 操作,以便更好地利用介质。I/O 调度器将请求安置在一个队列中等待完成,...

    Linux IO数据通道我理解之分享

    Linux提供了多种不同的IO调度算法来满足不同场景下的需求。其中较为常见的包括: 1. **DeadLine**:默认的IO调度算法,适用于大多数场景。 2. **CFQ (Completely Fair Queuing)**:旨在提供公平的资源分配,适用于...

    行业-34 生产经验:Linux操作系统的存储系统软件层原理剖析以及IO调度优化原理.rar

    在IT行业中,Linux操作系统...理解Linux存储系统软件层的工作原理并掌握IO调度优化技巧,对于提升系统性能和稳定性至关重要。在实际生产环境中,根据不同的业务场景灵活应用这些知识,能够显著改善系统整体的运行效率。

    03linux内核IO性能优化及块BIO处理

    在块设备初始化时,会分配并初始化这个请求队列,同时可以为驱动程序指定特定的IO调度算法,如noop、deadline、as或cfq等。这些调度算法决定了如何最有效地安排和执行I/O操作。 IO调度算法的选择对系统的性能至关...

Global site tag (gtag.js) - Google Analytics