Linux如何查看與測試磁盤IO性能

1. 查看磁盤 IO 性能 

1.1 top 命令

top 命令經過查看 CPU 的 wa% 值來判斷當前磁盤 IO 性能,若是這個數值過大,極可能是磁盤 IO 過高了,固然也多是其餘緣由,例如網絡 IO 太高等。html

top命令的其餘參數表明的含義詳見top命令詳解
linux

1.2 sar 命令

sar 命令是分析系統瓶頸的神器,能夠用來查看 CPU 、內存、磁盤、網絡等性能。ios

sar 命令查看當前磁盤性能的命令爲:緩存

[root@server-68.2.stage.polex.io var ]$ sar -d -p 1 2
Linux 3.10.0-693.5.2.el7.x86_64 (server-68)     03/11/2019     _x86_64_    (64 CPU)

02:28:54 PM       DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
02:28:55 PM       sda      1.00      0.00      3.00      3.00      0.01      9.00      9.00      0.90
02:28:55 PM       sdb      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
02:28:55 PM polex_pv-rootvol      1.00      0.00      3.00      3.00      0.01      9.00      9.00      0.90
02:28:55 PM polex_pv-varvol      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
02:28:55 PM polex_pv-homevol      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

02:28:55 PM       DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
02:28:56 PM       sda      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
02:28:56 PM       sdb      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
02:28:56 PM polex_pv-rootvol      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
02:28:56 PM polex_pv-varvol      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
02:28:56 PM polex_pv-homevol      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

Average:          DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
Average:          sda      0.50      0.00      1.50      3.00      0.00      9.00      9.00      0.45
Average:          sdb      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
Average:    polex_pv-rootvol      0.50      0.00      1.50      3.00      0.00      9.00      9.00      0.45
Average:    polex_pv-varvol      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
Average:    polex_pv-homevol      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

其中, 「-d」參數表明查看磁盤性能,「-p」參數表明將 dev 設備按照 sda,sdb……名稱顯示,「1」表明每隔1s採起一次數值,「2」表明總共採起2次數值。網絡

  • await:平均每次設備 I/O 操做的等待時間(以毫秒爲單位)。 oop

  • svctm:平均每次設備 I/O 操做的服務時間(以毫秒爲單位)。性能

  • %util:一秒中有百分之幾的時間用於 I/O 操做。  測試

對於磁盤 IO 性能,通常有以下評判標準:優化

正常狀況下 svctm 應該是小於 await 值的,而 svctm 的大小和磁盤性能有關,CPU 、內存的負荷也會對 svctm 值形成影響,過多的請求也會間接的致使 svctm 值的增長。spa

await 值的大小通常取決與 svctm 的值和 I/O 隊列長度以 及I/O 請求模式,若是 svctm 的值與 await 很接近,表示幾乎沒有 I/O 等待,磁盤性能很好,若是 await 的值遠高於 svctm 的值,則表示 I/O 隊列等待太長,系統上運行的應用程序將變慢,此時能夠經過更換更快的硬盤來解決問題。

%util 項的值也是衡量磁盤 I/O 的一個重要指標,若是 %util 接近 100% ,表示磁盤產生的 I/O 請求太多,I/O 系統已經滿負荷的在工做,該磁盤可能存在瓶頸。長期下去,勢必影響系統的性能,能夠經過優化程序或者經過更換更高、更快的磁盤來解決此問題。

默認狀況下,sar從最近的0點0分開始顯示數據;若是想繼續查看一天前的報告;能夠查看保存在/var/log/sa/下的sar日誌:

