![用于记录 IO 统计数据(随机/顺序、块大小、读/写比率)的 Linux 实用程序](https://linux22.com/image/595394/%E7%94%A8%E4%BA%8E%E8%AE%B0%E5%BD%95%20IO%20%E7%BB%9F%E8%AE%A1%E6%95%B0%E6%8D%AE%EF%BC%88%E9%9A%8F%E6%9C%BA%2F%E9%A1%BA%E5%BA%8F%E3%80%81%E5%9D%97%E5%A4%A7%E5%B0%8F%E3%80%81%E8%AF%BB%2F%E5%86%99%E6%AF%94%E7%8E%87%EF%BC%89%E7%9A%84%20Linux%20%E5%AE%9E%E7%94%A8%E7%A8%8B%E5%BA%8F.png)
作为配置新服务器的一部分(请参阅其他 SF)我想了解以下内容:
- 随机与顺序读写的比率
- 一次读取和写入的数据量(首选直方图形式)
我已经可以使用 iostat 和 dstat 计算出每个操作和整体数据级别的读取/写入情况,但我希望了解更多信息。例如,我想知道我们主要是随机 16kb 读取,还是大量连续 64kb 读取和随机写入。
我们(目前)使用的是 Ubuntu 10.04 VM。
是否有一个可以运行的实用程序可以记录并显示这些信息?
答案1
我喜欢使用collectl 实用程序为了这个目的。我提到过这在另一个答案中对于那些寻找特定 I/O 统计输出进行重放的人来说。您应该能够根据您的特定需求定制输出。对于 Ubuntu,这应该可以通过常规存储库获得。需要注意的是,您不会看到您正在寻找的百分比。
纳米也是一个很好的工具,它可以在一个简单的界面中提供您所需的大部分信息。
如果您已经熟悉iostat
,那么您目前正在使用哪些标志?
如果你是一个硬核程序员,并且正在分析某个特定的应用程序,系统水龙头可能是一个选择,但我不确定它是否合适。可能需要做比需要的更多的工作。
从 Solaris Dtrace 获取此信息非常容易(在 ZFS 系统上 -NexentaStor下面的截图),但必须在 Linux 方面挖掘一点……所以你可以考虑用于 Linux 的 Dtrace。
答案2
首先,安装 systemtap。对于 Debian/Ubuntu:
apt-get install systemtap linux-image-$(uname -r)-dbg linux-headers-$(uname -r)
创建systemtap脚本,保存为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"]))
}
将 sda1 替换为您的驱动器或使用 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.
答案3
iopattern
在 OSX 上执行随机百分比和连续百分比,iopending
在 OSX 上显示直方图,但我不确定是什么。不过,这些是 Dtrace 脚本,因此可能对您没有太大帮助。