2014-06-27 239 views
11

我正在研究模擬模型,我想確定何時存儲IOPS容量成爲瓶頸(例如,HDD具有〜150 IOPS,而SSD可以具有150,000)。所以我試圖想出一種方法來在一個命令(git)中針對它的一些不同操作(推,拉,合併,克隆)對IOPS進行基準測試。如何衡量Linux中的命令的IOPS?

到目前爲止,我已經找到了像iostat這樣的工具,但是,我不確定如何將報告限制爲單個命令的功能。

我能想出是要確定我的硬盤IOPS容量,使用時間上的實際命令的最好的想法,看到它持續多久,乘上IOPS,而這些都是我的IOPS:

HDD ->150 IOPS 
time df -h 

real 0m0.032s 

150 * .032 = 4.8 IOPS 

但是,這當然是非常愚蠢的,因爲執行的持續時間可能與CPU使用率而不是HDD使用率有關,所以除非當時硬盤使用率爲100%,否則測量這種情況是沒有意義的。

那麼,如何衡量一個命令的IOPS呢?

+1

[This SO question]的可能重複(http://stackoverflow.com/questions/249570/how-can-i-record-what-process-or-kernel-activity-is-using-the-disk- in-gnu-linux)或者[這個服務器故障問題](http://serverfault.com/questions/586774/getting-iops-of-the-processes-on-linux)由於賞金不能標記爲重複 – Appleman1234

+0

你的操作系統是什麼?您是否檢查了[DTrace](http://www.brendangregg.com/dtrace.html),該文件適用於Unix/MacOS X/Solaris或[SystemTap](https://sourceware.org/systemtap/examples/keyword-index .html)哪些可以用於Linux? – VolenD

回答

11

在典型的Linux系統上有多個時間(1)命令;缺省值是一個bash(1)內建,它有點基本。還有/usr/bin/time,你可以通過調用它就可以運行它,或者通過在反斜槓前加上前綴來告訴bash(1)不使用別名和內建函數:\time。 Debian在默認安裝的「時間」包中包含它,Ubuntu可能是相同的,而其他發行版本會非常相似。

以類似的方式調用它的shell內建已經是更詳細和翔實的,儘管也許更不透明的,除非你已經很熟悉這些數字的真正含義:

$ \time df 
[output elided] 
0.00user 0.00system 0:00.01elapsed 66%CPU (0avgtext+0avgdata 864maxresident)k 
0inputs+0outputs (0major+261minor)pagefaults 0swaps 

不過,我會想提請你注意手冊頁列出了-f選項自定義輸出格式,特別是%w格式,計算過程中放棄了它的CPU時間片的I/O次數:

$ \time -f 'ios=%w' du Maildir >/dev/null 
ios=184 
$ \time -f 'ios=%w' du Maildir >/dev/null 
ios=1 

請注意,第一次運行停止了I/O 184次,但第二次運行僅停止了一次。第一個數字是可信的,因爲在我的~/Maildir中有124個目錄:讀取目錄和inode給出的每個目錄大致有兩個IOPS,少一點因爲一些inode可能彼此相鄰並在一個操作中讀取,再加上一些在du(1)二進制文件,共享庫等中再次映射。

由於Linux的磁盤緩存,第二個數字當然更低。所以最後一塊是刷新緩存。同步(1)是一種熟悉的命令,它將髒寫入刷新到磁盤,但不刷新讀取高速緩存。你可以寫3到/proc/sys/vm/drop_caches來刷新那個。 (其他值也是偶爾有用,但你想在這裏3)作爲非root用戶,要做到這一點最簡單的方法是:

echo 3 | sudo tee /proc/sys/vm/drop_caches 

相結合,與/usr/bin/time應該允許你建立你所需要的腳本以標杆命令你感興趣

作爲未成年人一邊,三通(1)使用,因爲這是行不通的。

sudo echo 3 >/proc/sys/vm/drop_caches 

的原因是什麼?儘管echo(1)以root用戶身份運行,但重定向是您的普通用戶帳戶,它不具有對drop_caches的寫入權限。 tee(1)以root身份有效地進行重定向。

+0

TIL''\ time''和緩存清除。謝謝 – xtreak

4

您可以使用pidstat:
pidstat -d 2
更具體地說pidstat -d 2 | grep COMMANDpidstat -C COMMANDNAME -d 2

pidstat命令用於監視當前正在由Linux內核管理的各個任務。如果使用-p ALL選項,它會爲使用選項-p選擇的每個任務寫入標準輸出活動,或寫入由Linux內核管理的每個任務。不選擇任何任務相當於指定-p ALL,但只有活動任務(具有非零統計值的任務)將出現在報告中。 pidstat命令也可用於監視所選任務的子進程。

-C commDisplay只顯示其命令名包含stringcomm的任務。該字符串可以是正則表達式。

+0

這聽起來很有趣,所以我在我的Ubuntu 13.04盒子上試了一下,得到了'command not found:pidstat'。事實證明,它不是默認包含的,所以我必須'sudo apt-get install sysstat'。 (只是提及保存其他路人一些谷歌搜索和/或'apt-file search'ing ...) – evadeflow

8

iotop命令收集有關Linux上的進程的I/O使用信息。默認情況下,它是一個交互式命令,但您可以使用-b/--batch以批處理模式運行它。另外,您可以使用-p/--pid的進程列表。因此,可以監視git命令與活動:

$ sudo iotop -p $(pidof git) -b 

您可以-d/--delay更改延遲。