測試結果:
[root@digoal data01]# echo noop > /sys/block/sdb/queue/scheduler
[root@digoal data01]# echo noop > /sys/block/sdc/queue/scheduler
[root@digoal data01]# echo noop > /sys/block/sdd/queue/scheduler
[root@digoal data01]# echo noop > /sys/block/sde/queue/scheduler
random random bkwd record stride
kB reclen write rewrite read reread read write read rewrite read fwrite frewrite fread freread
2097152 32 77720 77709 159983 159439 72330 70935 77846 64188 75000 854586 902220 7489696 7600964
2097152 64 104428 106089 366463 368877 113952 110715 105357 66938 107051 876465 910270 6748265 8533791
2097152 128 107704 109132 417146 437318 181536 117572 184871 116503 173504 891273 910735 7083844 7465699
2097152 256 127308 127662 476936 478925 235094 126306 240252 66889 235473 890735 812143 6920494 7527925
2097152 512 146141 147122 478253 476208 301315 131230 295966 115434 303665 884662 906913 7406058 6196435
2097152 1024 147223 151444 451993 450326 329316 136489 321772 159823 313979 870263 888099 6985407 7544033
2097152 2048 164547 162438 442901 441851 360306 153920 353463 160712 366146 879602 933799 5629273 5824271
2097152 4096 171985 174225 425775 439573 392926 164443 403381 172532 379402 858670 913175 4698700 5271105
2097152 8192 190121 187834 454027 449194 422420 171070 396334 184075 407093 863424 894932 4980056 5343132
2097152 16384 196351 194956 435803 448469 438458 178073 407322 196700 424138 877813 906542 5018610 5129252
[root@digoal data01]# echo cfq > /sys/block/sdb/queue/scheduler
[root@digoal data01]# echo cfq > /sys/block/sdc/queue/scheduler
[root@digoal data01]# echo cfq > /sys/block/sdd/queue/scheduler
[root@digoal data01]# echo cfq > /sys/block/sde/queue/scheduler
random random bkwd record stride
kB reclen write rewrite read reread read write read rewrite read fwrite frewrite fread freread
2097152 32 76377 74073 176852 173711 73787 71035 72462 82506 75436 855067 862604 8392099 8536847
2097152 64 118443 112069 362156 365841 108131 115517 106261 106888 107198 875728 870956 8345543 9060610
2097152 128 108947 105955 438897 422408 180859 107215 181540 112327 179464 871145 727476 7369672 8227769
2097152 256 117518 119458 477368 479421 227802 117237 230453 70101 223893 885953 861748 6833536 7385041
2097152 512 137452 142118 468122 457083 292588 141234 294708 115448 289653 882885 852336 7254241 7617057
2097152 1024 146782 147708 450453 456297 325155 139924 303286 154319 313172 865120 892726 6888216 6888939
2097152 2048 164938 157667 460494 441980 353312 151031 349135 152418 351972 855243 875387 5648743 6312290
2097152 4096 170055 165014 405079 410577 376776 162120 385417 167159 340488 841613 890966 4832346 4476693
2097152 8192 188404 179583 414861 420485 359677 169331 392425 188238 369951 834353 839714 4510701 4163766
2097152 16384 189633 186795 409104 404502 392445 178677 398647 195776 383146 877292 880568 5164979 5244586
[root@digoal data01]# echo deadline > /sys/block/sdb/queue/scheduler
[root@digoal data01]# echo deadline > /sys/block/sdc/queue/scheduler
[root@digoal data01]# echo deadline > /sys/block/sdd/queue/scheduler
[root@digoal data01]# echo deadline > /sys/block/sde/queue/scheduler
random random bkwd record stride
kB reclen write rewrite read reread read write read rewrite read fwrite frewrite fread freread
2097152 32 76297 76606 178461 179875 73916 69297 76670 68967 76358 878081 894038 7831190 8524173
2097152 64 109962 117287 374097 377030 111773 115772 112564 113903 109150 862310 910522 7558613 8480125
2097152 128 109667 109676 422206 418074 173976 109262 176331 109806 162484 891411 916651 7289953 7381088
2097152 256 119929 120698 435433 444379 215671 113361 227020 67289 233705 891307 857827 7031756 7217077
2097152 512 150384 139186 459279 447765 295988 131709 292982 113496 271109 881912 887563 6786156 7488542
2097152 1024 149161 143798 452386 451975 329657 140954 324087 153979 306680 875291 893943 5424631 5784479
2097152 2048 160770 162023 444445 448918 363688 150719 342115 160651 346611 859319 875966 5287293 6258249
2097152 4096 179407 173476 423748 434952 397429 163437 394059 175363 401404 861316 885105 4928385 5440945
2097152 8192 184741 187554 441951 448512 417487 172784 406814 190259 418868 870022 888991 5025779 5308948
2097152 16384 191530 193142 429578 445846 440323 178951 434807 186504 417491 878968 886187 4908488 4978142
附錄:
IO調度器的整體目標是但願讓磁頭可以老是往一個方向移動,移動到底了再往反方向走,這偏偏就是現實生活中的電梯模型,因此IO調度器也被叫作電梯. (elevator)而相應的算法也就被叫作電梯算法.而Linux中IO調度的電梯算法有好幾種,一個叫作as(Anticipatory),一個叫作 cfq(Complete Fairness Queueing),一個叫作deadline,還有一個叫作noop(No Operation).具體使用哪一種算法咱們能夠在啓動的時候經過內核參數elevator來指定.
一)I/O調度的4種算法
1)CFQ(徹底公平排隊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次請求.
2)NOOP(電梯式調度程序)
特色:
在Linux2.4或更早的版本的調度程序,那時只有這一種I/O調度算法.
NOOP實現了一個簡單的FIFO隊列,它像電梯的工做主法同樣對I/O請求進行組織,當有一個新的請求到來時,它將請求合併到最近的請求以後,以此來保證請求同一介質.
NOOP傾向餓死讀而利於寫.
NOOP對於閃存設備,RAM,嵌入式系統是最好的選擇.
電梯算法餓死讀請求的解釋:
由於寫請求比讀請求更容易.
寫請求經過文件系統cache,不須要等一次寫完成,就能夠開始下一次寫操做,寫請求經過合併,堆積到I/O隊列中.
讀請求須要等到它前面全部的讀操做完成,才能進行下一次讀操做.在讀操做之間有幾毫秒時間,而寫請求在這之間就到來,餓死了後面的讀請求.
3)Deadline(截止時間調度程序)
特色:
經過時間以及硬盤區域進行分類,這個分類和合並要求相似於noop的調度程序.
Deadline確保了在一個截止時間內服務請求,這個截止時間是可調整的,而默認讀期限短於寫期限.這樣就防止了寫操做由於不能被讀取而餓死的現象.
Deadline對數據庫環境(ORACLE RAC,MYSQL等)是最好的選擇.
4)AS(預料I/O調度程序)
特色:
本質上與Deadline同樣,但在最後一次讀操做後,要等待6ms,才能繼續進行對其它I/O請求進行調度.
能夠從應用程序中預訂一個新的讀請求,改進讀操做的執行,但以一些寫操做爲代價.
它會在每一個6ms中插入新的I/O操做,而會將一些小寫入流合併成一個大寫入流,用寫入延時換取最大的寫入吞吐量.
AS適合於寫入較多的環境,好比文件服務器
AS對數據庫環境表現不好.
查看當前系統支持的IO調度算法
dmesg | grep -i scheduler
io scheduler noop registered
io scheduler anticipatory registered
io scheduler deadline registered
io scheduler cfq registered (default)
查看當前系統的I/O調度方法:
cat /sys/block/sda/queue/scheduler
noop anticipatory deadline [cfq]
臨地更改I/O調度方法:
例如:想更改到noop電梯調度算法:
echo noop > /sys/block/sda/queue/scheduler
想永久的更改I/O調度方法:
修改內核引導參數,加入elevator=調度程序名
vi /boot/grub/menu.lst
更改到以下內容:
kernel /boot/vmlinuz-2.6.18-8.el5 ro root=LABEL=/ elevator=deadline rhgb quiet
重啓以後,查看調度方法:
cat /sys/block/sda/queue/scheduler
noop anticipatory [deadline] cfq
已是deadline了