在Linux中監視IO性能



dd命令

dd實際上是工做於比較低層的一個數據拷貝和轉換的*nix平臺的工具,可是由於dd命令支持*nix平臺的一些特殊設備,所以咱們能夠利用dd命令的這個特性來簡單的測試磁盤的性能。html

先說一下兩個相關的特殊設備linux

/dev/null
空設備,一般用做輸出設備,這個是*nix系統上面的黑洞,全部送到這個空設備上的內容都會憑空消失。
/dev/zero
空字符,一般用做輸入,從/dev/zero中讀取時,它能源源不斷的提供空字符(ASCII NUL, 0×00)出來,要多少有多少。

因而就有了下面的用法:ios

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

這個命令時往磁盤的文件/tmp/foo中寫入一個4G大小的文件,固然文件的內容所有是空字符了,同時用/usr/bin/time來對命令的執行進行計時,命令中的bs指的是寫入文件時的塊大小,其實就至關於Oracle中的block大小了,count是寫入的塊數。採起這種方法來寫入數據時只是測試的連續讀磁盤的性能,而不是隨機讀的性能,不能採起這種方法檢查一個機器的IOPS的,只能檢查磁盤的吞吐率。
windows

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

上面的命令是從/tmp/foo文件中讀取數據,而後扔掉,這裏bs用的是讀取時塊的大小。和上面寫入的命令同樣,這樣測試的僅僅是最大的讀取性能,而不是隨機IO的性能。ide

  • 還能讀寫同時測試
/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隊列是非空的。

要理解這些性能指標咱們先看下圖spa

IO的執行過程的各個參數
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
相關文章
相關標籤/搜索