btrfs cfq, noop, deadline三種IO調度策略下的IO性能表現

btrfs cfq, noop, deadline三種IO調度策略下的IO性能表現

 
德哥 2016-03-31 15:47:56 瀏覽5550
 
btrfs 格式化和掛載參數:
# mkfs.btrfs -m raid10 -d raid10 -n 4096 -f /dev/sdb /dev/sdc /dev/sdd /dev/sde
# mount -o noatime,nodiratime,ssd_spread,discard,space_cache /dev/sdb /data01
 
從結果來看,建議使用deadline。
 
測試結果:
[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
[root @localhost ~]# 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了
相關文章
相關標籤/搜索