磁碟I O排程

2022-07-24 06:21:12 字數 3183 閱讀 3498

io排程器的總體目標是希望讓磁頭能夠總是往乙個方向移動

,移動到底了再往反方向走

,這恰恰就是現實生活中的電梯模型,所以

io排程器也被叫做電梯

. (elevator)

而相應的演算法也就被叫做電梯演算法.而

linux中io

排程的電梯演算法有好幾種

,乙個叫做

as(anticipatory),

乙個叫做

cfq(complete fairness queueing),

乙個叫做

deadline,

還有乙個叫做

noop(no operation).

具體使用哪種演算法我們可以在啟動的時候通過核心引數

elevator

來指定.

(完全公平排隊

i/o排程程式

)特點:

在最新的核心版本和發行版中,都選擇

cfq做為預設的

i/o排程器

,對於通用的伺服器也是最好的選擇

.cfq試圖均勻地分布對

i/o頻寬的訪問

,避免程序被餓死並實現較低的延遲,是

deadline和as

排程器的折中

.cfq對於多**應用

(video,audio)

和桌面系統是最好的選擇

.cfq賦予

i/o請求乙個優先順序,而

i/o優先順序請求獨立於程序優先順序

,高優先順序的程序的讀寫不能自動地繼承高的

i/o優先順序

.工作原理:

cfq為每個程序/執行緒

,單獨建立乙個佇列來管理該程序所產生的請求

,也就是說每個程序乙個佇列

,各佇列之間的排程使用時間片來排程

,以此來保證每個程序都能被很好的分配到i/o頻寬

.i/o

排程器每次執行乙個程序的

4次請求

.(電梯式排程程式

)特點:

在linux2.4或更早的版本的排程程式

,那時只有這一種

i/o排程演算法

.noop實現了乙個簡單的

fifo佇列,

它像電梯的工作主法一樣對

i/o請求進行組織

,當有乙個新的請求到來時

,它將請求合併到最近的請求之後

,以此來保證請求同一介質

.noop傾向餓死讀而利於寫

.noop對於快閃儲存器裝置

,ram,

嵌入式系統是最好的選擇

.電梯演算法餓死讀請求的解釋:

因為寫請求比讀請求更容易.

寫請求通過檔案系統cache,不需要等一次寫完成

,就可以開始下一次寫操作

,寫請求通過合併

,堆積到

i/o佇列中

.讀請求需要等到它前面所有的讀操作完成,才能進行下一次讀操作

.在讀操作之間有幾毫秒時間

,而寫請求在這之間就到來

,餓死了後面的讀請求

.(截止時間排程程式

)特點:

通過時間以及硬碟區域進行分類,這個分類和合併要求類似於

noop

的排程程式

.deadline確保了在乙個截止時間內服務請求

,這個截止時間是可調整的

,而預設讀期限短於寫期限

.這樣就防止了寫操作因為不能被讀取而餓死的現象

.deadline對資料庫環境

(oracle rac,mysql等)

是最好的選擇

.(預料

i/o排程程式

)特點:

本質上與deadline一樣

,但在最後一次讀操作後

,要等待

6ms,

才能繼續進行對其它

i/o請求進行排程

.可以從應用程式中預訂乙個新的讀請求,改進讀操作的執行

,但以一些寫操作為代價

.它會在每個6ms中插入新的

i/o操作

,而會將一些小寫入流合併成乙個大寫入流

,用寫入延時換取最大的寫入吞吐量

.as適合於寫入較多的環境

,比如檔案伺服器

as對資料庫環境表現很差

.dmesg | grep -i scheduler

[root@localhost ~]# dmesg | grep -i scheduler

io scheduler noop registered

io scheduler anticipatory registered

io scheduler deadline registered

io scheduler cfq registered (default)

cat /sys/block/sda/queue/scheduler

noop anticipatory deadline [cfq]

例如:想更改到

noop

電梯排程演算法

:echo noop > /sys/block/sda/queue/scheduler

修改核心引導引數,加入

elevator=

排程程式名

[root@kvm02 ~]# grubby --update-kernel=all --args="elevator=deadline"

[root@kvm02 ~]# reboot

[root@kvm02 ~]# cat /sys/block/sda/queue/scheduler

noop [deadline] cfq 

# vim /boot/grub/menu.lst

更改到如下內容:

kernel /boot/vmlinuz-2。6。

32-504.el6 ro root=label=/ elevator=deadline rhgb quiet

cat /sys/block/sda/queue/scheduler

noop anticipatory [deadline] cfq

已經是deadline了

使用centos7測試時發現多硬碟讀取速度慢,讀速度為

200m

硬碟實際測試只有幾十兆。

deadline模式改成

cfq以後就沒有這個問題了。上圖為

iozone測試8

塊4t硬碟。其中4塊

cfq4塊

deadline

I O管理和磁碟排程

執行i o的三種技術 1 可程式設計i o 處理器代表乙個程序給i o模組傳送乙個i o命令 該程序進入忙等待,直到操作完成才可以繼續執行。2 中斷驅動i o 處理器代表程序向i o模組發出乙個i o命令。有兩種可能性 如果來自程序的i o指令是非阻塞的,那麼處理器繼續執行發出i o命令的程序的後續...

Linux下io磁碟排程策略

i o 排程演算法再各個程序競爭磁碟i o的時候擔當了裁判的角色。他要求請求的次序和時機做最優化的處理,以求得盡可能最好的整體i o效能。在linux下面列出4種排程演算法 cfq completely fair queuing 完全公平的排隊 elevator cfq 這是預設演算法,對於通用伺服...

磁碟排程演算法

磁碟排程在多道程式設計的計算機系統中,各個程序可能會不斷提出不同的對磁碟進行讀 寫操作的請求。由於有時候這些程序的傳送請求的速度比磁碟響應的還要快,因此我們有必要為每個磁碟裝置建立乙個等待佇列,常用的磁碟排程演算法有以下四種 先來先服務演算法 fcfs 最短尋道時間優先演算法 sstf 掃瞄演算法 ...