最近在项目中需要测试SSD相关的性能API以及相应的模块,为了更加通用,通过向FIO添加plug-in的方式进行测试,只能先去看懂FIO针对plug-in的测试原理,主要以ioengine-libaio进行介绍.
1.数据结构
1.thread_data(fio/fio.h):主要有两个作用:
1.用来接收由command line传递的参数;并传递给新的线程或进程fio job;
2.描述以一个线程(pthread)/进程(process)为单位的fio job;
2. io_u(io_u.h): 一个io request unit的描述符,主要用来管理由command line传递下来的参数所生成的io request,需要注意的是在编写fio plug-in时,需要在该结构体中定义iocb(例如:libaio的io request unit)
struct io_u {
...;
union {
#ifdef CONFIG_LIBAIO
struct iocb iocb;
#endif
};
};
3.fio_file(file.h):描述与thread_data相关的file(一个file/device的描述结构体)
struct fio_file {
...;
};
4.libaio中定义的相关结构体
2. io流程
1.FIO 根据在command line中得到的options, 经过parse command line,把相关参数fill到struct thread_options
2.在do_io中,调用get_io_u填充struct io_u,并且发送到backend(libaio)去prepare aio的io unit单位(iocb)