文件系统性能测试工具iozone
title: 文件系统性能测试工具iozone
tags: Linux使用教程
版权声明:本文参考了《官方文档V3.487》。未经作者允许,严禁用于商业出版,否则追究法律责任。网络转载请注明出处,这是对原创者的起码的尊重!!!
1 简介
IOzone是一个文件系统benchmark工具。它可以生成并测量各种文件操作。 Iozone已被移植到许多机器上并在许多操作系统下运行。本文档将介绍许多不同测试类型的操作以及所有命令行选项。
Iozone可用于确定供应商计算机平台的广泛文件系统分析。基准测试使用以下操作测试文件系统I/O性能。
Read, write, re-read, re-write, read backwards, read strided, fread, fwrite, random read/write, pread/pwrite variants, aio_read, aio_write, mmap,
虽然计算机通常在考虑应用程序的情况下购买,但随着时间的推移,应用程序组合也可能会发生变化。许多供应商已经增强了他们的操作系统,以便在一些常用的应用程上性能更好。虽然这会加速少数应用程序的I/O,但系统可能无法很好地用于其他未被操作系统作为优化目标的应用程序。此类增强的一个示例是:数据库。许多操作系统已经测试和调整了文件系统,因此它可以很好地与数据库配合使用。虽然数据库用户很满意,但其他用户可能并不高兴,因为整个系统可能以牺牲所有其他用户为代价向数据库用户提供所有系统资源。随着时间的推移,系统管理员可能会决定将更多办公自动化任务转移到此计算机上。负载现在可以从随机读取器应用程序(数据库)转移到顺序读取器。用户可能会发现在运行此新应用程序时机器速度非常慢,并且对购买此平台的决定感到不满意。通过使用Iozone获得广泛的文件系统性能覆盖,买家更有可能看到任何优点或缺点,并选择更平衡的平台和操作系统。
2 特征
- ANSII ‘C’ 源码.
- POSIX 异步 I/O
- mmap() 文件I/O
- 普通文件I/O
- 单个流测试
- 多个流测试
- POSIX线程
- 多进程测量
- 输出可以在Excel中产生图像的输出
- 绘图的I/O延迟数据
- 64位兼容源码
- 大文件兼容
- 在吞吐量测试中设置障碍以消除掉队的影响。
- 处理器缓存大小可配置。
- 可选择使用fsync,O_SYNC测量。
- 针对NFS测试的选项。
3 构建
IOzone的源代码,应该有12个文件
- iozone.c (源码)
- libasync.c (源码)
- makefile (makefile)
- libbif.c (源码)
- Iozone_msword_98.doc (Word 格式文档)
- iozone.1 (nroff 格式文档)
- gnuplot.dem (gnuplot 样本)
- gnuplotps.dem (生成postscript输出的gnuplot示例文件)
- read_telemetry (读测试文件的样本)
- write_telemetry (写测试文件的样本)
- Run_rules.doc (获得合理的结果的运行规则)
- Changes.txt (更新日志)
键入:make
makefile将显示支持的平台列表。 选择与您的配置匹配的那个,然后键入:make target。就这样。 你完成了编译。 由于IOzone在当前工作目录中创建了所有文件,因此无需任何安装过程。 只需将Iozone复制到您希望测试文件系统性能的任何位置,然后运行它。 或者,您可以使用-f命令行选项指定目标路径,例如,新文件系统中的path/filename文件名。
4 运行示例
最简单的方法是尝试自动模式:
iozone -a
如果您希望生成图形,那么您可能希望打开Excel模式
iozone -Ra
(输出可以使用空格和tab分隔符导入)
或
iozone -Rab output.wks
(输出文件”output.wks"是一个二进制格式的电子表格)
如果内存超过512M,则需要将最大文件大小增加到更大的值。例如,如果您的系统有1G的内存,那么您可能想尝试以下操作:
iozone -Ra -g 2G
如果您只关心read/write并且不希望花时间执行所有测试,那么您可能希望将测试限制为:
iozone -Ra -g 2G -i 0 -i 1
如果您在NFS客户端上通过NFS运行Iozone,那么您可能希望使用:
iozone -Rac
这告诉Iozone在测量中引入close()。 如果客户端运行NFS3上,则可能需要这样做。引入close()有助于减少NFS3的客户端缓存效果。如果使用的文件大小大于客户端中的内存量,则不需要’c’标志。
5 测试定义
Write:此测试测量写入新文件的性能。当写入新文件时,不仅需要存储数据,而且还需要用于跟踪数据在存储介质上的位置的开销信息。此开销称为“元数据”它由目录信息,空间分配和与文件关联的任何其他数据组成,该文件不是文件中包含的数据的一部分。由于此开销信息,首次写入性能低于重写文件的性能是正常的。
Re-Write:此测试测量写入已存在的文件的性能。当写入已存在的文件时,由于元数据已存在,所需的工作量较少。重写性能高于写入新文件的性能是正常的。
Read:此测试测量读取现有文件的性能。
Re-Read:此测试测量读取最近读取过的文件的性能。由于操作系统通常维护最近读取的文件的数据缓存,因此性能更高是正常的。此缓存可用于满足读取,并提高性能。
Random Read:此测试测量访问文件中的随机位置时读取文件的性能。此类活动下的系统性能可能会受到以下几个因素的影响:操作系统缓存的大小,磁盘数,搜索延迟等。
Random Write:此测试测量访问文件中的随机位置时写入文件的性能。同样,此类活动下的系统性能可能会受到以下几个因素的影响,例如:操作系统缓存的大小,磁盘数量,搜索延迟等。
Random Mix:此测试测量访问文件中的随机位置时写入和读取文件的性能。同样,此类活动下的系统性能可能会受到以下几个因素的影响,例如:操作系统缓存的大小,磁盘数量,搜索延迟等。此测试仅在吞吐量模式下可用。每个线程/进程运行读取或写入测试。读/写的分配是在循环的基础上完成的。正确操作需要多个线程/进程。
Backwards Read:此测试测量向后读取文件的性能。这似乎是一种读取文件的奇怪方式,但事实上有些应用程序可以执行此操作。 MSC Nastran是一个向后读取文件的应用程序示例。在MSC Nastran中,这些文件非常大(大小为GB到TB)。尽管许多操作系统具有使其能够更快地向前读取文件的特殊功能,但是很少有操作系统能够检测并增强向后读取文件的性能。
Record Rewrite:此测试测量在文件中写入和重写特定位置(热点)的性能。这个热点可以有非常有趣的行为。如果这个热点的大小足够小以适应CPU数据缓存,那么性能非常高。如果热点的大小大于CPU数据高速缓存但仍然适合TLB,则可以获得不同的性能级别。如果点的大小大于CPU数据高速缓存并且大于TLB但仍然适合操作系统高速缓存,则可以获得另一级别的性能,如果该点的大小大于操作系统高速缓存,则获得了另一个级别的表现。
Strided Read:此测试测量具有跨步访问行为的读取文件性能。例如:在偏移零处读取4 KB的长度,然后seek到200 KB处,然后读取4 KB的长度,然后seek到200 KB,依此类推。这里的模式是读取4 KB然后seek 200 KB并重复该模式。这又是一种典型的应用程序行为,这些程序具有包含在文件中的数据结构,并且正在访问数据结构的特定区域。大多数操作系统都不会检测此行为或实现任何技术来增强此类访问行为下的性能。此访问行为有时也会产生有趣的性能异常。一个例子是应用程序的步幅导致条带文件系统中的特定磁盘成为瓶颈。
Fwrite:此测试使用库函数fwrite()测量写入文件的性能。 这是一个执行缓冲写操作的库例程。 缓冲区位于用户的地址空间内。 如果应用程序要以非常小的大小传输进行写入,那么fwrite()的缓冲和阻塞I / O功能可以通过减少实际操作系统调用的数量和在操作系统调用时增加传输的大小来增强应用程序的性能。 此测试写入新文件,因此元数据的开销再次包含在测量中。
Frewrite:此测试使用库函数fwrite()测量写入文件的性能。这是一个执行缓冲和阻塞写操作的库例程。缓冲区位于用户的地址空间内。如果应用程序要以非常小的大小传输进行写入,那么fwrite()的缓冲和阻塞I/O功能可以通过减少实际操作系统调用的数量和在操作系统调用时增加传输的大小来增强应用程序的性能。此测试写入已经存在的文件,因此性能应该更高,因为不需要元数据操作。
Fread:此测试使用库函数fread()测量读取文件的性能。这是一个执行缓冲和阻塞读取操作的库例程。缓冲区位于用户的地址空间内。如果应用程序要读取非常小的传输,那么fread()的缓冲和阻塞I / O功能可以通过减少实际操作系统调用的数量和在操作系统调用时增加传输的大小来增强应用程序的性能打电话。
Freread:此测试与上面的fread相同,只是在此测试中,读取了最近读取过的文件。这应该导致更高的性能,因为操作系统可能在缓存中具有文件数据。
6 专业测试
Mmap:许多操作系统支持使用mmap()将文件映射到用户的地址空间。一旦这种映射到位,那么在内存中存储到该位置将导致数据存入文件。如果应用程序希望将文件视为一块内存,则这很方便。一个例子是在内存中有一个数组,它也作为文件系统中的文件进行维护。 mmap文件的语义与普通文件有些不同。如果存储到存储器位置,则不会立即发生实际的文件I / O.使用带有标志MS_SYNC的msyc()和MS_ASYNC控制存储器和文件的一致性。带MS_SYNC参数的msync()调用会强制将内存内容写入文件,并在返回应用程序之前等待它存储。使用标志MS_ASYNC调用msync()告诉操作系统使用异步机制将内存刷新到存储器,以便应用程序可以返回执行而无需等待数据写入存储。此测试测量使用mmap()机制执行I/O的性能。
异步I/O:许多操作系统支持执行I/O的另一种机制是POSIX异步I/O.该应用程序使用POSIX标准异步I/O接口来完成此任务。示例:aio_write(),aio_read(),aio_error()。此测试测量POSIX异步I/O机制的性能。
7 命令行选项
下面是内置帮助文档的输出。每个选项的用途在本手册的这一节中进行了说明(v3.487)。
iozone [-s filesize_Kb] [-r record_size_Kb ] [-f [path]filename] [-i test] [-E] [-p] [-a] [-A] [-z] [-Z] [-m] [-M] [-t children] [-h] [-o] [-l min_number_procs] [-u max_number_procs] [-v] [-R] [-x] [-d microseconds] [-F path1 path2...] [-V pattern] [-j stride] [-T] [-C] [-B] [-D] [-G] [-I] [-H depth] [-k depth] [-U mount_point] [-S cache_size] [-O] [-K] [-L line_size] [-g max_filesize_Kb] [-n min_filesize_Kb] [-N] [-Q] [-P start_cpu] [-c] [-e] [-b filename] [-J milliseconds] [-X filename] [-Y filename] [-w] [-W] [-y min_recordsize_Kb] [-q max_recordsize_Kb] [-+m filename] [-+n] [-+N] [-+u ] [ -+d ] [-+p percent_read] [-+r] [-+t ] [-+A #]
选项 | 描述 |
---|---|
-a | 使用全自动模式。生成涵盖所有测试操作的输出,记录大小为4k到16M,文件大小为64k到512M。 |
-A | 此版本的自动模式提供更多覆盖范围,但消耗大量时间。一旦文件大小为32 MB或更大,-a选项将自动停止使用小于64k的传输大小。这节省了时间。 -A选项告诉iozone即使文件大小非常大,您也愿意等待并希望的小型传输密集覆盖。注意:Iozone版本3.61中不推荐使用此选项。请改用-az -i 0 -i 1代替 |
-b filename | Iozone将以Excel兼容的结果输出来创建二进制文件格式文件。 |
-B | 使用mmap()文件。这会导致使用mmap()接口创建和访问所有正在测量的临时文件。某些应用程序更喜欢将文件视为内存数组。这些应用程序mmap()文件然后只使用加载和存储来访问数组以执行文件I / O. |
-c | 在计时计算中包括close()。 仅当您怀疑当前正在测试的操作系统中的close()被破坏时,这才有用。 它对于NFS3测试也很有用,可以帮助识别nfs3_commit是否运行良好。 |
-C | 显示吞吐量测试中每个子节点传输的字节数。 如果您的操作系统在文件I / O或进程管理中存在任何饥饿问题,则非常有用。 |
-d # | 脱离障碍的微秒延迟。 在吞吐量测试期间,在开始测试之前,所有线程或进程都被强制为屏障。 通常,所有线程或进程都在同一时刻释放。 此选项允许在释放每个进程或线程之间延迟指定时间(以微秒为单位)。 |
-D | 在mmap文件上使用msync(MS_ASYNC)。这告诉操作系统mmap空间中的所有数据都需要异步写入磁盘。 |
-e | 在时间计算中包括flush(fsync,fflush) |
-E | 用于选择扩展测试。仅适用于某些平台。使用pread接口。 |
-f filename | 用于指定要测试的临时文件的文件名。使用unmount选项时,这很有用。在测试之间进行unmount测试时,测试中的临时文件必须位于可以卸载的目录中。当Iozone进程在此目录中运行时,无法卸载当前工作目录。 |
-F file1 file2… | 指定要在吞吐量测试中使用的每个临时文件名。名称的数量应该等于指定的进程或线程的数量。 |
-g # | 设置自动模式的最大文件大小(以千字节为单位)。 |
-G | 在mmap文件上使用msync(MS_SYNC)。这告诉操作系统mmap空间中的所有数据都需要同步写入磁盘。 |
-h | 显示帮助屏幕 |
-H # | 将POSIX异步I/O与#个async操作一起使用。 Iozone将使用POSIX异步I / O和异步缓冲区中的bcopy返回应用程序缓冲区。某些版本的MSC NASTRAN以这种方式执行I/O.应用程序使用此技术,以便可以在库中执行异步I/O,并且不需要更改应用程序内部模型。 |
-i# | 用于指定要运行的测试。 (0 =write/re-write,1 =read/re-read,2 =random-read/write,3 =read-backwards ,4 =re-write-recorder,5 =stride-read,6 = fwrite / re-fwrite, 7 = fread / Re-fread,8 =random-mix,9 = pwrite / Re-pwrite,10 = pread / Re-pread,11 = pwritev / Re-pwritev,12 = preadv / Repreadv)。总是需要指定0,以便以下任何测试都有一个要测量的文件。 -i#-i#-i#也受支持,因此可以选择多个测试。 |
-I | 对所有文件操作使用DIRECT I / O. 告诉文件系统所有操作都绕过缓冲区缓存并直接转到磁盘。 这也将在VxFS上使用VX_DIRECT,在Linux上使用O_DIRECT,在Solaris上使用directio()。 |
-j # | 设置文件访问的步幅(#表示记录大小)。 步幅读取测试将在此步幅中读取记录。 |
-J # | 以毫秒为单位,在每次I / O操作之前执行这么多毫秒的计算延迟。 另请参阅-X和-Y以了解控制计算延迟的其他选项。 |
-k # | 将POSIX异步I/O与#个async操作一起使用(无bcopy)。 Iozone将使用POSIX异步I / O,不会执行任何额外的bcopys。 Iozone使用的缓冲区将直接传递给异步I / O系统调用。 |
-K | 在正常测试期间生成一些随机访问。 |
-l# | 设置要运行的进程数的下限。运行吞吐量测试时,此选项允许用户指定要启动的最少进程数或线程数。此选项应与-u选项一起使用。 |
-L# | 将处理器高速缓存行大小设置为#个字节。告诉Iozone处理器缓存行大小。这在内部用于帮助加速测试。 |
-m | 告诉Iozone在内部使用多个缓冲区。有些应用程序反复读入单个缓冲区。其他程序却有一系列缓冲区。此选项允许模拟两种类型的应用程序。 Iozone的默认行为是重用内部缓冲区。此选项允许覆盖默认值并使用多个内部缓冲区。 |
-M | Iozone将调用uname()并将字符串放在输出文件中。 |
-n# | 设置自动模式的最小文件大小(以千字节为单位)。 |
-N | 以微秒为单位报告每个操作的结果。 |
-o | 写文件时被同步写入磁盘。 (O_SYNC)。 Iozone将使用O_SYNC标志打开文件。这会强制对文件的所有写入完全转到磁盘,然后再返回到基准测试。 |
-O | 以每秒的操作数给出结果。 |
-p | 这会在每次文件操作之前清除处理器缓存。 Iozone将分配另一个内部缓冲区,该缓冲区与同一处理器缓存边界对齐,并且其大小与处理器缓存相匹配。在开始每个测试之前,它将用零填充此备用缓冲区。这将清除处理器缓存,并允许在没有处理器缓存而加速情况下查看内存子系统。 |
-P# | 将进程/线程绑定到处理器,从cpu#开始。仅适用于某些平台。第一个子进程或线程将在指定的处理器上开始。未来的进程或线程将放在下一个处理器上。一旦超过cpus的总数,则将以循环方式放置未来的进程或线程。 |
-q# | 设置自动模式的最大记录大小(以KB为单位)。也可以指定-q #k(以KB为单位的大小)或-q #m(以MB为单位的大小)或-q #g(以GB为单位的大小)。请参阅-y以设置最小记录大小。 |
-Q | 创建偏移/延迟文件。 Iozone将创建延迟与偏移数据文件,可以使用图形包导入并绘制。这对于查找某些偏移是否具有非常高的延迟非常有用。例如UFS将分配其第一个间接块的点。从数据中可以看出使用此选项对基于范围的文件系统的范围分配的影响。 |
-r# | 用于指定要测试的记录大小(以KB为单位)。也可以指定-r #k(以KB为单位的大小)或-r #m(以MB为单位的大小)或-r #g(以GB为单位的大小)。 |
-R | 生成Excel报告。 Iozone将生成Excel兼容的报告到标准输出。此文件可以使用Microsoft Excel(空格分隔)导入,并用于创建文件系统性能的图形。注意:3D图形是面向列的。您需要在绘图时选择此选项,因为Excel中的默认值是面向行的数据。 |
-s# | 用于指定要测试的文件的大小(以KB为单位)。也可以指定-s #k(以KB为单位的大小)或-s #m(以MB为单位的大小)或-s #g(以GB为单位的大小)。 |
-S# | 指定处理器高速缓存大小(以KB为单位)。这告诉Iozone处理器缓存的大小。它在内部用于缓冲区对齐和清除功能。 |
-t# | 以吞吐量模式运行Iozone。此选项允许用户指定在测量期间有多少线程或进程处于活动状态。 |
-T | 使用POSIX 线程进行吞吐量测试。在具有POSIX线程的平台上可用。 |
-u# | 设置要运行的进程数的上限。运行吞吐量测试时,此选项允许用户指定要启动的最大进程数或线程数。此选项应与-l选项一起使用。 |
-U mountpoint | 在测试期间unmount和remount的挂载点。在开始每个测试之前,Iozone将卸载并重新安装此挂载点。这可以保证缓冲区缓存不包含任何被测文件。 |
-v | 显示Iozone的版本。 |
-V# | 指定要写入临时文件的模式,并在每个读取测试中验证其准确性。 |
-w | 完成使用后,请勿unlink临时文件。将它们留在文件系统中。 |
-W | 读取或写入时锁定文件。 |
-X | 关掉stone-walling。 Stonewalling是Iozone内部使用的一种技术。它在吞吐量测试期间使用。代码启动所有线程或进程,然后在屏障上停止它们。一旦他们准备好开始,那么他们都会同时被释放。任何线程或进程完成其工作的那一刻,整个测试就会终止,吞吐量将根据到目前为止完成的总I / O进行计算。这可确保在所有进程或线程并行运行时进行整个测量。这个标志允许人们关闭阻碍,看看会发生什么。 |
-X filename | 使用此文件写入遥测信息。该文件包含三个信息:字节偏移,传输大小,计算延迟(以毫秒为单位)。如果已经采用了感兴趣的应用程序的系统调用跟踪,则此选项很有用。这允许Iozone复制此特定应用程序生成的I / O操作,并为此文件行为提供基准测试结果。 (如果第1列包含#,那么该行是注释) |
-y# | 设置自动模式的最小记录大小(以千字节为单位)。也可以指定-y #k(以KB为单位的大小)或-y #m(以MB为单位的大小)或-y #g(以GB为单位的大小)。请参阅-q以设置最大记录大小。 |
-Y filename | 使用此文件读取遥测信息。该文件包含三个信息:字节偏移,传输大小,计算延迟(以毫秒为单位)。如果已经采用了感兴趣的应用程序的系统调用跟踪,则此选项很有用。这允许Iozone复制此特定应用程序生成的I / O操作,并为此文件行为提供基准测试结果。 (如果第1列包含#,那么该行是注释) |
-z | 与-a一起使用以测试所有可能的记录大小。通常,Iozone在全自动模式下使用时会忽略对非常大的文件的小记录大小的测试。此选项强制Iozone在自动测试中也包括小记录大小。 |
-Z | 启用混合mmap I / O和文件I / O. |
-+m filename | 使用此文件获取客户端的配置信息以进行集群测试。该文件包含每个客户端的一行。每行有三个字段。这些字段以空格分隔。第0列中的#符号是注释行。第一个字段是客户端的名称。第二个字段是客户端上Iozone将执行的工作目录的路径。第三个字段是客户端上可执行Iozone的路径。要使用此选项,必须能够在客户端上执行命令,而不会受到密码的质询。 Iozone将使用“rsh”开始远程执行。 |
-+n | 没有选择重新测试。使用此选项可防止重新测试运行。 |
-+N | 在顺序写入测试之前不截断或删除先前的测试文件。仅在上一个命令中使用-w后才能将测试文件留在原位以便重用。此标志的用途有限,当单个重新测试不够时,或者为了在没有文件截断或删除的情况下在顺序写入重新测试时易于控制。 |
-+u | 启用CPU利用率模式。 |
-+d | 启用诊断模式。在此模式下,每个字节都经过验证。如果怀疑I / O子系统损坏,这很方便。 |
-+p percent_read | 设置将执行随机读取测试的线程/进程的百分比。仅在吞吐量模式下有效且具有多个进程/线程。 |
-+r | 为所有I / O测试启用O_RSYNC和O_SYNC。 |
-+t | 启用网络性能测试。需要 -+ m |
-+A # | 启用madvise系统调用。 0 =正常,1 =随机,2 =顺序,3 =不需要,4 =需要。用于与**mmap()文件I / O的选项一起使用。见:-B |
8 图形示例
[外链图片转存失败(img-w9pHhmTE-1566544891352)(https://www.github.com/liao20081228/blog/raw/master/图片/文件系统性能测试工具iozone/1.jpg)]
从上图中可以清楚地看到缓冲区缓存有助于小于256MB的文件,但之后可以看到实际的磁盘I / O速度。 另请注意,对于16 KB到1Mbyte的文件大小,可以看到处理器缓存效果。
[外链图片转存失败(img-vGFzCugQ-1566544891353)(https://www.github.com/liao20081228/blog/raw/master/图片/文件系统性能测试工具iozone/2.jpg)]
上图显示了重新读取文件的影响。 请注意,处理器缓存现在非常重要,并导致尖峰。 右边的下一个平缓区是缓冲区缓存,最后超过256MB,文件不再适合缓冲区缓存,可以看到真正的主轴速度。
[外链图片转存失败(img-CGeiOzAK-1566544891354)(https://www.github.com/liao20081228/blog/raw/master/图片/文件系统性能测试工具iozone/3.jpg)]
上图是通过多次运行Iozone然后绘制结果组合来创建的。 此处的图表显示了吞吐量性能与进程和参与文件系统的磁盘数量的关系。 (磁盘条带化)好消息是,在这个系统上添加磁盘会增加吞吐量。 并非所有平台都能很好规模。
[外链图片转存失败(img-D6Ff4n3h-1566544891354)(https://www.github.com/liao20081228/blog/raw/master/图片/文件系统性能测试工具iozone/4.jpg)]
上图显示了单个流的性能,其中文件大小和请求大小已更改。图表靠近底部的右下角不是实际数据。 Excel将空单元格显示为包含零。使用-a选项执行此运行。如果使用-A选项,则未经测试的区域将进行测试并具有实际值。通常,这不是一个理想的测试区域,因为以4k传输大小写512MB文件非常耗时。 Iozone中的-a选项告诉Iozone在文件大小为32MB或更大时停止使用小于64k的传输大小。这节省了相当多的时间。注意从图的中心向下从左上角到右下角的脊。这是请求大小适合处理器缓存的地方。对于小于处理器缓存大小的文件大小,您也可以看到性能的提升。当文件大小和传输大小都小于处理器缓存时,它会上升得更高。虽然很有趣,但是你不可能让应用程序永远不要写大于处理器缓存J的文件。但是,有可能让应用程序尝试重用缓冲区并保持缓冲区大小小于处理器缓存大小。
[外链图片转存失败(img-BhfVO7SF-1566544891355)(https://www.github.com/liao20081228/blog/raw/master/图片/文件系统性能测试工具iozone/5.jpg)]
上图是具有一些有趣的“优化”的真实系统的示例。在这里可以看到有一些文件大小和一些记录大小的性能非常糟糕。请注意,记录大小为128K字节时性能下降。 (异常#1)文件大小为8 MB或更大时也会出现下降。大于8MB的文件的下降非常有趣,因为这台机器有16 GB内存和8GB缓冲区缓存。这是针对特定应用程序进行调优的典型示例。如果可怜的系统管理员安装了一个喜欢读取或写入记录大小为128 KB到1 MB的文件的应用程序,他的用户可能会把他带回会议。如果系统在购买之前就已被定性,那么它将永远不会进入building。
可以产生的另一种图形是延迟图。使用-Q选项时,Iozone将生成四个.dat文件。 Rol.dat,wol.dat,rwol.dat和rrol.dat。这些是读取偏移延迟,写入偏移延迟,重写偏移延迟和重读偏移延迟。可以将这些文件导入Excel,然后绘制图形。延迟与偏移信息有助于查看文件中是否存在任何具有高延迟的特定偏移。这些高延迟可能由多种原因引起。一个例子是文件大小是否比缓冲区高速缓存大小稍大。第一次写入文件时,每次传输的延迟都会很低。这是因为写入进入缓冲区缓存并允许应用程序立即继续。第二次写入文件时,延迟将非常高。这是因为缓冲区缓存现在完全充满了必须在重用缓冲区之前写入的脏数据。当文件大于缓冲区缓存时发生这种情况的原因是因为在重写情况下,写的第一个块将不会在缓冲区缓存中找到块,并且在使用它之前将强制清除缓冲区。清理将花费时间并且将导致写入完成的延迟更长。另一个例子是从远程机器挂载文件系统。延迟图可以帮助识别通过网络访问的文件的高延迟。以下是NFS3文件系统上文件I / O的一些延迟图。
[外链图片转存失败(img-xmMB3tzv-1566544891355)(https://www.github.com/liao20081228/blog/raw/master/图片/文件系统性能测试工具iozone/6.jpg)]
[外链图片转存失败(img-DpLIs2Kq-1566544891356)(https://www.github.com/liao20081228/blog/raw/master/图片/文件系统性能测试工具iozone/7.jpg)]
[外链图片转存失败(img-BcJGAD3r-1566544891356)(https://www.github.com/liao20081228/blog/raw/master/图片/文件系统性能测试工具iozone/8.jpg)]
[外链图片转存失败(img-cWSqthEV-1566544891357)(https://www.github.com/liao20081228/blog/raw/master/图片/文件系统性能测试工具iozone/9.jpg)]
在re-read延迟图中,可以清楚地看到NFS3中的客户端缓存。重读延迟显然不是实际进入NFS服务器并返回所获得的延迟。
9 运行规则
如果希望获得平台整个性能范围的准确结果,则需要确保将要测试的最大文件大小大于缓冲区高速缓存。如果您不知道缓冲区缓存有多大,或者它是否是动态缓冲区缓存,那么只需将最大文件大小设置为大于平台中的总物理内存。一般来说,你应该能够看到三到四个高原。文件大小适合处理器缓存。文件大小适合缓冲区缓存。文件大小大于缓冲区缓存。如果平台具有主处理器和辅助处理器缓存,您可能会看到另一个平台。如果您没有看到至少3个高原,那么您可能将最大文件大小设置得太小。 Iozone默认最大文件大小为512 MB。这通常已足够,但对于某些非常大的系统,您可能需要使用-g选项来增加最大文件大小。有关详细信息,请参阅分发包中的文件Run_rules文档。
为了使Iozone结果具有可比性,重要的是遵循一些基本规则。我们的想法是,有人应该能够在此报告中重现相同的结果。以下是规则列表。
对于缓冲区缓存性能比较:
对于单流结果,请确保文件大小小于缓冲区高速缓存。对于吞吐量结果,请确保文件的合计大小小于缓冲区高速缓存。对于内部和外部处理器高速缓存,文件大小也必须至少是处理器高速缓存大小的3倍。
对于磁盘性能比较:
对于单流结果,请确保文件大小是缓冲区高速缓存大小的3倍。对于吞吐量结果,请确保文件的合计大小是缓冲区高速缓存大小的3倍。
对于自动模式:
确保缓冲区缓存小于或等于128MB。基准测试将自动从小文件开始,并增加到512MB。这将确保结果包含缓冲区缓存结果的输入和输出。
对于NFS结果:
在发布NFS的结果时,下面描述的系统规范扩展到包括所有网络组件和负载生成器的完整硬件和软件。
系统信息披露报告必须包括:
- 系统CPU数量
- 系统总内存
- 系统中缓冲区缓存总量
- 系统磁盘数量
- 系统磁盘布局的完整描述
- CPU类型,时钟速度,处理器高速缓存大小,外部高速缓存大小
- 磁盘控制器的类型
- 磁盘控制器数量
- 磁盘类型
- 如果使用条带化,请包含条带布局的完整说明
- 使用Iozone为给定结果发出的完整命令行。
- 用于测试的Iozone的版本号。
- 操作系统的版本
- 所用软件和硬件的可用日期。
- 正在使用的文件系统的类型。
- 系统中NVRAM的总量。 (包括磁盘,磁盘控制器)
- 测试日期。
- 测试中使用的任何其他硬件。
- 启用了-R选项的原始Iozone输出文件。
- 在测试开始之前,必须清理(新创建)的文件系统。
- 最小结果包括以下结果:Read, Write, Re-read, Re-write, Backward read, Strided read, Random read。 mmap,线程和异步I / O的结果是可选的,因为并非所有供应商都支持Iozone可以测试的所有内容。
- 用于编译Iozone的编译器选项。
- 用于创建文件系统的选项。
- 用于挂载文件系统的选项。
- 应用于系统的所有可调参数的列表。
- 公司名称,如果公司发布了。
- 运行基准测试的人员姓名及其电子邮件地址。
其他要求:
- 基准不得修改。
- 您可以使用任何您想要的编译器选项。
- 不允许进行任何仅对此基准测试有益的调整。这包括操作系统中的特殊可调参数,或不用于真正的客户需求的用于增强Iozone结果的任何命令或实用程序,。
- 在尝试将数据刷新到磁盘的任何模式下运行Iozone时,数据必须使其保持稳定存储(稳定存储定义为:写入的数据可在至少一周停电的时间内恢复。)
- 不允许使用在6个月内无法购买的硬件或软件。
- 不允许使用在发布后至少6个月内不可用的硬件/软件。
- 被测系统必须处于多用户模式,并且所有后台程序通常都在运行
审查结果:
与其他基准测试不同,无需审核即可接受结果。 有几个原因导致不需要这样做。
- 我们都是绅士和女士,总是专业的。
- 我们都尊重黄金法则,尊重他人,就像我们希望得到对待一样。
- 如果你撒谎或欺骗,你只会抹黑自己和你的公司。
- 你绝对不会被抓住。 该基准测试是免费公开发布的。 您的客户在接受机器和付费前将下载该软件并检查平台。
- 如果贵公司发布无法复制的虚假结果,可能会被解释为虚假广告。 谁知道,它甚至可能让你的公司从竞争对手那里得到很好的诉讼。
- 一般而言,如果您对结果感到内疚,那么请不要让其他人看到。
敌对出版物:
在这些狂风暴雨的时代,人们有时会发布关于不真实的产品的负面结果。如果任何公司或产品遭到虚假结果攻击,公司可以自行运行基准测试并发布正确的结果。可能无法删除不正确的结果,但会添加新结果。如果发布冲突仍在继续,结果页面的网站管理员将保留从存档中删除不准确的恶意结果的权利。如果发生敌对洪水,结果页面的网站管理员保留阻止继续滥用的个人/公司的进一步出版物的权利。任何认为其产品被诽谤的个人/公司可以*地追究该人/公司的损失。 Iozone网站管理员,作者,网站所有者和朋友不对恶意出版物负责。 Iozone结果网页就像是互联网走廊里的黑板。维护者保留删除涂鸦的权利,但不对人们可能在其上书写的内容负责。
网络规则:
如果出版物的意图具有敌意,结果页面的网站管理员保留阻止发布结果的权利。敌意可能有多种形式。发布已知不准确的结果,试图使网站过载的出版物泛滥,发布包含病毒的结果就是一些例子。如果网站管理员认为其意图具有敌意性,则该出版物可能会被拒绝。
网站管理员保留控制提交和发布流程的权利。
10 源代码可用性
Iozone免费提供。在您的公司购买下一个平台之前,可以考虑使用它。
11 关于如何制作图表的附加说明
Iozone将Excel兼容输的出发送到标准输出。这可以重定向到文件,然后用Excel处理。 Iozone的正常输出以及Excel部分位于同一输出流中。因此,要获得图形,需要向下滚动到文件的Excel部分并绘制该部分中的数据。这儿有几组图表数据。 “写报告”就是一个例子。导入文件时,请务必告诉Excel用“分隔符”导入,然后单击“下一步”,然后单击“空格分隔”按钮。要绘制数据图形,只需突出显示包含文件大小和记录大小的区域,然后单击图形向导。使用的图表类型是“Surface”。弹出下一个对话框时,您需要选择“列”。之后,其余的应该是直截了当的。
撰稿人: http://www.iozone.org
原作者: William D. Norcott. [email protected]
特新和扩展: Don Capps [email protected]
版权声明:本文参考了《官方文档》。未经作者允许,严禁用于商业出版,否则追究法律责任。网络转载请注明出处,这是对原创者的起码的尊重!!!
上一篇: Angularts将前端数据生成报表
下一篇: synchronized关键字