[root@server-68.2.stage.polex.io var ]$ sar -d -p -f  /var/log/sa/sa11  | more
Linux 3.10.0-693.5.2.el7.x86_64 (server-68)     03/11/2019     _x86_64_    (64 CPU) 09:50:01 AM DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util 10:00:01 AM sda 0.51 0.00 9.06 17.82 0.02 37.65 14.65 0.74 10:00:01 AM sdb 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 10:00:01 AM polex_pv-rootvol 0.22 0.00 2.50 11.56 0.01 37.44 14.10 0.31 10:00:01 AM polex_pv-varvol 0.30 0.00 6.55 21.97 0.01 38.55 14.73 0.44 10:00:01 AM polex_pv-homevol 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 10:10:01 AM sda 0.79 3.45 13.18 21.06 0.04 51.81 11.03 0.87 10:10:01 AM sdb 0.04 3.45 0.00 86.33 0.00 0.25 0.25 0.00 10:10:01 AM polex_pv-rootvol 0.26 0.00 3.08 11.85 0.01 50.21 17.88 0.46 10:10:01 AM polex_pv-varvol 0.54 3.45 10.10 24.95 0.03 52.58 7.49 0.41 10:10:01 AM polex_pv-homevol 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 10:20:01 AM sda 0.65 0.00 10.43 16.11 0.03 38.67 10.99 0.71 10:20:01 AM sdb 0.04 3.46 0.00 86.33 0.00 0.08 0.08 0.00

1.3 iostat 命令

iostat主要用於監控系統設備的 IO 負載狀況,iostat 首次運行時顯示自系統啓動開始的各項統計信息,以後運行 iostat 將顯示自上次運行該命令之後的統計信息。用戶能夠經過指定統計的次數和時間來得到所需的統計信息。

[root@server-68.2.stage.polex.io var ]$ iostat -dxk 1 2
Linux 3.10.0-693.5.2.el7.x86_64 (server-68)     03/11/2019     _x86_64_    (64 CPU)

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda               0.00     0.06    0.32    2.08     1.44    72.78    61.81     0.14   59.32    0.51   68.37   5.68   1.36
sdb               0.00     0.00    0.03    0.00     1.15     0.00    86.32     0.00    0.17    0.17    0.00   0.16   0.00
dm-0              0.00     0.00    0.00    0.24     0.02     1.56    13.22     0.01   44.55    6.36   44.71  13.25   0.32
dm-1              0.00     0.00    0.32    1.90     1.32    71.22    65.30     0.14   62.43    0.49   72.79   4.75   1.06
dm-2              0.00     0.00    0.00    0.00     0.00     0.00    26.79     0.00   28.06    4.68   38.98   5.18   0.00

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda               0.00     0.00    0.00    3.00     0.00    16.00    10.67     0.26   86.33    0.00   86.33  42.33  12.70
sdb               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00
dm-0              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00
dm-1              0.00     0.00    0.00    3.00     0.00    16.00    10.67     0.26   86.33    0.00   86.33  42.33  12.70
dm-2              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00

該命令的結果與上面  sar -d -p 1  命令相似,實際使用中主要仍是看 await svctm %util 參數。

1.4 vmstat 命令

 vmstat 命令使用方法很簡單:

[root@server-68.2.stage.polex.io var ]$ vmstat  2
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 3  0      0 93221488   4176 69117136    0    0     0     1    0    0  4  1 94  0  0
 2  0      0 93226048   4176 69117128    0    0     0     0 33326 36671 18  2 80  0  0
 1  0      0 93218776   4176 69117104    0    0     0     9 26225 21588 18  2 80  0  0
 1  0      0 93226072   4176 69117072    0    0     0     0 13271 25857  5  0 94  0  0
 0  0      0 93223984   4176 69117040    0    0     0     5 34637 24444 20  2 78  0  0
11  0      0 93219248   4176 69117184    0    0     0     0 30736 20671  8  2 90  0  0

 

輸出結果中,bi bo 能夠表示磁盤當前性能:

  • bi  塊設備每秒接收的塊數量,這裏的塊設備是指系統上全部的磁盤和其餘塊設備,默認塊大小是 1024 byte 。

  • bo 塊設備每秒發送的塊數量,例如咱們讀取文件,bo 就要大於0。bi 和 bo 通常都要接近 0,否則就是 IO 過於頻繁,須要調整。

