Fio 是 Flexible IO 的缩写,一种多功能的 IO 工作负载生成器。 早在 2005 年,Linux 内核 IO 堆栈的背后骨干和作者 Jens Axboe 就厌倦了不断编写一次性测试程序来对 Linux IO 子系统进行基准测试或验证更改。 于是,fio 的诞生让这项工作变得简单了很多。 它足够灵活,可以进行详细的工作负载设置,并且包含必要的报告以在完成时理解数据。 Jens 在加入 Oracle 和后来的 Fusion-io 后继续致力于 fio。
Fio 是 Flexible IO 的缩写,一种多功能的 IO 工作负载生成器。 早在 2005 年,Linux 内核中 IO 堆栈的背后骨干和作者 Jens Axboe 就厌倦了不断编写一次性测试程序来对 Linux IO 子系统进行基准测试或验证更改。 于是,fio 的诞生让这项工作变得简单了很多。 它足够灵活,可以进行详细的工作负载设置,并且包含必要的报告以在完成时理解数据。 Jens 在加入 Oracle 和后来的 Fusion-io 后继续致力于 fio。 今天,fio 用户社区很活跃并参与开发,因此他们不断开发 fio 并实现新功能。 超过 100 人为 fio 做出了贡献,许多人已经这样做了好几次。 由于这一承诺,新版本的 fio 大约每 4-6 周发布一次,fio 被广泛用作行业标准基准、压力测试工具和 IO 验证目的。
主要特性集和功能
一个好的基准测试的两个主要特征是能够运行您想要的工作负载并获得所需的输出单位。 灵活曾经是(并将继续是)fio 的主要焦点。 它支持其他基准测试中没有的工作负载选项以及严格详细的 IO 统计数据。 任何类型的随机和顺序 IO 混合,或读/写混合,都很容易定义。 fio 的内部设计也很灵活。 定义工作负载完全独立于 IO 引擎(一个术语 fio 用来表示 IO 是如何传递给内核的)。 例如,如果您想在 Linux 上使用本机异步运行工作负载,然后在 Windows 上比较相同的工作负载,只需将单个 IO 引擎行更改为 Windows 上的本机版本。 或者,如果您想要分布尾部的更详细的延迟百分位统计数据,那也很容易。 只需指定您感兴趣的确切百分位数,fio 就会为您跟踪。
尽管最初是在 Linux 上开发的,但 fio 中与操作系统特定功能无关的区域可以在从 Windows 到 HP-UX 到 Android 的任何平台上运行。 在 Linux、Windows、Solaris 等上也有本地 IO 引擎。这是混合环境的一个关键特性,您希望能够在不同的操作环境上运行(尽可能接近)相同的工作负载。 此外,虽然 fio 通常直接在目标机器上运行,但它也支持网络连接。 您可以在目标机器上运行服务器后端,并在客户端机器上运行数据收集前端。 这使得它更易于管理,尤其是当 fio 经常在多台机器上使用时。
Fio 主要是一个基于文本的 CLI 应用程序,尽管最初支持基于 gtk 的跨平台 GUI 前端 (gfio)。 在本文发布时,gfio 包含在最新的 fio 版本 v2.1 中,它应该相当稳定。 它能够作为 CLI 客户端支持的任何工作负载的 GUI 前端。 它还为 GUI 编辑作业选项和工作负载提供基本支持,尽管由于 gfio 正在进行中,全面支持仍在开发中。
Fio 还支持三种不同类型的输出格式。 “经典”输出是默认输出,它会在工作负载结束时转储工作负载统计信息。 还支持 CSV 格式,尽管这种支持正在慢慢减少以支持基于 JSON 的输出格式。 后者要灵活得多,并且具有易于为人和计算机解析的优点。
得益于其充满活力的用户和开发社区的协同作用,Fio 一直在快速发展。 它比竞争项目更容易运行,足够灵活以完成用户的任务,并且它的开销足够低以全速驱动任何类型的存储系统。 再加上它比其他任何东西都更丰富的选项和报告,fio 是一个很好的工具。
为什么 StorageReview.com 使用 FIO
随着我们开始增加企业存储评论的数量和深度,我们一直需要更好的基准测试工具来准确衡量跨多个操作系统的不同存储产品的性能。 Iometer 或 Vdbench 等传统工作负载生成器软件与其非本机操作系统的兼容性有限,或者它们难以扩展高性能存储设备(如 PCIe 应用程序加速器或高性能网络存储)的负载。 自从我们开始实施 FIO 以来,它已经解决了其中的许多问题,甚至更进一步,支持长时间测试期间的脚本编写。 这种整体功能使其成为我们所有企业评论的首选综合基准。
在我们的评测中,我们使用 FIO 来衡量存储设备在给定时间段内的性能。 对于大多数产品,这包括在我们进行主要测试之前的 6 小时预处理。 对于较大的 PCIe 存储设备可能无法在测试中进入稳定状态数小时,我们在主要测试开始前的 12 小时内进行了两倍的预处理。 我们的综合企业存储基准流程从分析驱动器在彻底的预处理阶段的运行方式开始。 每个可比较的产品首先使用供应商的工具进行安全擦除,然后使用相同的工作负载预处理到稳定状态,设备将在 16 个线程的重负载下进行测试,每个线程有 16 个未完成队列。 完成这个过程,然后我们在多个线程/队列深度配置文件中以设定的时间间隔进行测试,以显示轻度和重度使用情况下的性能。
预处理和初级稳态测试:
- 吞吐量(读+写 IOPS 聚合)
- 平均延迟(读+写延迟一起平均)
- 最大延迟(峰值读取或写入延迟)
- 延迟标准偏差(读+写标准偏差一起平均)
我们的企业综合工作负载分析包括不同的配置文件以反映一些真实世界的任务。 开发这些配置文件是为了更容易与我们过去的基准测试以及广泛发布的值(例如最大 4k 读写速度和 8k 70/30,通常用于企业硬件)进行比较。
- 4k
- 100% 读取或 100% 写入
- 100% 万
- fio –filename=/dev/sdx –direct=1 –rw=randrw –refill_buffers –norandommap –randrepeat=0 –ioengine=libaio –bs=4k –rwmixread=100 –iodepth=16 –numjobs=16 –runtime=60 –group_reporting –名称=4ktest
- 8k 70/30
- 70% 读取,30% 写入
- 100% 万
- fio –filename=/dev/sdx –direct=1 –rw=randrw –refill_buffers –norandommap –randrepeat=0 –ioengine=libaio –bs=8k –rwmixread=70 –iodepth=16 –numjobs=16 –runtime=60 –group_reporting –名称=8k7030test
目前我们利用 FIO 版本 2.0.7 (x64) 在 CentOS 6.3 中用于我们的 Linux 性能测试和 FIO 版本 2.0.12.2 (x64) 在 Windows Server 2008 R2 SP1 中用于我们的 Windows 性能。
StorageReview 企业测试平台
存储解决方案已通过 FIO 综合基准测试 StorageReview 企业测试实验室 利用独立服务器。 我们利用 HP ProLiant DL380/DL360 Gen9 来展示真实的性能,只需更改存储适配器或网络接口即可将我们的 DL380/DL360 连接到不同的存储产品。 DL380/DL360 已证明自己可以提供与第三方设备的良好兼容性,使其成为这种多样化测试环境的绝佳首选平台。
(第二代) 联想ThinkServer RD240
- 2 个英特尔至强 X5650(2.66GHz,12MB 缓存)
- 英特尔 5500+ ICH10R 芯片组
- 内存 – 8GB (2 x 4GB) 1333Mhz DDR3 Registered RDIMM
- Windows Server 2008 Standard Edition R2 SP1 64 位和 CentOS 6.2 64 位
- LSI 9211 SAS/SATA 6.0Gb/秒 HBA
(第二代) 联想ThinkServer RD630
- 2 x Intel Xeon E5-2620(2.0GHz,15MB 缓存,6 核)
- 英特尔 C602 芯片组
- 内存 – 16GB (2 x 8GB) 1333Mhz DDR3 Registered RDIMM
- Windows Server 2008 R2 SP1 64 位、Windows Server 2012 Standard、CentOS 6.3 64 位
- 100GB 美光 RealSSD P400e 启动固态硬盘
- LSI 9207-8i SAS/SATA 6.0Gb/s HBA(用于基准测试 SSD 或 HDD)
(第二代) 惠普ProLiant DL380/DL360 Gen9
- 双 Intel E5-2667 v3 CPU(3.2GHz,8 核,20MB 缓存)
- 256GB 内存(16GB x 16 DDR4,每个 CPU 128GB)
- Windows Server 2012 R2、CentOS 7.0
- 400GB 启动 SSD – Windows
- 300GB 引导硬盘 – Linux
- LSI 9300-8e SAS/SATA 12.0Gb/秒 HBA (用于基准测试 SSD 或 HDD)
- 美超微SuperChassis 846BE1C-R1K28B SAS3 JBOD(用于连接 SSD 或 HDD)