searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

Fio引擎开发简介

2023-05-12 10:11:52
174
0

1. Fio简介

FIO是Linux kernel的IO部分维护者axobe开发:Github: https://github.com/axboe/fio。

FIO一种IO系统的Benchmark和压力测试工具,可以模拟不同IO场景下的IO负载。最初axobe设计FIO是为了节省为特定负载设计专门测试程序,进行性能测试,以及debug的时间。写测试程序非常浪费时间,因为不同的测试负载的IO场景不同,他们都用自己的方式产生IO,故需要模拟这些IO负载,FIO需足够灵活。

FIO支持 13种不同的 I/O 引擎, 包括:sync,mmap,libaio,posixaio,SG v3,splice,null,network,syslet,guasi,solarisaio等等。 FIO 的引擎能识别简单易懂的job file文本去进行测试,同时能提供各种 I/O 性能指标,如I/O 延迟、IOPS和带宽等。因此被大量的制造商和广泛的用户认可,作为确认IO系统良好的测试工具。

2. 为什么要开发fio引擎

Fio支持多大13种I/O引擎,但是有时我们会自己开发存储系统或封装自己的IO接口。这时需要提供一个benchmark,而fio就是一个很好的选择,这时就需要在fio上添加一个适配自己IO接口的引擎,然后就可以用fio测试我们自己的存储系统了。

3.开发流程

Fio提供了一个引擎框架,要添加新的fio引擎,就需要在框架上填写自己的逻辑。

添加引擎可以在fio代码里添加,也可以以外部插件的形式添加,新加引擎代码是一样的:

  • 在代码里添加:直接在fio/engines目录里添加。
  • 以外部插件的形式添加:将新fio引擎编译成动态库,fio运行时通过“ioengine”参数指定动态库引擎。

Fio引擎框架我分为3部分:

  • 注册和注销引擎框架
  • 引擎io流程框架
  • 引擎参数框架

 

在此已rbd引擎为例介绍。

3.1. 注册和注销引擎框架

通过“__attribute__”设置,可以让fio启动时,在调用main()前执行注册,在main()后执行注销。

3.2. 引擎io流程框架

流程框架里有一系列io过程需要调用的函数指针,不用全部实现,具体实现可以参考fio的rbd引擎。

3.3. 引擎参数框架

如果新加的引擎启动需要参数,可以通过参数框架,设置参数,具体实现可以参考fio的rbd引擎。

0条评论
0 / 1000
星火
3文章数
0粉丝数
星火
3 文章 | 0 粉丝
星火
3文章数
0粉丝数
星火
3 文章 | 0 粉丝
原创

Fio引擎开发简介

2023-05-12 10:11:52
174
0

1. Fio简介

FIO是Linux kernel的IO部分维护者axobe开发:Github: https://github.com/axboe/fio。

FIO一种IO系统的Benchmark和压力测试工具,可以模拟不同IO场景下的IO负载。最初axobe设计FIO是为了节省为特定负载设计专门测试程序,进行性能测试,以及debug的时间。写测试程序非常浪费时间,因为不同的测试负载的IO场景不同,他们都用自己的方式产生IO,故需要模拟这些IO负载,FIO需足够灵活。

FIO支持 13种不同的 I/O 引擎, 包括:sync,mmap,libaio,posixaio,SG v3,splice,null,network,syslet,guasi,solarisaio等等。 FIO 的引擎能识别简单易懂的job file文本去进行测试,同时能提供各种 I/O 性能指标,如I/O 延迟、IOPS和带宽等。因此被大量的制造商和广泛的用户认可,作为确认IO系统良好的测试工具。

2. 为什么要开发fio引擎

Fio支持多大13种I/O引擎,但是有时我们会自己开发存储系统或封装自己的IO接口。这时需要提供一个benchmark,而fio就是一个很好的选择,这时就需要在fio上添加一个适配自己IO接口的引擎,然后就可以用fio测试我们自己的存储系统了。

3.开发流程

Fio提供了一个引擎框架,要添加新的fio引擎,就需要在框架上填写自己的逻辑。

添加引擎可以在fio代码里添加,也可以以外部插件的形式添加,新加引擎代码是一样的:

  • 在代码里添加:直接在fio/engines目录里添加。
  • 以外部插件的形式添加:将新fio引擎编译成动态库,fio运行时通过“ioengine”参数指定动态库引擎。

Fio引擎框架我分为3部分:

  • 注册和注销引擎框架
  • 引擎io流程框架
  • 引擎参数框架

 

在此已rbd引擎为例介绍。

3.1. 注册和注销引擎框架

通过“__attribute__”设置,可以让fio启动时,在调用main()前执行注册,在main()后执行注销。

3.2. 引擎io流程框架

流程框架里有一系列io过程需要调用的函数指针,不用全部实现,具体实现可以参考fio的rbd引擎。

3.3. 引擎参数框架

如果新加的引擎启动需要参数,可以通过参数框架,设置参数,具体实现可以参考fio的rbd引擎。

文章来自个人专栏
librbd
3 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
0
0