0.前言

内核版本:4.19

文档目的: 主要以null_dev为例来研究多队列的工作机制, 为了能够凸显多队列的工作流程。

本文主要罗列了null blk dev设备以及与之关联的多队列的基本数据结构之间的关联,并做简要说明。

2.主要数据结构

 

nullb driver分析0-基本数据结构说明

struct nullb

null block设备数据描述符,它包含request_queue,nullb->q->queuedata被初始化为nullb

其中list用于链入null block链表的连接件

struct nullb_device

null block设备描述符

struct nullb_queue

null block硬件队列描述符

struct nullb_cmd

null block命令描述符

struct blk_mq_tag_set

tag集合描述符,每个cpu core一个blk_mq_tags结构体, 每个blk_mq_tags是通过bitmap来描述,每个bit代表一个tag。

mq_map中保存了软硬件队列之间的映射关系;

numa_node相关的bitmap将从哪个node分配。

struct blk_mq_tags

用于tag空间管理

struct request_queue

request_queue为nullb的派发队列,在null_init->null_add_dev->blk_mq_init_queue时创建,通过nullb->q来指向它.bio_split是队列的bio池描述符,用来分配bio和bio_vec;

poll_cb为用于统计的回调函数;mq_map即为blk_mq_tag_set->mq_map,它在null_init_tag_set时分配,保存了软硬件队列的映射关系;nr_requests表示软队列的个数;

struct backing_dev_info

 

blk_stat_callback

每个request_queue队列都有一个blk_stat_callback与之对应,会通过定时器回调函数来定时统计request状态

相关文章:

  • 2022-01-29
  • 2022-12-23
  • 2022-12-23
  • 2021-04-07
  • 2021-09-29
  • 2022-12-23
  • 2022-12-23
  • 2022-01-30
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-07-09
  • 2021-11-21
相关资源
相似解决方案