IO系統效能之三:在Linux中監視IO效能

來源:互聯網
上載者:User

dd命令
iostat命令
理解iostat的各項輸出
iostat的應用執行個體
附:在Windows中監視IO效能
延伸閱讀


dd命令

dd其實是工作於比較低層的一個資料拷貝和轉換的*nix平台的工具,但是因為dd命令支援*nix平台的一些特殊裝置,因此我們可以利用dd命令的這個特性來簡單的測試磁碟的效能。

先說一下兩個相關的特殊裝置

/dev/null
空裝置,通常用作輸出裝置,這個是*nix系統上面的黑洞,所有送到這個空裝置上的內容都會憑空消失。
/dev/zero
Null 字元,通常用作輸入,從/dev/zero中讀取時,它能源源不斷的提供Null 字元(ASCII NUL, 0×00)出來,要多少有多少。

於是就有了下面的用法:

  • 測試磁碟的寫入
/usr/bin/time dd if=/dev/zero of=/tmp/foo bs=4k count=1024000


個命令時往磁碟的檔案/tmp/foo中寫入一個4G大小的檔案,當然檔案的內容全部是Null 字元了,同時用/usr/bin/time來對命令的執行進行計
時,命令中的bs指的是寫入檔案時的塊大小,其實就相當於Oracle中的block大小了,count是寫入的塊數。採取這種方法來寫入資料時只是測試
的連續讀磁碟的效能,而不是隨機讀的效能,不能採取這種方法檢查一個機器的IOPS的,只能檢查磁碟的吞吐率。

  • 測試磁碟的讀取
/usr/bin/time dd if=/tmp/foo of=/dev/null bs=4k

上面的命令是從/tmp/foo檔案中讀取資料,然後扔掉,這裡bs用的是讀取時塊的大小。和上面寫入的命令一樣,這樣測試的僅僅是最大的讀取效能,而不是隨機IO的效能。

  • 還能讀寫同時測試
/usr/bin/time dd if=/tmp/foo of=/tmp/foo2 bs=4k

在上面的命令中都用到了time命令對操作進行計時,這樣才能正確的進行判斷。要記住的一點是dd命令只能夠提供一個大概的測試,通過這個簡單的命令可以對磁碟系統的最大效能有一個大概的瞭解,要瞭解更詳細的資訊還要通過其他方法來查看。



iostat命令

理解iostat的各項輸出

在Linux中,我們執行一個iostat -x命令,我們能看到如下的輸出

$iostat -x
Linux 2.4.21-50a6smp (linux)         11/03/2009

avg-cpu:  %user   %nice    %sys %iowait   %idle
           0.42    0.00    0.26    0.47   98.86

Device:    rrqm/s wrqm/s   r/s   w/s  rsec/s  wsec/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util
hdc          0.01   0.00  0.00  0.00    0.07    0.00     0.03     0.00    24.48     0.00    4.90   4.57   0.00
hda          0.89   8.54  0.74  4.49   12.60  104.22     6.30    52.11    22.32     0.03    5.41   1.01   0.53

我們先列舉一下各個效能指標的簡單說明。

rrqm/s
每秒進行merge的讀運算元目。
wrqm/s
每秒進行merge的寫運算元目。
r/s
每秒完成的讀I/O裝置次數。
w/s
每秒完成的寫I/O裝置次數。
rsec/s
每秒讀扇區數。
wsec/s
每秒寫扇區數。
rkB/s
每秒讀K位元組數。
wkB/s
每秒寫K位元組數。
avgrq-sz
平均每次裝置I/O操作的資料大小(扇區)。
avgqu-sz
平均I/O隊列長度。
await
平均每次裝置I/O操作的等待時間(毫秒)。
svctm
平均每次裝置I/O操作的服務時間(毫秒)。
%util
一秒中有百分之多少的時間用於I/O操作,或者說一秒中有多少時間I/O隊列是非空的。

要理解這些效能指標我們先看

IO的執行過程的各個參數


圖的左邊是iostat顯示的各個效能指標,每個效能指標都會顯示在一條虛線之上,這表明這個效能指標是從虛線之上的那個讀寫階段開始計量的,比如說圖中
的w/s從Linux IO scheduler開始穿過硬碟控制器(CCIS/3ware),這就表明w/s統計的是每秒鐘從Linux IO
scheduler通過硬碟控制器的寫IO的數量。


合對讀IO操作的過程做一個說明,在從OS Buffer Cache傳入到OS Kernel(Linux IO
scheduler)的讀IO操作的個數實際上是rrqm/s+r/s,直到讀IO請求到達OS
Kernel層之後,有每秒鐘有rrqm/s個讀IO操作被合并,最終轉送給磁碟控制卡的每秒鐘讀IO的個數為r/w;在進入到作業系統的裝置層
(/dev/sda)之後,計數器開始對IO操作進行計時,最終的計算結果表現是await,這個值就是我們要的IO回應時間了;svctm是在IO操作
進入到磁碟控制卡之後直到磁碟控制卡返回結果所花費的時間,這是一個實際IO操作所花的時間,當await與svctm相差很大的時候,我們就要注意磁碟的IO效能了
;而avgrq-sz是從OS Kernel往下傳遞請求時單個IO的大小,avgqu-sz則是在OS Kernel中IO請求隊列的平均大小。

現在我們可以將iostat輸出結果和我們前面討論的指標掛鈎了。

平均單次IO大小(IO Chunk Size) <=> avgrq-sz

平均IO回應時間(IO Response Time) <=> await

IOPS(IO per Second) <=> r/s + w/s

吞吐率(Throughtput) <=> rkB/s + wkB/s



iostat的應用執行個體觀察IO Scheduler的IO合并(IO Merge)

前面說過IO在執行過程中會被合并以提高效率,下面就結合dd命令和iostat命令看一下。

我們先執行dd命令,設定bs參數值為1k,完整命令如下

dd if=/dev/zero of=test bs=1k count=1024000

同時開啟另外一個終端執行iostat命令,這裡只查看變化那個磁碟的更改,每秒重新整理一次資料,完整命令如下

iostat -x hdc7 1

然後我們可以得到下面的結果

Device:    rrqm/s wrqm/s   r/s   w/s  rsec/s  wsec/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util
hdc7         0.00 9447.00  0.00 776.00    0.00 80616.00     0.00 40308.00   103.89   480.18  805.95   1.29 100.00

avg-cpu:  %user   %nice    %sys %iowait   %idle
           0.50    0.00   56.00   43.50    0.00

Device:    rrqm/s wrqm/s   r/s   w/s  rsec/s  wsec/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util
hdc7         0.00 9534.00  0.00 872.00    0.00 81384.00     0.00 40692.00    93.33   274.56  401.19   1.14  99.00

avg-cpu:  %user   %nice    %sys %iowait   %idle
           2.50    0.00   46.50   14.00   37.00

Device:    rrqm/s wrqm/s   r/s   w/s  rsec/s  wsec/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util
hdc7         0.00 6766.00  1.00 276.00    8.00 58808.00     4.00 29404.00   212.33   197.27  321.66   1.95  54.00

avg-cpu:  %user   %nice    %sys %iowait   %idle
           0.50    0.00    0.50    0.00   99.00


結果中第一組資料中的avgrq-sz,為103.89個扇區,磁碟的每個扇區為512位元組,因此平均IO大小為103.89*512/1024=52k
位元組,遠遠大於我們dd命令時給定的參數1k位元組,也就是說IO在中間被合并了。看巨大的wrqm/s也能得出同樣的結論。



附:在Windows中監視IO效能

本來準備寫一篇windows中監視IO效能的,後來發現好像可寫的內容不多,windows在細節這方面做的不是那麼的好,不過那些基本資料還是有的。


Windows中監視效能基本都用效能監控器了,與IO效能相關的有兩個大類,一個是”LogicalDisk”,另外一個
是”PhysicalDisk”,”LogicalDisk”更多的是用來監視檔案相關的IO效能,而”PhysicalDisk”則是用來監視LUN或
者是磁碟卷,下面就列舉下與前面所列舉的IO效能相關的計數器,具體的自己研究了:

單次IO大小
  • Avg. Disk Bytes/Read
  • Avg. Disk Bytes/Write
IO回應時間
  • Avg. Disk sec/Read
  • Avg. Disk sec/Write
IOPS
  • Disk Reads/sec
  • Disk Writes/sec
  • Disk Transfers/sec
IO吞吐率
  • Disk Bytes/sec
  • Disk Read Bytes/sec
  • Disk Write Bytes/sec

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.