溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

linux中如何修改磁盤調(diào)度算法

發(fā)布時間:2021-11-06 17:49:10 來源:億速云 閱讀:476 作者:柒染 欄目:建站服務(wù)器

linux中如何修改磁盤調(diào)度算法,針對這個問題,這篇文章詳細(xì)介紹了相對應(yīng)的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

IO調(diào)度器的總體目標(biāo)是希望讓磁頭能夠總是往一個方向移動,移動到底了再往反方向走,這恰恰就是現(xiàn)實生活中的電梯模型,所以IO調(diào)度器也被叫做電梯. (elevator)而相應(yīng)的算法也就被叫做電梯算法.而Linux中IO調(diào)度的電梯算法有好幾種,一個叫做as(Anticipatory),一個叫做 cfq(Complete Fairness Queueing),一個叫做deadline,還有一個叫做noop(No Operation).具體使用哪種算法我們可以在啟動的時候通過內(nèi)核參數(shù)elevator來指定.

一)I/O調(diào)度的4種算法
1)CFQ(完全公平排隊I/O調(diào)度程序)
特點:
在最新的內(nèi)核版本和發(fā)行版中,都選擇CFQ做為默認(rèn)的I/O調(diào)度器,對于通用的服務(wù)器也是最好的選擇.
CFQ試圖均勻地分布對I/O帶寬的訪問,避免進(jìn)程被餓死并實現(xiàn)較低的延遲,是deadline和as調(diào)度器的折中.
CFQ對于多媒體應(yīng)用(video,audio)和桌面系統(tǒng)是最好的選擇.
CFQ賦予I/O請求一個優(yōu)先級,而I/O優(yōu)先級請求獨立于進(jìn)程優(yōu)先級,高優(yōu)先級的進(jìn)程的讀寫不能自動地繼承高的I/O優(yōu)先級.

工作原理:
CFQ為每個進(jìn)程/線程,單獨創(chuàng)建一個隊列來管理該進(jìn)程所產(chǎn)生的請求,也就是說每個進(jìn)程一個隊列,各隊列之間的調(diào)度使用時間片來調(diào)度,
以此來保證每個進(jìn)程都能被很好的分配到I/O帶寬.I/O調(diào)度器每次執(zhí)行一個進(jìn)程的4次請求.

2)NOOP(電梯式調(diào)度程序)
特點:
在Linux2.4或更早的版本的調(diào)度程序,那時只有這一種I/O調(diào)度算法.
NOOP實現(xiàn)了一個簡單的FIFO隊列,它像電梯的工作主法一樣對I/O請求進(jìn)行組織,當(dāng)有一個新的請求到來時,它將請求合并到最近的請求之后,以此來保證請求同一介質(zhì).
NOOP傾向餓死讀而利于寫.
NOOP對于閃存設(shè)備,RAM,嵌入式系統(tǒng)是最好的選擇.
電梯算法餓死讀請求的解釋:
因為寫請求比讀請求更容易.
寫請求通過文件系統(tǒng)cache,不需要等一次寫完成,就可以開始下一次寫操作,寫請求通過合并,堆積到I/O隊列中.
讀請求需要等到它前面所有的讀操作完成,才能進(jìn)行下一次讀操作.在讀操作之間有幾毫秒時間,而寫請求在這之間就到來,餓死了后面的讀請求.

3)Deadline(截止時間調(diào)度程序)
特點:
通過時間以及硬盤區(qū)域進(jìn)行分類,這個分類和合并要求類似于noop的調(diào)度程序.
Deadline確保了在一個截止時間內(nèi)服務(wù)請求,這個截止時間是可調(diào)整的,而默認(rèn)讀期限短于寫期限.這樣就防止了寫操作因為不能被讀取而餓死的現(xiàn)象.
Deadline對數(shù)據(jù)庫環(huán)境(ORACLE RAC,MYSQL等)是最好的選擇.

4)AS(預(yù)料I/O調(diào)度程序)
特點:
本質(zhì)上與Deadline一樣,但在最后一次讀操作后,要等待6ms,才能繼續(xù)進(jìn)行對其它I/O請求進(jìn)行調(diào)度.
可以從應(yīng)用程序中預(yù)訂一個新的讀請求,改進(jìn)讀操作的執(zhí)行,但以一些寫操作為代價.
它會在每個6ms中插入新的I/O操作,而會將一些小寫入流合并成一個大寫入流,用寫入延時換取最大的寫入吞吐量.
AS適合于寫入較多的環(huán)境,比如文件服務(wù)器
AS對數(shù)據(jù)庫環(huán)境表現(xiàn)很差.


查看當(dāng)前系統(tǒng)支持的IO調(diào)度算法
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)

查看當(dāng)前系統(tǒng)的I/O調(diào)度方法:
cat /sys/block/sda/queue/scheduler
noop anticipatory deadline [cfq]


臨地更改I/O調(diào)度方法:
例如:想更改到noop電梯調(diào)度算法:
echo noop > /sys/block/sda/queue/scheduler


想永久的更改I/O調(diào)度方法:
修改內(nèi)核引導(dǎo)參數(shù),加入elevator=調(diào)度程序名
CentOS7:
[root@localhost ~]# grubby --update-kernel=ALL --args="elevator=deadline"
[root@localhost ~]# reboot
[root@localhost ~]# cat /sys/block/sda/queue/scheduler
noop [deadline] cfq 
CentOS6:
# vim /boot/grub/menu.lst
更改到如下內(nèi)容: ## 在 rhgb quiet 前添加 elevator=deadline 
kernel /boot/vmlinuz-2。6。32-504.el6 ro root=LABEL=/ elevator=deadline rhgb quiet

重啟之后,查看調(diào)度方法:
cat /sys/block/sda/queue/scheduler
noop anticipatory [deadline] cfq
已經(jīng)是deadline了

關(guān)于linux中如何修改磁盤調(diào)度算法問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注億速云行業(yè)資訊頻道了解更多相關(guān)知識。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI