日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

优先级调度算法实现_「kernel」 - 磁盘IO调度算法

發布時間:2025/3/19 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 优先级调度算法实现_「kernel」 - 磁盘IO调度算法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

I/O調度算法在各個進程競爭磁盤I/O的時候擔當了裁判的角色。要求請求的次序和時機做最優化的處理,以求得盡可能最好的整體I/O性能。

一、I/O調度程序的總結

  • 當向設備讀寫數據時,請求被安置在一個隊列中等待完成
  • 每個塊設備都有自己的隊列
  • I/O調度程序負責維護這些隊列的順序,將無序的I/O操作變為有序的I/O操作
  • 二、I/O調度的4種算法

    1.CFQ(完全公平排隊I/O調度程序)

    最新的內核版本和發行版中,都選擇CFQ做為默認的I/O調度器,對于通用的服務器是最好的選擇。

    CFQ對于多媒體應用(video,audio)和桌面系統是最好的選擇。

    CFQ賦予I/O請求一個優先級,而I/O優先級請求獨立于進程優先級,高優先級的進程的讀寫不能自動地繼承高的I/O優先級。

    對于很多IO壓力較大的場景就并不是很適應,尤其是IO壓力集中在某些進程上的場景。因為這種場景我們需要更多的滿足某個或者某幾個進程的IO響應速度,而不是讓所有的進程公平的使用IO,比如數據庫應用。

    CFQ試圖均勻地分布對I/O帶寬的訪問,避免進程被餓死并實現較低的延遲,是deadline和as調度器的折中。

    工作原理:

    CFQ為每個進程/線程,單獨創建一個隊列來管理該進程所產生的請求,也就是說每個進程一個隊列,每個隊列按照上述規則進行merge和sort。

    各隊列之間的調度使用時間片來調度,以此來保證每個進程都能被很好的分配到I/O帶寬,I/O調度器每次執行一個進程的4次請求。可以調queued和quantum來優化。

    2.NOOP(電梯式調度程序)

    在Linux 2.4或更早的版本的調度程序,那時只有這一種I/O調度算法,I/O請求被分配到隊列,調度由硬件進行,只有當CPU時鐘頻率比較有限時進行。

    Noop對所有的I/O請求都用FIFO隊列形式處理,默認認為I/O不會存在性能問題。

    CPU像電梯算法一樣對I/O請求進行組織,當有一個新的請求到來時,它將請求合并到最近的請求之后,以此來保證請求同一介質。

    NOOP傾向餓死讀而利于寫,NOOP對于閃存設備,RAM,嵌入式系統是最好的選擇。

    電梯算法餓死讀請求的解釋:

    因為寫請求比讀請求更容易,寫請求通過文件系統cache,不需要等一次寫完成,就可以開始下一次寫操作,寫請求通過合并,堆積到I/O隊列中。

    讀請求需要等到它前面所有的讀操作完成,才能進行下一次讀操作,在讀操作之間有幾毫秒時間,而寫請求在這之間就到來,餓死了后面的讀請求。

    3.Deadline(截止時間調度程序)

    Deadline確保了在一個截止時間內服務請求,這個截止時間是可調整的,而默認讀期限短于寫期限,這樣就防止了寫操作因為不能被讀取而餓死的現象。

    Deadline對數據庫環境(ORACLE、MySQL等)是最好的選擇。

    Deadline實現了四個隊列,其中兩個分別處理正常read和write,按扇區號排序,進行正常IO的合并處理以提高吞吐量。

    因為IO請求可能會集中在某些磁盤位置,這樣會導致新來的請求一直被合并,于是可能會有其他磁盤位置的IO請求被餓死。

    于是實現了另外兩個處理超時read和write的隊列,按請求創建時間排序,如果有超時的請求出現,就放進這兩個隊列,調度算法保證超時(達到最終期限時間)的隊列中的請求會優先被處理,防止請求被餓死。

    由于Deadline的特點,無法區分進程,也就不能實現針對進程的IO資源控制。

    4.AS(預料I/O調度程序)

    本質上與Deadline一樣,但在最后一次讀操作后,要等待6ms才能繼續進行對其它I/O請求進行調度。

    可以從應用程序中預訂一個新的讀請求,改進讀操作的執行,但以一些寫操作為代價。

    它會在每個6ms中插入新的I/O操作,而會將一些小寫入流合并成一個大寫入流,用寫入延時換取最大的寫入吞吐量。

    AS適合于寫入較多的環境,比如文件服務器,AS對數據庫環境表現很差。

    5.總結

    1.cfq是一種比較通用的調度算法,是一種以進程為出發點考慮的調度算法,保證盡量公平。

    2.deadline是一種以提高機械硬盤吞吐量為思考出發點的調度算法,只有當有IO請求達到最終期限的時候才進行調度,非常適合業務比較單一并且IO壓力比較重的業務,比如數據庫。

    3.noop在固態硬盤這種場景下,使用noop是最好的,deadline次之,而cfq由于復雜度的原因,效率最低。

    三、I/O調度方法的查看與設置

    # 查看當前系統的I/O調度方法 cat /sys/block/sda/queue/schedulernoop anticipatory deadline [cfq]# 臨時更改I/O調度方法 # 更改到noop echo noop > /sys/block/sda/queue/scheduler# 永久更改I/O調度方法 # 修改內核引導參數,加入elevator=調度程序名 vim /boot/grub/menu.lstkernel /boot/vmlinuz-2.6.18-8.el5 ro root=LABEL=/ elevator=deadline rhgb quiet# 重啟后查看調度方法 cat /sys/block/sda/queue/schedulernoop anticipatory [deadline] cfq

    總結

    以上是生活随笔為你收集整理的优先级调度算法实现_「kernel」 - 磁盘IO调度算法的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。