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 掃瞄演算法 ...