nullb driver分析6-blk-mq相关定时器

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

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
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值