《存储工具系列文章》主要介绍存储相关的测试和调试工具,包括不限于dd、fio、vdbench、iozone、iometer、cosbench等性能负载工具,及strace等调试工具。
1 概述
IOzone是一个文件系统的benchmark工具,可以测试不同的操作系统中文件系统的读写性能。可以测试 Read、write、re-read、re-write、read backwards、read strided、fread、fwrite、random read、pread、mmap、aio_read、aio_write 等等不同的模式下的硬盘的性能。 测试的时候请注意,设置的测试文件的大小一定要大过你的内存(最佳为内存的两倍大小),不然linux会给你的读写的内容进行缓存,会使得测试数据非常不真实。
2 安装部署
2.1 软件包安装
第一步:下载软件包/src/current/
[root@node1 iozone]# wget /src/current/iozone-3-493.x86_64.rpm --no-check-certificate---08-10 09:36:09-- /src/current/iozone-3-493.x86_64.rpmResolving ()... 38.146.202.4Connecting to ()|38.146.202.4|:443... connected.WARNING: cannot verify 's certificate, issued by ‘/C=US/O=Let's Encrypt/CN=R3’:……-08-10 09:36:45 (26.1 KB/s) - ‘iozone-3-493.x86_64.rpm’ saved [796324/796324][root@node1 iozone]#
第二步:安装软件包
[root@node1 iozone]# rpm -ivh iozone-3-493.x86_64.rpmPreparing... ################################# [100%]Updating / installing...1:iozone-3-493 ################################# [100%][root@node1 iozone]#
第三步:检查安装是否成功
[root@node1 iozone]# /opt/iozone/bin/iozone -v'Iozone' Filesystem Benchmark ProgramVersion $Revision: 3.493 $Compiled for 64 bit mode.……
第四步:建立便捷使用链接
[root@node1 iozone]# ln -s /opt/iozone/bin/iozone /bin/iozone[root@node1 iozone]# iozone -v'Iozone' Filesystem Benchmark ProgramVersion $Revision: 3.493 $Compiled for 64 bit mode.
2.2 源码包安装
第一步:下载源码包/src/current/
[root@node1 iozone]# wget /src/current/iozone3_493.tgz --no-check-certificate
第二步:安装依赖包
[root@node1 current]# yum install -y gcc
第三部:编译安装
[root@node1 iozone]# tar -xvf iozone3_493.tgz……[root@node1 iozone]# cd iozone3_493/src/current[root@node1 iozone]# make linux
第四步:建立便捷使用链接
[root@node1 current]# ln -s /home/iozone/iozone3_493/src/current/iozone /bin/iozone[root@node1 iozone]# iozone -v
3 配置参数说明
3.1 13种测试模型
IOzone 执行以下 13 种测试。如果您在数据库服务器上执行 iozone 测试,则可以专注于第 1 6 个测试,因为它们直接影响数据库性能。
3.2 测试格式
iozone功能很强大,当然参数也很多,但是常用的就那几个参数
[root@node1 current]# iozone -hiozone: help modeUsage: iozone [-s filesize_kB] [-r record_size_kB] [-f [path]filename] [-h][-i test] [-E] [-p] [-a] [-A] [-z] [-Z] [-m] [-M] [-t children][-l min_number_procs] [-u max_number_procs] [-v] [-R] [-x] [-o][-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] [-L cacheline_size] [-K] [-g maxfilesize_kB][-n minfilesize_kB] [-N] [-Q] [-P start_cpu] [-e] [-c] [-b Excel.xls][-J milliseconds] [-X write_telemetry_filename] [-w] [-W][-Y read_telemetry_filename] [-y minrecsize_kB] [-q maxrecsize_kB][-+u] [-+m cluster_filename] [-+d] [-+x multiplier] [-+p # ][-+r] [-+t] [-+X] [-+Z] [-+w percent dedupable] [-+y percent_interior_dedup][-+C percent_dedup_within] [-+a zero_pct] [-+Q dedup granule size][-+M dedup+compress flag ]
参数说明
4 测试案例和结果解析
4.1 使用默认值运行所有 IOZone 测试
-a 选项代表自动模式。这会创建大小从 64k 到 512MB 的临时测试文件,用于性能测试。此模式还使用 4k 到 16M 的记录大小进行读写(稍后会详细介绍)测试。
-a 选项还将执行所有 13 种类型的测试。
./iozone -a
iozone 输出的第一组包含标题信息,其中显示有关 iozone 实用程序的信息,以及用于生成此报告的所有 iozone 选项,如下所示。
Iozone: Performance Test of File I/OVersion $Revision: 3.394 $Compiled for 32 bit mode.Build: linuxContributors:William Norcott, Don Capps, Isom Crawford, Kirby CollinsAl Slater, Scott Rhine, Mike Wisner, Ken GossRun began: Sat Apr 23 12:25:34 Auto ModeCommand line used: ./iozone -aOutput is in Kbytes/secTime Resolution = 0.000001 seconds.Processor cache size set to 1024 Kbytes.Processor cache line size set to 32 bytes.File stride size set to 17 * record size.
输出的第二部分包含各种测试的输出值(以每秒为单位)。
第 1 列 KB:表示用于测试的文件大小。
第 2 列 reclen:表示用于测试的记录长度。
直到最后一列的第 3 列:表示执行的各种测试及其每秒输出值。
random random bkwd record strideKB reclen write rewrite read reread read write read rewriteread fwrite frewrite fread freread64 4 495678 152376 1824993 2065601 2204215 875739 58 971435 667351 383106 363588 566583 88946564 8 507650 528611 1051124 1563289 2071399 1084570 1332702 1143842 2138827 1066172 1141145 1303442 7836416 587283 1526887 2560897 2778775 2366545 1122734 1254016 593214 1776132 463919 1783085 3214531 30577826432 552203 402223 1121909 1388380 1162129 415722 666360 1163351 1637488 1876728 1685359 673798 24661456464 551580 1122912 2895401 4911206 2782966 1734491 1825933 1206983 2901728 1207235 1781889 2133506 2780559128 4 587259 1525366 1801559 3366950 1600898 1391307 1348096 547193 666360 458907 1486461 1831301 1998737128 8 292218 1175381 1966197 3451829 2165599 1601619 1232122 1291619 3273329 1827104 1162858 1663987 193715112816 650008 510099 410 4003449 2508627 1727493 1560181 1307583 2203579 1229980 603804 1911004 266918312832 703200 1802599 2842966 2974289 2777020 1331977 3279734 1347551 1152291 684197 722704 907518 246635012864 848280 1294308 2288112 1377038 1345725 659686 1997031 1439349 2903100 1267322 1968355 2560063 1506623128128 902120 551579 1305206 4727881 3046261 1405509 1802090 1085124 3649539 2066688 1423514 2609286 3039423...
4.2 使用iozone -b将输出保存到电子表格
要将iozone输出保存到电子表格,请使用 -b 选项,如下所示。-b 代表二进制,它指示 iozone 以二进制格式将测试输出写入电子表格。
./iozone -a -b output.xls
注意:-b 选项可以与下面提到的任何示例一起使用。
从电子表格中保存的数据中,您可以使用电子表格工具的图形功能创建一些漂亮的图形。以下是从 iozone 输出创建的示例图。
4.3 使用iozone -i仅运行特定类型的测试
如果您对只运行特定类型的测试感兴趣,请使用 -i 选项。
句法:
iozone -i [test-type]
测试类型是一个数值。以下是各种可用的测试类型及其数值。
0=write/rewrite1=read/re-read2=random-read/write3=Read-backwards4=Re-write-record5=stride-read6=fwrite/re-fwrite7=fread/Re-fread,8=random mix9=pwrite/Re-pwrite10=pread/Re-pread11=pwritev/Re-pwritev12=preadv/Re-preadv
以下示例将仅运行写入测试(即写入和重写)。正如您从输出中看到的,其他列是空的。
$ ./iozone -a -i 0random random bkwd record strideKB reclen write rewrite read reread read write read rewriteread fwrite frewrite fread freread64 4 353666 68096964 8 477269 744768 6416 429574 326442 6432 557029 942148 6464 680844 633214 128 4 187138 524591
结合多种 iozone 测试类型
您还可以通过在命令行中指定多个 -i 来组合多种测试类型。
例如,以下示例将测试读取和写入测试类型。
$ ./iozone -a -i 0 -i 1random random bkwd record stride KB reclen write rewrite read reread read write read rewrite read fwrite frewrite fread freread64 4 372112 407456 155 889086 64 8 385574 743960 3364024 2553333 64 16 496011 397459 3748273 1330586 64 32 499600 876631 2459558 4270078
4.4 使用iozone -s指定文件大小
默认情况下,iozone 会自动创建大小从 64k 到 512M 的临时文件,以执行各种测试。
iozone 输出中的第一列(带有列标题 KB)表示文件大小。正如您从之前的输出中看到的,它从 64KB 文件开始,并且会不断增加直到 512M(每次文件大小都翻倍)。
您可以使用选项 -s 指定文件大小,而不是对所有文件大小运行测试。
以下示例将只对文件大小为 1MB(即 1024KB)的文件执行写入测试。
$ ./iozone -a -i 0 -s 1024random random bkwd record stride KB reclen write rewrite read reread read write read rewrite read fwrite frewrite fread freread1024 4 469710 785882 1024 8 593621 1055581 1024 16 745286 1110539 1024 32 610585 1030184 1024 64 929225 15901301024 128 1009859 1672930 1024 256 1042711 2039603 1024 512 941942 1931895 1024 1024 1039504 706167
4.5 使用iozone -r指定测试的记录大小
当您运行测试时,对于特定的文件大小,它会使用从 4k 到 16M 的不同记录大小进行测试。
如果您喜欢对托管 oracle 数据库的 I/O 子系统进行 I/O 性能测试,您可能希望将 iozone 中的记录大小设置为与 DB 块大小相同的值。数据库根据 DB 块大小进行读写。
reclen 代表记录长度。在前面的示例中,第 2 列(列标题为“reclen”)表示应该用于测试 IOzone 的记录长度。在前面的示例输出中,对于 1024KB 的文件大小,iozone 测试使用从 4k 16M 的各种记录大小来执行写入测试。
除了使用所有这些默认记录长度大小外,您还可以指定要测试的记录大小。
下面的示例将仅对 32k 的记录长度运行写入测试。在输出中,第二列现在将只显示 32。
$ ./iozone -a -i 0 -r 32random random bkwd record stride KB reclen write rewrite read reread read write read rewrite read fwrite frewrite fread freread64 32 566551 820553128 32 574098 1000000 256 32 826044 948043 512 32 801282 1560624 1024 32 859116 5289012048 32 881206 1423096
4.6 结合文件大小和记录大小
您还可以同时使用 -s 和 -r 选项来指定确切的临时文件大小和需要测试的确切记录长度。
比如下面会使用一个2M的文件,记录长度为1M的运行写测试
$ ./iozone -a -i 0 -s 2048 -r 1024random random bkwd record stride KB reclen write rewrite read reread read write read rewrite read fwrite frewrite fread freread2048 1024 1065570 1871841
4.7 使用iozone -t进行吞吐量测试
要在吞吐量模式下执行 iozone,请使用 -t 选项。您还应该指定在此测试期间需要处于活动状态的线程数。
以下示例将使用 2 个线程对写入执行 iozone 吞吐量测试。请注意,您不能将 -a 选项与 -t 选项结合使用。
$ ./iozone -i 0 -t 2Children see throughput for 2 initial writers 1= 433194.53 KB/secParent sees throughput for 2 initial writers = 7372.12 KB/secMin throughput per process = 0.00 KB/secMax throughput per process = 433194.53 KB/secAvg throughput per process = 216597.27 KB/secMin xfer= 0.00 KBChildren see throughput for 2 rewriters = 459924.70 KB/secParent sees throughput for 2 rewriters = 13049.40 KB/secMin throughput per process = 225610.86 KB/secMax throughput per process = 234313.84 KB/secAvg throughput per process = 229962.35 KB/secMin xfer= 488.00 KB
要为所有测试类型执行吞吐量,请从上面的示例中删除“-i 0”,如下所示。
$ ./iozone -t 2
4.8 使用iozone -+u包含CPU使用率
在执行 iozone 测试时,您还可以使用 -+u 选项指示 iozone 收集 CPU 利用率。
选项前面的 -+ 可能看起来有点奇怪。但是,您必须给出整个 -+u(不仅仅是 -u 或 +u)才能使其正常工作。
以下示例将执行所有测试,并将 CPU 利用率报告作为它生成的 Excel 电子表格输出的一部分。
$ ./iozone -a -+u -b output.xls
注意:这将为它执行的每个测试显示单独的 CPU 利用率。
4.9 使用iozone -g增加文件大小
这个很重要。如果您的系统有超过 512MB 的 RAM,您应该增加 iozone 用于测试的临时文件大小。如果不这样做,您可能无法获得准确的结果,因为系统缓冲区缓存将在其中发挥作用。
为了获得准确的磁盘性能,建议将临时文件大小设置为系统缓冲区缓存大小的 3 倍。
以下示例将通过将最大文件大小增加到 2GB 来运行 iozone,并为写入测试运行自动 iozone 测试。
$ ./iozone -a -g 2G -i 0random random bkwd record stride KB reclen write rewrite read reread read write read rewrite read fwrite frewrite fread freread64 4 556674 1230677 64 8 278340 441320 64 16 608990 1454053 64 32 504125 1085411 64 64 571418 1279331 128 4 526602 961764 128 8 714730 518219
4.10 使用iozone -F一起测试多个挂载点
通过组合几个 iozone 选项,您可以在多个挂载点上执行磁盘 I/O 测试,如下所示。
如果您有 2 个挂载点,则可以启动 2 个不同的 iozone 线程以在这两个挂载点上创建临时文件以进行测试,如下所示。
$ ./iozone -l 2 -u 2 -r 16k -s 512M -F /u01/tmp1 /u02/tmp2
-l 表示应该启动的最小iozone进程数
-u 表示应该启动的最大iozone进程数
-F 应该包含多个值。即如果我们在 -l 和 -u 中都指定 2,我们应该在这里有两个文件名。请注意,只有挂载点需要存在。-F 选项中指定的文件不需要存在,因为 iozone 将在测试期间创建此临时文件。在上面的示例中,挂载点是 /u01 和 /u02。文件 tmp1 和 tmp2 将由 iozone 自动创建用于测试目的。
5 测试结果解析
见测试案例中描述。
6 参考资料
[01]/qq_34018840/article/details/94449879
[02]/blogs/345602