今天架了个raid0,结果就想测试一下io性能了,因为系统是freebsd,所以考虑使用的io测试工具就是iozone和blogbench。
先看iozone:
命令:
其他详细的说明到处都是,这里我翻译一些测试内容的解释,从官方文档那里弄出来的:
- write:指测试创建并写入一个新文件,因为创建一个新文件不仅包括文件的数据,还要包括在文件系统上追踪到文件所在的额外开销信息,这类信息被成为metadata,通常包括目录信息,空间分配,以及其他的一些内容,因此这一项的性能会比rewrite的性能弱
- rewrite:测试写入一个已存在的文件的性能,由于不需要动那个metadata,所以,这项的性能比write会高
- read:测试读取一个已存在文件的速度
- reread:测试读取一个最近读取过的文件,由于操作系统会缓存,所以数值会比read高
- Random read:测试随机从一个文件中的不同位置的访问的性能,这项会被系统的catch,磁盘数量,访问延迟等因素影响
- Random write:同上,读换成写而已
- Random Mix:测试随机的从一个文件的不同位置进行读写操作,影响因素同上,这个测试只能在throughput模式下跑。每个线程/进程只会进行读取或者写入,而非同时读写。读写分布于进程间的轮转调度之中,所以这个操作需要多个线程/进程
- Backwards Read:测试逆序读取文件,这种方式常被程序使用,MSC Nastran是一个这种方式的范例,通常它的文件也是gb和tb级别的,虽然很多现有的操作系统优化了顺序读取文件的性能,但是很少有系统优化逆序读取文件的性能
- Record Rewrite:测试对文件的一个特定的“热点”进行写入和rewrite操作,热点是一个比较有趣的现象,当热点小到和cpu的数据缓存差不多的时候会异常的快。但是当大于cpu的数据缓存同时小于TLB的时候速度会在另一个数量级,这个现象在热点在操作系统缓存左右的时候也会有同样的现象出现。
- Strided Read:测试按照某种步进的方式读取文件的性能,比如读4k然后跳过200k再读4k再一直重复这种。这样的行为在文件保存了某些数据结构的时候是常见的。这个表现通常没有被操作系统优化,而且也常常是程序的性能瓶颈所在。
- fwrite:测试使用库函数fwrite()的写入性能,这个库函数是操作系统中常用的,而且使用在用户地址空间内的buffer。
- frewrit:类似上一个,区别同write和rewrite
- fread:
- freread:类似fwrite,区别同read和reread
除了上面的几项之外,还有一些特别的测试指标:
- mmap:许多操作系统支持使用mmap()把文件映射到用户的地址空间,这个映射让对该内存地址空间的操作直接反映在磁盘上。还有一些详细的区别,现在没空,改天翻译:
This is handy if an application wishes to treat files as chunks of memory. An example
would be to have an array in memory that is also being maintained as a file in the files system.
The semantics of mmap files is somewhat different than normal files. If a store to the memory location is
done then no actual file I/O may occur immediately. The use of the msyc() with the flags MS_SYNC, and
MS_ASYNC control the coherency of the memory and the file. A call to msync(