Linux kernel探究IO Scheduling

來源:互聯網
上載者:User

Linux kernel探究IO Scheduling 為什麼我們需要調整磁碟I/O scheduling演算法?在什麼情況下我們需要考慮調整調度演算法?該如何調整?本文將針對上述問題做些回答。I/O scheduling是作業系統存取資料區塊順序的演算法規則總稱,某些情況下我們可能更熟悉稱它為 disk scheduling。出於以下幾個目我們可能會需要考慮調整磁碟的調度演算法:最小化磁碟尋道時間;最佳化關鍵進程的I/O請求,保證關鍵進程的I/O請求;讓伺服器上的進程更好的共用I/O頻寬; 在RHEL3版本之前我們只有一個電梯演算法可以選擇,由於該演算法的局限性因此在之後RHEL4版本,我們有以下4中演算法可以選擇:CFQ-completely fair queuingNOOP-Noop scheduler,No OperationDeadline schedulerAnticipatory scheduling 下面針對上述4個演算法逐個瞭解下具體的演算法規則。 首先是CFQ,這個演算法是大部分發行的Linux版本中預設採用的演算法,全稱為完全公平隊列演算法,該演算法嘗試公平的把i/o頻寬資源給所有進程,進程提交的請求分別放入各自的隊列(64個隊列),因此同一個進程提交的請求通常會被存放到同一個隊列當中去,在大部分情況下是適用大部分的應用系統。 NOOP,該演算法最為簡單,佔用最少的CPU調度時間,遵循FIFO-先進先出的原則對I/O請求進行調度,但是也並不總是這樣,因為它還是會對相臨近I/O請求的進程做些合并。在儲存硬體和磁碟較為最佳化的情況下該演算法的資訊還是不錯的,比如SSD。 Deadline,期限演算法,該演算法最重要的是避免了CFQ演算法中某些請求長時間得不到資源餓死的情況發生。使用了4個隊列,2個讀寫隊列和2個讀寫期限隊列,根據他們的到期時間在期限隊列排隊。該演算法中讀請求優先順序高於寫請求,因此首先完成讀請求隊列(除非寫請求已經被放棄、死亡過很多次),接著檢查第1個請求的到期時間,讀請求的到期時間為500ms,寫請求的到期時間為5s,如果檢查到第1個請求的期限時間已過,那麼將它移動到隊列末尾。適用於即時請求的系統,推薦資料庫或者web伺服器系統使用該演算法。 Anticipatory,預期演算法,這是最複雜的一種演算法,實際上用起來並不是那麼最佳化,從kernel 2.6.33開始已經被移除了。 通過上部描述推薦而且也有人經過驗證了,針對Oracle資料庫的環境,我們可以優先考慮選擇Deadline演算法。 如何查看系統現有使用的調度演算法?cat /sys/block/{DEVICE-NAME}/queue/schedulercat /sys/block/sda/queue/scheduler修改調度演算法:echo {SCHEDULER-NAME} > /sys/block/{DEVICE-NAME}/queue/schedulerecho noop > /sys/block/hda/queue/scheduler最後,上述內容都是扯淡,沒有一個演算法是最優的,在不同的應用、硬體環境中只有逐個測試才能選擇最適合的演算法。-EOF-

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.