1. 输出格式
-R Generate Excel report. Iozone will generate an Excel compatible report to
standard out. This file may be imported with Microsoft Excel (space delimited)
and used to create a graph of the filesystem performance. Note: The 3D graphs
are column oriented. You will need to select this when graphing as the default
in Excel is row oriented data.
-b filename
Used to specify a filename that will be used for output of an Excel compatible
file that contains the results.
-M Iozone will call uname() and will put the string in the output file.
2. 基本参数
-a Used to select full automatic mode. Produces output that covers all tested file
operations for record sizes of 4k to 16M for file sizes of 64k to 512M.
-i # Used to specify which tests to run. (0=write/rewrite, 1=read/re-read, 2=random-
read/write, 3=Read-backwards, 4=Re-write-record, 5=stride-read, 6=fwrite/re-
fwrite, 7=fread/Re-fread, 8=mixed workload, 9=pwrite/Re-pwrite, 10=pread/Re-
pread, 11=pwritev/Re-pwritev, 12=preadv/Re-preadv). One will always need to
specify 0 so that any of the following tests will have a file to measure.
-i # -i # -i # is also supported so that one may select more than one test.
-s # Used to specify the size, in Kbytes, of the file to test. One may also specify
-s #k (size in Kbytes) or -s #m (size in Mbytes) or -s #g (size in Gbytes).
-g # Set maximum file size (in Kbytes) for auto mode. One may also specify -g #k
(size in Kbytes) or -g #m (size in Mbytes) or -g #g (size in Gbytes). See -n
for minimum file size.
-n # Set minimum file size (in Kbytes) for auto mode. One may also specify -n #k
(size in Kbytes) or -n #m (size in Mbytes) or -n #g (size in Gbytes). See -g
for maximum file size.
|
-r # Used to specify the record size , in Kbytes, to test. One may also specify -r #k
(size in Kbytes) or -r #m (size in Mbytes) or -r #g (size in Gbytes).
-q # Set maximum record size (in Kbytes) for auto mode. One may also specify -q #k
(size in Kbytes) or -q #m (size in Mbytes) or -q #g (size in Gbytes). See -y
for minimum record size.
-y # Set minimum record size (in Kbytes) for auto mode. One may also specify -y #k
(size in Kbytes) or -y #m (size in Mbytes) or -y #g (size in Gbytes). See -q
for maximum record size.
|
-f filename
Used to specify the filename for the temporary file under test. This is useful
when the unmount option is used. When testing with unmount between tests it is
necessary for the temporary file under test to be in a directory that can be
unmounted. It is not possible to unmount the current working directory as the
process Iozone is running in this directory.
-F filename filename filename ?
Specify each of the temporary file names to be used in the
throughput testing.
The number of names should be equal to the number of processes or threads that
are specified.
-w Do not unlink temporary files when finished using them.
3. 文件读写方法(read/write, mmap, aio)
-B Use mmap() files. This causes all of the temporary files being measured to be
created and accessed with the mmap() interface. Some applications prefer to
treat files as arrays of memory. These applications mmap() the file and then
just access the array with loads and stores to perform file I/O.
-H # Use POSIX async I/O with # async operations. Iozone will use POSIX async I/O
with a bcopy from the async buffers back into the applications buffer. Some
versions of MSC NASTRAN perform I/O this way. This technique is used by appli‐
cations so that the async I/O may be performed in a library and requires no
changes to the applications internal model.
-k # Use POSIX async I/O (no bcopy) with # async operations. Iozone will use POSIX
async I/O and
will not perform any extra bcopys . The buffers used by Iozone
will be handed to the async I/O system call directly.
-Z Enable mixing of mmap I/O and file I/O.
4. 文件打开参数 (direct_io, O_SYNC, ....) cache /buffer 相关
-D Use msync(MS_ASYNC) on mmap files. This tells the operating system that all the
data in the mmap space needs to be written to disk asynchronously.
-G Use msync(MS_SYNC) on mmap files. This tells the operating system that all the
data in the mmap space needs to be written to disk synchronously.
-I Use DIRECT IO if possible for all file operations. Tells the filesystem that
all operations to the file are to bypass the buffer cache and go directly to
disk. (not available on all platforms)
-o Writes are synchronously written to disk. (O_SYNC). Iozone will open the files
with the O_SYNC flag. This forces all writes to the file to go completely to
disk before returning to the benchmark.
-p This purges the processor cache before each file operation. Iozone will allo‐
cate another internal buffer that is aligned to the same processor cache bound‐
ary and is of a size that matches the processor cache. It will zero fill this
alternate buffer before beginning each test. This will purge the processor
cache and allow one to see the memory subsystem without the acceleration due to
the processor cache.
5. 读写时间计算
-c Include close() in the timing calculations. This is useful only if you suspect
that close() is broken in the operating system currently under test. It can be
useful for NFS Version 3 testing as well to help identify if the nfs3_commit is
working well.
-e Include flush (fsync,fflush) in the timing calculations
6. throughput模式 (多线程)
-t # Run Iozone in a throughput mode. This option allows the user to specify how
many threads or processes to have active during the measurement.
-l # Set the lower limit on number of processes to run. When running throughput
tests this option allows the user to specify the least number of processes or
threads to start. This option should be used in conjunction with the -u option.
-u # Set the upper limit on number of processes to run. When running throughput
tests this option allows the user to specify the greatest number of processes
or threads to start. This option should be used in conjunction with the -l op‐
tion.
-T Use POSIX pthreads for throughput tests. Available on platforms that have POSIX
threads.
-C Show bytes transferred by each child in
throughput testing. Useful if your op‐
erating system has any starvation problems in file I/O or in process manage‐
ment.
-d # Microsecond delay out of barrier. During the
throughput tests all threads or
processes are forced to a barrier before beginning the test. Normally, all of
the threads or processes are released at the same moment. This option allows
one to delay a specified time in microseconds between releasing each of the
processes or threads.
7. 其他
-h Displays help screen.
-v Display the version of Iozone.
-j # Set stride of file accesses to (# * record size). The stride read test will
read records at this stride.
-跨步
-J # Millisecond delay before each I/O operation. This simulates the cpu compute cy‐
cle of an application that precedes an I/O operation. One may also use -X or
-Y to control the compute cycle on a per I/O operation basis.
-K Inject some random accesses in the testing.
-L # Set processor cache line size to value (in bytes). Tells Iozone the processor
cache line size. This is used internally to help speed up the test.
-m Tells Iozone to use multiple buffers internally. Some applications read into a
single buffer over and over. Others have an array of buffers. This option al‐
lows both types of applications to be simulated. Iozone´s default behavior is
to re-use internal buffers. This option allows one to override the default and
to use multiple internal buffers.
-N Report results in microseconds per operation.
-O Give results in operations per second.
-V # Specify a pattern that is to be written to the temporary file and validated for
accuracy in each of the read tests.
-W Lock file when reading or writing.
-Q Create offset/latency files. Iozone will create latency versus offset data
files that can be imported with a graphics package and plotted. This is useful
for finding if certain offsets have very high latencies. Such as the point
where UFS will allocate its first indirect block. One can see from the data
the impacts of the extent allocations for extent based filesystems with this
option.
-X filename
Used to specify a filename that will be used for the write telemetry informa‐
tion. The file contains lines with offset, size, delay_in_milliseconds. Each of
these lines are used to perform an I/O operation. This is used when an appli‐
cation's specific I/O operations are known, and one wishes to benchmark the
system with this specific application file behavior.
-Y filename
Used to specify a filename that will be used for the read telemetry informa‐
tion. The file contains lines with offset, size, delay_in_milliseconds. Each of
these lines are used to perform an I/O operation. This is used when an appli‐
cation's specific I/O operations are known, and one wishes to benchmark the
system with this specific application file behavior.
|
8. 无用
-A This version of automatic mode provides more coverage but consumes a bunch of
time. The -a option will automatically stop using transfer sizes less than 64k
once the file size is 32M or larger. This saves time. The -A option tells Io‐
zone that you are willing to wait and want dense coverage for small transfers
even when the file size is very large. NOTE: This option is
deprecated
in Io‐
zone version 3.61. Use -az -i 0 -i 1 instead.
-E Used to select the extension tests. Only available on some platforms. Uses
pread interfaces.
-P # Bind processes/threads to processors, starting with this cpu #. Only available
on some platforms. The first sub process or thread will begin on the specified
processor. Future processes or threads will be placed on the next processor.
Once the total number of cpus is exceeded then future processes or threads will
be placed in a round robin fashion.
-x Turn off stone-walling. Stonewalling is a technique used internally to Iozone.
It is used during the throughput tests. The code starts all threads or process‐
es and then stops them on a barrier. Once they are all ready to start then
they are all released at the same time. The moment that any of the threads or
processes finish their work then the entire test is terminated and throughput
is calculated on the total I/O that was completed up to t his point. This en‐
sures that the entire measurement was taken while all of the processes or
threads were running in parallel. This flag allows one to turn off the
stonewalling and see what happens.
-S # Set processor cache size to value (in Kbytes). This tells Iozone the size of
the processor cache. It is used internally for buffer alignment and for the
purge functionality.
-z Used in conjunction with -a to test all possible record sizes. Normally Iozone
omits testing of small record sizes for very large files when used in full au‐
tomatic mode. This option forces Iozone to include the small record sizes in
the automatic tests also.
-+m filename
Used to specify a filename that will be used to specify the clients in a
dis‐
tributed measurement. The file contains one line for each client. The fields
are space delimited. Field 1 is the client name. Field 2 is the working direc‐
tory, on the client, where Iozone will run. Field 3 is the path to the exe‐
cutable Iozone on the client.
-+u Used to enable CPU statistics collection.
-+d Diagnostic mode to troubleshoot a broken file I/O subsystem.
-+p percentage_reads
Used to set the percentage of threads/processes that will perform read testing
in the mixed workload test case.
-+r Enable O_RSYNC | O_SYNC on all testing.
-+l Enable byte range locking.
-+L Enable byte range locking & shared file mode.
-+D Enable O_DSYNC on all testing.
-+t Enable network performance test. Use with -+m
-+A# Enable madvise behavior. 0 = normal, 1=random, 2=sequential, 3=dontneed,
4=willneed
-+B Enable sequential mixed workload testing.
-+T Enable time stamps logging.
-+h Manually set hostname.
-+w# Percentage of data to be de-dupable between files.
对buffer/cache相关参数影响的测试
为啥需要这个测试
测试过程中,发现有的时候测的的读数据可以达到3G/s,这是由于需要读取的数据在系统cache中已经存在造成的.
于是,需要考虑cache(和buffer)对系统的影响 。
使用free -m可以看出来,
当iozone跑的filesize = 256M的时候 cache 为200多m
当iozone跑的filesize = 512M的时候 cache 也变成500多m
通过echo 3 > /proc/sys/vm/drop_caches 可以清空这个cache
于是,我开始对这些参数的作用进行一个比较:
考察以下参数:
-I DIRECT IO
-o Writes are synchronously written to disk. (O_SYNC)
-p purges the processor cache before each file operation
-c Include close() in the timing calculations
-e Include flush (fsync,fflush) in the timing calculations
测试过程
无参数时候的命令为:
iozone -i0 -i1 -s256M -r1M
加-I参数时候:
iozone -i0 -i1 -s256M -r1M -I
加其它参数的时候类似.
测试结果
(下表测试在leap机器 <8G内存, ext3> )
|
KB |
reclen |
write |
rewrite |
read |
reread |
|
无参数 |
262,144 |
1,024 |
556,191 |
1,480,864 |
2,471,724 |
2,556,356 |
|
-I |
262,144 |
1,024 |
28,340 |
28,243 |
80,484 |
80,595 |
r/w都是硬盘 |
-o |
262,144 |
1,024 |
13,621 |
30,028 |
2,460,777 |
2,521,099 |
对写有影响 对cache没用 |
-p |
262,144 |
1,024 |
517,321 |
1,217,044 |
1,843,331 |
1,891,535 |
无影响 |
-c |
262,144 |
1,024 |
545,627 |
1,485,369 |
2,484,093 |
2,546,646 |
无影响 |
-e |
262,144 |
1,024 |
32,075 |
33,154 |
2,254,553 |
2,247,461 |
对写有影响 对cache没用 |
|
|
|
|
|
|
|
|
-I -o |
262,144 |
1,024 |
13,420 |
27,836 |
75,591 |
79,017 |
|
-I -e |
262,144 |
1,024 |
28,089 |
28,015 |
78,873 |
78,870 |
same as -I |
-o -e |
262,144 |
1,024 |
13,924 |
31,526 |
2,249,295 |
2,568,155 |
same as -o |
可以看出,这些参数的影响 :
- 认为-c -p 影响很小
- 只有-I 影响read speed .
- 对于write speed,影响大小排序: -o > -I > -e
下面为同等情况下 mfs的测试:
mfs参数:
3machines , every machine have 3 harddisks , goal=2
|
KB |
reclen |
write |
rewrite |
read |
reread |
|
无参数 |
|
|
106,027 |
54,228 |
168,032 |
148,067 |
|
-I |
262144 |
1024 |
- |
- |
- |
- |
|
-o |
262144 |
1024 |
51,404 |
48,123 |
138,059 |
147,027 |
|
-p |
262144 |
1024 |
51,704 |
56,547 |
140,665 |
149,992 |
|
-c |
262144 |
1024 |
40,275 |
47,969 |
150,859 |
154,274 |
|
-e |
262144 |
1024 |
32,546 |
39,377 |
145,963 |
152,111 |
|
|
|
|
|
|
|
|
|
-I -o |
262144 |
1024 |
- |
- |
- |
- |
|
-I -e |
262144 |
1024 |
- |
- |
- |
- |
|
-o -e |
262144 |
1024 |
42,031 |
40,780 |
148,862 |
150,961 |
|
mfs下,这些参数好像不太有用.
例子
性能测试:
/usr/local/iozone/iozone -i 0 -i 1 -g 12G -Rab out.wks
吞吐率测试:
iozone -t -T -u64 -l64
iozone -i0 -i1 -t -u64 -l32 -w -s1M
文件1M,并发从32到64