Iometer是一款用于单系统和集群系统的I/O子系统度量(measurement)和特征化(characterization)工具,它是一个负载生成器(workload generator),也是一个度量工具(measurement tool),可用于模拟任何程序或benchmark的磁盘或网络I/O操作,在单个或多个(联网)系统上生成并度量负载。
Iometer不算是非常简单、易用和常用的存储性能测试工具,但说不上专业,它不会校验数据一致性,只支持简单的IO模型不能很好的模拟真实业务模型。专业的性能测试工具有:SPC-1/SPC-2(SPC组织认证的存储性能测试),Orion(Oracle出的模拟数据库业务的性能测试工具),Vdbench(Sun出的存储性能测试工具),Iozone(主要用于文件系统性能测试),TestTool(Fenisar出品的带数据一致性校验的存储IO性能测试工具,强大但昂贵)
Iometer简介
Iometer由两个程序组成,Iometer和Dynamo。Iomter是控制程序/GUI,它告诉Dynamo需要做什么,收集数据结果并总结到一个输出文件。一次只应该运行一个Iometer,通常运行在服务器上。Dynamo是一个负载生成器,它没有GUI,在Iometer的命令下执行I/O操作并记录性能信息,然后返回数据给Iometer。一次可以运行多个Dynamo,通常是一个副本运行在服务器上,另一个副本运行在每一台客户端上。Dynamo是多线程的,每一个副本可以模拟多个客户端程序的工作(workload),每一个正在运行的Dynamo副本被称为是一个Manager,Dynamo中的每一个线程被称为worker。
双击Iometer.exe运行Iometer,出现Iometer GUI(如下图所示),同时会在本地系统上启动Dynamo的一个副本。双击一个.icf设置文件、将icf或.txt文件拖拽到Iometer.exe也能启动Iometer,并且加载配置信息。命令行启动方式形如:c:iometer myconfig.icf。如果需要在其他机器上启动Dynamo,将机器名作为Iometer的命令行参数,例如c:dynamo IOServer。
如果Iometer和Dynamo在单个系统上运行,那么是不需要网络支持的,否则就需要配置TCP/IP网络。不需要在任何一台机器上启动多于一个的Dynamo的副本,要增加worker的数量,使用Iometer启动其他worker线程即可。
蓝色图标的Targets代表物理驱动器(图中并没有物理驱动器),只有当物理驱动器上没有任何逻辑分区时才会被显示出来。黄色图标代表逻辑(已挂载,mounted)驱动器,只有当它们为可写(writable)时会被显示出来。黄色图标带有红色斜杠代表该驱动器在测试开始之前,需要先做准备(prepare)。单击选中一个或多个(shift)磁盘来做测试,被选中的磁盘将自动分发给Manager的worker。
对逻辑驱动器的访问是通过对文件iobw.tst的写入来完成的,如果该文件不存在,驱动器图标上会有一条红色斜杠,在测试开始之前,该文件会被创建并占满整个磁盘空间。
快速开始测试磁盘性能
- 双击Iometer.exe,Iometer主窗口出现并自动运行一个Dynamo负载生成器
- 在Iometer窗口的左侧的拓扑面板点击一个Manager,你会在Disk Targets tab中看到可用的磁盘驱动器。
- 在Disk Targets tab中,选择一个或多个磁盘
- 切换到Access Specifications tab,在Global Access Specifications列表中双击“Default“,出现”Edit Access Specification“对话框。
- Edit Access Specification对话框告诉你磁盘将如何被访问,默认是2KB随机I/O,67%读+33%写,代表典型的数据库负载。你可以就使用默认设置或对其进行更改。点击OK关闭对话框。
- 为了获得最大吞吐量(MB/s),尝试更改Transfer Request Size = 64KB,Percent Read/Write Distribution = 100% Read,Percent Random/Sequential Distribution = 100% Sequential.
- 为了获得最大的I/O速率(IOPS),尝试更改Transfer Request Size = 512Bytes,Percent Read/Write Distribution = 100% Read,Percent Random/Sequential Distribution = 100% Sequential。
- 切换到Results Display tab,设置Update Frequency = 10秒。
- 点击Start Tests按钮(绿色旗帜),一个标准的文件保存对话框出现,选择一个文件用以保存测试结果(默认是result.csv)
- 10秒钟之后,第一个测试结果显示在Results Display tab并每隔10秒更新一次。点击每个bar左侧的chart可以选择你想要的显示结果,你也可以将一个worker或manager拖拽到一个bar chart上来查看某一个worker或manager的结果。
- 点击Stop Test按钮(Stop标志),测试将停止,结果会被保存在results.csv文件中,这是一个逗号分隔的文本文件,可以用任何文本编辑器查看或导入电子表格。
测试两台计算机之间的网络性能(A和B)
- 在computer-a上,双击Iometer.exe
- 在computer-b上,打开一个cmd并执行C:dynamo computer-a
- 在computer-a上,你将看到computer-b作为一个新的manager出现在Topology面板,点击它可以观察到其磁盘驱动器将出现在Disk Targets tab
- 选中computer-b,点击Start Network Worker按钮(网线图示)早computer-b上创建一个网络服务器。
- 切换到Network Targets tab,从列表中选择computer-a的一个接口,这将在computer-a上创建一个客户端并将客户端和服务器连接在一起。
- 切换到Access Specifications tab,在Global Access Specifications列表中双击“Default“,出现”Edit Access Specification“对话框,指定Transfer Request Size = 512Bytes,点击OK。
- 切换到Results Display tab,设置Update Frequency = 10秒。
- 点击Start Tests按钮(绿色旗帜)并选择一个文件用于保存结果。如果指定一个现有的文件,新的结果会被附加在已有结果后面。
- 观察结果后,点击Stop Test按钮停止测试并将结果保存到文件。
附注:
使用Iometer选择IO模型的一点提醒:
一个worker对于50% sequence 和50% random的类型最终落到存储的效果跟random差不多,它有首先根据比例确定下一个IO是顺序还是随机,如果是顺序就接在上一个IO的LBA请求后面,如果是随机就在可测试的LUN地址范围内随机选取一个地址。因此,如果前两个是顺序IO中间插一个随机IO,那么当下一次顺序IO来的时候是接着上一个随机IO的LBA地址访问的,了解清楚这一点才能准备估算测试结果是否合理
如果要实现顺序和随机分开跑,那就开两个worker跑同一个LUN,但这样数据一致性不能得到保证,只是测试性能还可以