2. 測試磁盤 IO 性能

2.1 hdparm 命令

hdparm 命令提供了一個命令行的接口用於讀取和設置IDE或SCSI硬盤參數,注意該命令只能測試磁盤的讀取速率。

例如,測試 sda 磁盤的讀取速率:

[root@server-68.2.stage.polex.io var ]$ hdparm -Tt /dev/polex_pv/varvol

/dev/polex_pv/varvol:
 Timing cached reads:   15588 MB in  2.00 seconds = 7803.05 MB/sec
 Timing buffered disk reads: 1128 MB in  3.01 seconds = 374.90 MB/sec

從測試結果看出,帶有緩存的讀取速率爲:7803.05MB/s ,磁盤的實際讀取速率爲:374.90 MB/s 。

2.2 dd 命令

Linux dd 命令用於讀取、轉換並輸出數據。dd 可從標準輸入或文件中讀取數據,根據指定的格式來轉換數據,再輸出到文件、設備或標準輸出。

咱們能夠利用 dd 命令的複製功能,測試某個磁盤的 IO 性能,需要注意的是 dd 命令只能大體測出磁盤的 IO 性能,不是很是準確

測試寫性能命令:

[root@server-68.2.stage.polex.io var ]$ time dd if=/dev/zero of=test.file bs=1G count=2 oflag=direct
2+0 records in
2+0 records out
2147483648 bytes (2.1 GB) copied, 13.5487 s, 159 MB/s

real    0m13.556s
user    0m0.000s
sys    0m0.888s 

能夠看到,該分區磁盤寫入速率爲 159M/s,其中:

  • /dev/zero 僞設備,會產生空字符流,對它不會產生 IO 。
  • if 參數用來指定 dd 命令讀取的文件。
  • of 參數用來指定 dd 命令寫入的文件。
  • bs 參數表明每次寫入的塊的大小。
  • count 參數用來指定寫入的塊的個數。
  • offlag=direc 參數測試 IO 時必須指定,表明直接寫如磁盤,不使用 cache 。

測試讀性能命令:

[root@server-68.2.stage.polex.io var ]$ dd if=test.file of=/dev/null  iflag=direct
4194304+0 records in
4194304+0 records out
2147483648 bytes (2.1 GB) copied, 4.87976 s, 440 MB/s

能夠看到,該分區的讀取速率爲 440MB/s

2.3 fio 命令

fio 命令是專門測試 iops 的命令,比 dd 命令準確,fio 命令的參數不少,這裏舉幾個例子供你們參考:

順序讀:

fio -filename=/var/test.file -direct=1 -iodepth 1 -thread -rw=read -ioengine=psync -bs=16k -size=2G -numjobs=10 -runtime=60 -group_reporting -name=test_r

隨機寫:

fio -filename=/var/test.file -direct=1 -iodepth 1 -thread -rw=randwrite -ioengine=psync -bs=16k -size=2G -numjobs=10 -runtime=60 -group_reporting -name=test_randw

順序寫:

fio -filename=/var/test.file -direct=1 -iodepth 1 -thread -rw=write -ioengine=psync -bs=16k -size=2G -numjobs=10 -runtime=60 -group_reporting -name=test_w

混合隨機讀寫:

fio -filename=/var/test.file -direct=1 -iodepth 1 -thread -rw=randrw -rwmixread=70 -ioengine=psync -bs=16k -size=2G -numjobs=10 -runtime=60 -group_reporting -name=test_r_w -ioscheduler=noop

 

參考連接:

https://elf8848.iteye.com/blog/2168876

https://linuxtools-rst.readthedocs.io/zh_CN/latest/tool/sar.html

http://blog.sina.com.cn/s/blog_62b832910102w3zt.html

https://www.cnblogs.com/ggjucheng/archive/2013/01/13/2858810.html

https://linux.cn/article-6104-1.html

http://www.runoob.com/linux/linux-comm-hdparm.html

相關文章
相關標籤/搜索