歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> 關於Linux

淺談linux性能調優之六:IO調度算法的選擇

淺談linux性能調優之六:IO調度算法的選擇
淺談linux性能調優之五:調優軟raid http://www.2cto.com/os/201307/228240.html 一) I/O調度程序的總結         1) 當向設備寫入數據塊或是從設備讀出數據塊時,請求都被安置在一個隊列中等待完成.     2) 每個塊設備都有它自己的隊列.     3) I/O調度程序負責維護這些隊列的順序,以更有效地利用介質.I/O調度程序將無序的I/O操作變為有序的I/O操作.     4) 內核必須首先確定隊列中一共有多少個請求,然後才開始進行調度.   二) I/O調度的4種算法       1) CFQ(Completely Fair Queuing, 完全公平排隊)       特點:         在最新的內核版本和發行版中,都選擇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對數據庫環境表現很差.       三) I/O調度方法的查看與設置       1) 查看當前系統的I/O調度           [root@test1 tmp]# cat /sys/block/sda/queue/scheduler          noop anticipatory deadline [cfq]       2) 臨時更改I/O調度         例如:想更改到noop電梯調度算法:         echo noop > /sys/block/sda/queue/scheduler       3) 永久更改I/O調度         修改內核引導參數,加入elevator=調度程序名         [root@test1 tmp]# vi /boot/grub/menu.lst         更改到如下內容:         kernel /boot/vmlinuz-2.6.18-8.el5 ro root=LABEL=/ elevator=deadline rhgb quiet           重啟之後,查看調度方法:         [root@test1 ~]# cat /sys/block/sda/queue/scheduler          noop anticipatory [deadline] cfq          已經是deadline了   四) ionice       ionice可以更改任務的類型和優先級,不過只有cfq調度程序可以用ionice.     有三個例子說明ionice的功能:     采用cfq的實時調度,優先級為7         ionice -c1 -n7  -ptime dd if=/dev/sda1 f=/tmp/test bs=2M count=300&     采用缺省的磁盤I/O調度,優先級為3         ionice -c2 -n3  -ptime dd if=/dev/sda1 f=/tmp/test bs=2M count=300&     采用空閒的磁盤調度,優先級為0         ionice -c3 -n0  -ptime dd if=/dev/sda1 f=/tmp/test bs=2M count=300&       ionice的三種調度方法,實時調度最高,其次是缺省的I/O調度,最後是空閒的磁盤調度.     ionice的磁盤調度優先級有8種,最高是0,最低是7.     注意,磁盤調度的優先級與進程nice的優先級沒有關系.     一個是針對進程I/O的優先級,一個是針對進程CPU的優先級.  
Copyright © Linux教程網 All Rights Reserved