Linux实用程序loggingIO统计信息(随机/顺序,块大小,读/写比率)

作为configuration我们的新服务器的一部分(见其他SF ),我想找出以下内容:

  • 随机到顺序读写的比率
  • 一次读取和写入的数据量(以直方graphics式表示)

我已经可以使用iostat&dstat来查看每个操作和整个数据级别的读/写了,但是我想知道更多。 例如,我想知道,我们大多是随机的16kb读取,或者随机写入的很多顺序的64kb读取。

我们(当前)在Ubuntu 10.04 VM上。

是否有一个我可以运行的实用程序将为我logging和呈现这些信息?

我喜欢用collectl工具来达到这个目的。 我在另一个答案中提到了这个问题 ,有人正在寻找特定的I / O统计输出来进行重放。 您应该能够根据您的特定需求量身定制输出。 有了Ubuntu,这应该可以通过正常的仓库。 需要注意的是,你不会看到你正在寻找的百分比。

nmon也是一个不错的工具,可以在简单的界面中提供大部分的信息。

如果你已经熟悉iostat ,你目前使用的是什么标志?

如果你是硬核,并正在分析一个特定的应用程序, SystemTap可能是一个选项,但我不知道这是否是正确的匹配。 这可能比需要更多的工作。

从Solaris Dtrace(在ZFS系统 – 下面的NexentaStor屏幕截图)上获取这些信息是相当容易的,但是在Linux方面需要稍微挖掘一下…所以你可以考虑Dtrace for Linux 。

在这里输入图像说明

我从这篇文章的方式,使用SystemTap工具。

安装systemtap。 对于Debian / Ubuntu:

 apt-get install systemtap linux-image-$(uname -r)-dbg linux-headers-$(uname -r) 

创buildsystemtap脚本,另存为blockio.stp

 global writes global reads probe ioblock.request { if(bio_rw_num(rw) == BIO_WRITE) writes[devname] <<< size if(bio_rw_num(rw) == BIO_READ) reads[devname] <<< size } probe end { printf("\n") # foreach([devname] in writes-) { # printf("Device: %s\n", devname) # println(@hist_log(writes[devname])) # } printf("WRITE\n") println(@hist_log(writes["sda1"])) printf("READ\n") println(@hist_log(reads["sda1"])) } 

将sda1replace为您的驱动器,或使用foreach方法(如原始文章)显示所有驱动器的统计信息。

开始监控。 以root身份运行

 stap -v blockio.stp 

当你想完成监控时,用Ctrl + C停止它。 输出会像

 Pass 1: parsed user script and 95 library script(s) using 84064virt/25528res/2408shr/23916data kb, in 160usr/0sys/164real ms. Pass 2: analyzed script: 3 probe(s), 21 function(s), 2 embed(s), 4 global(s) using 297648virt/205248res/86464shr/119268data kb, in 1750usr/60sys/1815real ms. Pass 3: using cached /root/.systemtap/cache/ea/stap_ea33aaf95086fa562bb720d36fca7504_12821.c Pass 4: using cached /root/.systemtap/cache/ea/stap_ea33aaf95086fa562bb720d36fca7504_12821.ko Pass 5: starting run. ^C WRITE value |-------------------------------------------------- count 0 |@@@@@@@@@@@@@@@@@@@@@@@@ 191952 1 | 0 2 | 0 ~ 1024 | 0 2048 | 0 4096 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 395272 8192 |@@ 16273 16384 |@ 12799 32768 | 4908 65536 | 4170 131072 | 2159 262144 | 6546 524288 | 4587 1048576 | 0 2097152 | 0 READ value |-------------------------------------------------- count 128 | 0 256 | 0 512 | 2 1024 | 0 2048 | 0 4096 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 38229 8192 |@@ 1550 16384 |@@@ 2525 32768 |@@ 1692 65536 |@@ 1693 131072 |@@@@@@@@@@@@@@@@@@ 14455 262144 | 217 524288 | 0 1048576 | 0 Pass 5: run completed in 140usr/720sys/3662349real ms. 

在OSX上的iopattern做随机%和连续百分比,和OSX上的iopending显示直方图,但我不知道是什么。 这些都是Dtrace脚本,所以可能不会对你有所帮助。