How do I test IO performance in Linux?
8 回答
IO 和文件系统基准测试是一个复杂的话题。没有单一的基准测试工具适用于所有情况。以下是有关不同基准测试工具的简要概述:
块存储:
- IOMeter - 高度可定制并允许协调多个客户端。需要一台 Windows PC 用于协调应用程序。由英特尔开发。在 Linux 上,由于提交方法不是最佳的,因此在较旧的版本(至少 2006.07.27 和更早版本)中取最大速率并加点盐。
文件系统(合成):
- FFSB - 灵活的文件系统基准。非常简洁的 Linux 基准测试。良好的工作负载定制。NFS 基准测试 (net-ffsb) 有点不健全。
- Filebench - 非常强大,但最初是为 Solaris 开发的。Linux 支持不好。
- sysbench - 主要是一个数据库基准测试工具,也是基本的文件系统基准测试工具。
- bonnie - 似乎已经过时了。
- bonnie++ - bonnie 的 C++ 端口. 容易,但似乎不是很可定制。
文件系统(工作负载):
- Postmark - 模拟邮件服务器的 IO 行为。太小而不能强调好的 IO 系统。
石溪大学和 IBM 沃森实验室在“存储事务”中发表了一篇关于文件系统基准测试的强烈推荐期刊论文,他们在其中介绍了不同的基准及其优缺点:文件系统和存储基准测试的九年研究。文章明确指出,大多数基准测试的结果至少值得怀疑。
注意:问题编程是否相关?也许不是,但也许是。我花了很多时间对我开发的系统的 IO 性能进行基准测试。至少对我来说,关于如何对这些东西进行基准测试的问题与编程高度相关。请:不要关闭从您的角度来看与开发/编程无关的所有问题。其他开发者的观点可能不同。
tool: fio
link: http://freshmeat.net/projects/fio/
test physical disk IO:
./fio examples/disk-zone-profile
set parameter: sequential r/w: rw=read or rw=write random r/w: rw=randread or rw=randwrite
如果您需要一种无需安装任何东西的快捷方式。这是我用于写入速度测试的方法:
dd if=/dev/zero of=test bs=64k count=16k conv=fdatasync
输出是这样的
root@rackserver:/# dd if=/dev/zero of=test bs=64k count=16k conv=fdatasync
16384+0 records in
16384+0 records out
1073741824 bytes (1.1 GB) copied, 4.86922 s, 221 MB/s
另外: 在此之后删除测试文件以恢复使用的额外空间
一些解释:
bs = block size
count = the no of blocks to be written
调整这些参数以根据您的服务器规格更改写入文件的大小以及您希望花费写入的时间量。
gtsouk 已经建议的读取速度,可以通过使用 /dev/null 作为输出来检查。
dd if=/dev/sda of=/dev/null
让它运行几分钟,然后用 ctrl+C 停止它。它将打印驱动器/控制器的读取传输速度。这是您可以从驱动器中获得的最大读取速度。
sysbench
See http://www.howtoforge.com/how-to-benchmark-your-system-cpu-file-io-mysql-with-sysbench
Example
sysbench --test=fileio --file-total-size=150G prepare
sysbench --test=fileio --file-total-size=150G --file-test-mode=rndrw --init-rng=on --max-time=300 --max-requests=0 run
It can also test cpu, memory, threads, and database server performance,
It's awesome.
Or testing software written in java: http://www.dacapobench.org/
您需要指定要测试的内容,否则基准只会误导。您需要选择优化 IO 性能的不同方面,并使用不同的参数。
您的系统参数:
- 存储设备:HDD、SSD(哪个?)、Raid(哪个?)
- 文件系统、块大小、日志模式
- 文件缓存、脏阈值、内存量
- IO 调度程序,它的可调参数
- CPU 数量
- 内核版本
您的测试参数:
- 读写性能?
- 顺序的还是随机的?
- 1个线程还是多个?
- 请求的大小
- 优化吞吐量或请求延迟?
有一个很棒的程序可以在 Unix 上测试块存储 IO,称为 IORATE。您可以在 iorate.org 上获得一份副本。
它可以生成复杂的混合 IO,包括用于分层存储测试的重用(命中)和热区。
看看 IOzone: http: //www.iozone.org/
如果您想阅读说明 HPC 集群实际使用情况的白皮书,请参阅此 pdf 第 36 页:http: //i.dell.com/sites/content/business/solutions/hpcc/en/Documents/ Dell-NSS-NFS-Storage-solution-final.pdf