目录
0.前言
内核版本:4.19
文档目的: 主要以null_dev为例来研究多队列的工作机制, 为了能够凸显多队列的工作流程,只对block层做重点分析说明,对其它代码只做注释性说明。
本文主要介绍跟多队列相关的定时器,这些定时器的出处来源于blk_mq_init_queue函数。
目前对这些定时器的分析还处于混乱状态,可能会有很多错误,建议略过:>
1. 多队列的定时器处理函数
laptop_mode_timer_fn
(1)初始化
laptop_mode_wb_timer定时器是在blk_alloc_queue_node时通过timer_setup(&q->backing_dev_info->laptop_mode_wb_timer,laptop_mode_timer_fn)初始化。laptop_mode_wb_timer内嵌在q->backing_dev_info中, 此定时器主要服务于laptop_mode,定时器回调将唤醒wb线程最终将数据从page cache写入磁盘
(2)调用定时器
laptop_io_completion启动laptop_io_completion定时器
laptop_sync_completion取消laptop_mode_wb_timer定时器
(3)定时器启动/取消时机
在laptop_mode模式或!blk_rq_is_passthrough(req)条件下:
blk_mq_free_request和blk_finish_request会通过调用laptop_io_completion来启动定时器
在在laptop_mode模式下:
ksys_sync通过调用laptop_sync_completion来取消定时器
(4)定时器处理函数
laptop_mode_ti

本文基于内核版本4.19,以null_dev为例研究多队列工作机制,重点分析block层。介绍了多队列相关定时器,其出自blk_mq_init_queue函数。详细阐述了laptop_mode_timer_fn的初始化、调用、启动/取消时机及处理函数,还列出了blk_rq_timed_out_timer等待分析的定时器。
最低0.47元/天 解锁文章
738

被折叠的 条评论
为什么被折叠?



