如何衡量Linux中的命令的IOPS?

问题描述:

我正在研究模拟模型,我想确定何时存储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://*.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

在典型的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

您可以使用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

iotop命令收集有关Linux上的进程的I/O使用信息。默认情况下,它是一个交互式命令,但您可以使用-b/--batch以批处理模式运行它。另外,您可以使用-p/--pid的进程列表。因此,可以监视git命令与活动:

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

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