如何更改Linux 的I/O調(diào)度器
Linux 的 I/O 調(diào)度器是一個(gè)以塊式 I/O 訪問存儲(chǔ)卷的進(jìn)程,有時(shí)也叫磁盤調(diào)度器。Linux I/O 調(diào)度器的工作機(jī)制是控制塊設(shè)備的請求隊(duì)列:確定隊(duì)列中哪些 I/O 的優(yōu)先級(jí)更高以及何時(shí)下發(fā) I/O 到塊設(shè)備,以此來減少磁盤尋道時(shí)間,從而提高系統(tǒng)的吞吐量。
目前 Linux 上有如下幾種 I/O 調(diào)度算法:
- noop - 通常用于內(nèi)存存儲(chǔ)的設(shè)備。
- cfq - 完全公平調(diào)度器。進(jìn)程平均使用IO帶寬。
- Deadline - 針對延遲的調(diào)度器,每一個(gè) I/O,都有一個(gè)最晚執(zhí)行時(shí)間。
- Anticipatory - 啟發(fā)式調(diào)度,類似 Deadline 算法,但是引入預(yù)測機(jī)制提高性能。
查看設(shè)備當(dāng)前的 I/O 調(diào)度器:
- # cat /sys/block//queue/scheduler
假設(shè)磁盤名稱是 /dev/sdc:
- # cat /sys/block/sdc/queue/schedulernoop anticipatory deadline [cfq]
如何改變硬盤設(shè)備 I/O 調(diào)度器
使用如下指令:
- # echo {SCHEDULER-NAME} > /sys/block//queue/scheduler
比如設(shè)置 noop 調(diào)度器:
- # echo noop > /sys/block/sdc/queue/scheduler
以上設(shè)置重啟后會(huì)失效,要想重啟后配置仍生效,需要在內(nèi)核啟動(dòng)參數(shù)中將 elevator=noop 寫入 /boot/grub/menu.lst:
1. 備份 menu.lst 文件
- cp -p /boot/grub/menu.lst /boot/grub/menu.lst-backup
2. 更新 /boot/grub/menu.lst
將 elevator=noop 添加到文件末尾,比如:
- kernel /vmlinuz-2.6.16.60-0.91.1-smp root=/dev/sysvg/root splash=silent splash=off showopts elevator=noop