linux 系統IO 排程
在linux下面列出4種排程演算法
CFQ (Completely Fair Queuing 完全公平的排隊)(elevator=cfq):
Deadline (elevator=deadline):
NOOP (elevator=noop):
I/O請求被分配到佇列,排程由硬體進行,只有當CPU時脈頻率比較有限時進行.
Noop對於I/O不那麼操心,對所有的I/O請求都用FIFO佇列形式處理,預設認為 I/O不會存在效能問題.這也使得CPU也不用那麼操心.當然對於複雜一點的應用型別使用這個排程器,使用者自己就會非常操心.
Noop排程演算法指的是當請求被儲存到佇列並交由I/O子系統處理時由磁碟硬體對其進行最佳化.該演算法一般只對一些特定的硬體(例如RAM disk和TCQ disk等).現代磁碟控制器都具備透過tagged command queuing進行最佳化的功能.Tagged command queuing(TCQ)可以透過由磁碟控制器對I/O請求進行重新排序來減少磁頭的動作.通常需要進行重組的I/O請求都會帶有一個識別符號,這樣控制器在接收到這些I/O請求的時候會按照規則進行處理.
有些應用程式需要對佇列長度進行限制,而現代的裝置驅動都具備用於控制佇列長度的TCO功能,並且該功能可以作為核心引數在系統啟動的時候新增.例如要控制SCSI驅動器Lun2的佇列長度為64個請求,可以修改/etc/grub.conf並增加下面的核心引數:aic7xxx=tag_info:{{0,0,64,0,0,0,0}}
Anticipatory (elevator=as):
對讀操作最佳化服務時間,在提供一個I/O的時候進行短時間等待,使程式能夠提交到另外 的I/O.Anticipatory scheduler(as) 曾經一度是Linux 2.6 Kernel的I/O scheduler.Anticipatory的中文含義是“預料的,預想的”,這個詞的確揭示了這個演算法的特點,簡單的說有個I/O發生的時候,如果又 有程式請求I/O操作,則將產生一個預設的6毫秒猜測時間,猜測下一個程式請求I/O是要幹什麼的.這對於隨機讀取會造成比較大的延時,對資料庫應用很糟 糕,而對於Web Server等則會表現的不錯.這個演算法也可以簡單理解為面向低速磁碟的,因為那個“猜測”實際上的目的是為了減少磁頭移動時間.因此這種演算法更加適合順 序讀寫的應用程式.這個可以用來調整的核心引數有 antic_expire ,read_expire 和 write_expire.
linux中IO排程方法的檢視和設定的方法
1 2 | $ cat /sys/block/{DEVICE-NAME}/queue/scheduler $ cat /sys/block/sd*/queue/scheduler |
1 | noop anticipatory deadline [cfq] |
1 2 | $ echo {SCHEDULER-NAME} > /sys/block/{DEVICE-NAME}/queue/scheduler $ echo noop > /sys/block/hda/queue/scheduler |
對IO排程使用的建議
磁碟佇列長度
/sys/block/sda/queue/nr_requests 預設只有 128 個佇列,可以提高到 512 個.會更加佔用記憶體,但能更加多的合併讀寫操作,速度變慢,但能讀寫更加多的量
等待時間
/sys/block/sda/queue/iosched/antic_expire 讀取附近產生的新請時等待多長時間
對讀最佳化的引數
幾個非常有效的 IO 排程調節的核心引數
1 | /proc/sys/vm/dirty_ratio |
這個引數控制檔案系統的檔案系統寫緩衝區的大小,單位是百分比,表示系統記憶體的百分比,表示當寫緩衝使用到系統記憶體多少的時候,開始向磁碟寫出數 據.增大之會使用更多系統記憶體用於磁碟寫緩衝,也可以極大提高系統的寫效能.但是,當你需要持續、恆定的寫入場合時,應該降低其數值,一般啟動上預設是 10.下面是增大的方法: echo ’40′> /proc/sys/vm/dirty_ratio
1 | /proc/sys/vm/dirty_background_ratio |
這個引數控制檔案系統的pdflush程式,在何時重新整理磁碟.單位是百分比,表示系統記憶體的百分比,意思是當寫緩衝使用到系統記憶體多少的時候, pdflush開始向磁碟寫出資料.增大之會使用更多系統記憶體用於磁碟寫緩衝,也可以極大提高系統的寫效能.但是,當你需要持續、恆定的寫入場合時,應該 降低其數值,一般啟動上預設是 5.下面是增大的方法: echo ’20′ > /proc/sys/vm/dirty_background_ratio
1 | /proc/sys/vm/dirty_writeback_centisecs |
這個引數控制核心的髒資料重新整理程式pdflush的執行間隔.單位是 1/100 秒.預設數值是500,也就是 5 秒.如果你的系統是持續地寫入動作,那麼實際上還是降低這個數值比較好,這樣可以把尖峰的寫操作削平成多次寫操作.設定方法如下: echo ’200′ > /proc/sys/vm/dirty_writeback_centisecs 如果你的系統是短期地尖峰式的寫操作,並且寫入資料不大(幾十M/次)且記憶體有比較多富裕,那麼應該增大此數值: echo ’1000′ > /proc/sys/vm/dirty_writeback_centisecs
1 | /proc/sys/vm/dirty_expire_centisecs |
這個引數宣告Linux核心寫緩衝區裡面的資料多“舊”了之後,pdflush程式就開始考慮寫到磁碟中去.單位是 1/100秒.預設是 30000,也就是 30 秒的資料就算舊了,將會重新整理磁碟.對於特別過載的寫操作來說,這個值適當縮小也是好的,但也不能縮小太多,因為縮小太多也會導致IO提高太快.建議設定為 1500,也就是15秒算舊. echo ’1500′ > /proc/sys/vm/dirty_expire_centisecs 當然,如果你的系統記憶體比較大,並且寫入模式是間歇式的,並且每次寫入的資料不大(比如幾十M),那麼這個值還是大些的好.
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/133735/viewspace-751108/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Linux IO排程方法Linux
- 轉:linux io排程深入分析Linux
- linux 2.6的IO排程演算法Linux演算法
- 07 系統排程
- Linux系統磁碟IOLinux
- 排程系統設計精要
- linux系統中的排程週期任務:cronLinux
- linux系統中的排程延遲任務:at 命令Linux
- Linux核心排程分析(程式排程)Linux
- 作業系統(Linux)--按優先數排程演算法實現處理器排程作業系統Linux演算法
- Quartz排程系統入門和排程高可用實現方案quartz
- APS高階計劃排程系統和生產排產系統
- Android系統“資源排程框架”Android框架
- 【作業系統】--處理器排程作業系統
- 作業系統排程演算法作業系統演算法
- linux程式排程Linux
- 排程器簡介,以及Linux的排程策略Linux
- Schedule 排程系統設計(單機版)
- 利用Mesos構建多工排程系統
- 作業系統之排程演算法作業系統演算法
- 談ERP系統的生產排程
- 0512作業系統之程式排程作業系統
- Hadoop - 任務排程系統比較Hadoop
- MySQL優化--IO排程演算法優化MySql優化演算法
- Linux程式排程策略Linux
- linux 任務排程Linux
- LINUX(十三)Linux程式排程Linux
- 程式排程演算法Linux程式排程演算法演算法Linux
- 作業系統精髓設計原理 程式排程作業系統
- 技術分享| 快對講綜合排程系統
- 論銀行的排程系統和ETL
- 解決方案| 快對講綜合排程系統
- Yarp 讓系統內排程更靈活
- 詳解BI系統中的任務排程
- 作業系統(5)處理器排程管理作業系統
- 時間系統、程式的排程與切換
- 0512 作業系統程式排程實驗作業系統
- Linux系統程式設計-檔案IOLinux程式設計