在磁盘测试中,fio是最常用的测试的工具,其下载网址为https://github.com/axboe/fio;
对于fio,其测试命令有许多,这个大家很容易就可以查到,此处不讲解具体的测试命令,
而是讲一下大概的源码框架。
Fio的入口函数在fio.c的main函数,其结构如下所示:
fio.c文件:
int main(int argc,char*argvO,char*envp0){
if(initialize_fio(envp)) //libfio.c 文件————进行fio初始化,有64位对齐、大端小端模式、hash、文件锁等
return 1;
if(fio_server_create_sk_key()) // server.c文件-为线程创建私有数据TSD-
goto done;
if(parse_options(argc,argv)) // read-to-pipe-async 文件-解析main函数的参数
goto done_key;
fio_time_init(); // 初始化时钟相关
if(nr_clients){
set_genesis_time();
if(fio_start_all_clients()) // 与一些驱动进行远程连接操作,例如SPKD
goto done_key;
ret=fio_hanuie_clienis(&tio_cliei.t_ops);
}else
ret=fio_backend(NULL); // backend.c 文件 fio 逻辑走向,开始处理问题
}
fio_server_create_sk_key()函数是为线程创建私有数据,关于线程私有数据的概念可以参
考该链接-https://www.cnblogs.com/smarty/p/4046215.html;
接下来看一下fio_backend()函数——backend.c文件: