Skip to the content.

Null block device driver

1. Overview

空块设备 (/dev/nullb*) 用于对各种块层实现进行基准测试。 它模拟 X GB 大小的块设备。 它不执行任何读/写操作,只是在请求队列中将它们标记为完成。 以下情况是可能的:

多队列块层

无阻挡层(称为生物基)

它们都为系统中的每个核心都有一个完成队列。

2. Module parameters

queue_mode=[0-2]: Default: 2-Multi-queue

 选择模块应实例化的块层。

   
0 Bio-based
1 Single-queue (已弃用)
2 Multi-queue

home_node=[0–nr_nodes]: Default: NUMA_NO_NODE

 选择从哪个 CPU 节点分配数据结构。

gb=[Size in GB]: Default: 250GB

 向系统报告的设备的大小。

bs=[Block size (in bytes)]: Default: 512 bytes

 向系统报告的块大小。

nr_devices=[Number of devices]: Default: 1

 实例化的块设备数量。 它们被实例化为 /dev/nullb0 等。

irqmode=[0-2]: Default: 1-Soft-irq

 用于完成块层 IO 的完成模式。

   
0 None
1 软中断。 使用IPI完成跨CPU节点的IO。 模拟从设备所连接的主节点以外的其他 CPU 节点发出 IO 时的开销
2 Timer: 在完成之前等待每个 IN 特定的时间(完成纳秒)

completion_nsec=[ns]: Default: 10,000ns

 与 irqmode=2(定时器)结合。 每个完成事件必须等待的时间。

submit_queues=[1..nr_cpus]: Default: 1

 附加到设备驱动程序的提交队列的数量。 如果未设置,则默认为1。对于多队列,当use_per_node_hctx模块参数为1时,它被忽略。

hw_queue_depth=[0..qdepth]: Default: 64

 设备的硬件队列深度。

memory_backed=[0/1]: Default: 0

 是否使用内存缓冲区来响应 IO 请求。

   
0 不传输任何数据来响应 IO 请求
1 使用内存缓冲区来响应 IO 请求

discard=[0/1]: Default: 0

 支持丢弃操作(需要内存支持的 null_blk 设备)。

   
0 不支持丢弃操作
1 启用对丢弃操作的支持

cache_size=[Size in MB]: Default: 0

 内存支持设备的缓存大小(以 MB 为单位)。

mbps=[Maximum bandwidth in MB/s]: Default: 0 (no limit)

 设备性能的带宽限制。

3. Multi-queue specific parameters

use_per_node_hctx=[0/1]: Default: 0

 硬件上下文队列的数量。

   
0 提交队列的数量设置为submit_queues参数的值
1 多队列块层实例化为系统中每个CPU节点的硬件调度队列

no_sched=[0/1]: Default: 0

 启用/禁用 io 调度程序。

   
0 nullb* 使用默认的 blk-mq io 调度程序
1 nullb* 不使用 io 调度程序

blocking=[0/1]: Default: 0

 请求队列的阻塞行为。

   
0 注册为非阻塞 blk-mq 驱动设备
1 注册为阻塞blk-mq驱动设备,null_blk会设置BLK_MQ_F_BLOCKING标志,表明它有时/总是需要在其->queue_rq()函数中阻塞

shared_tags=[0/1]: Default: 0

 在设备之间共享标签。

   
0 标签集不共享
1 blk-mq 的设备之间共享的标签集。 仅当 nr_devices > 1 时才有意义,否则没有设置可共享的标签

zoned=[0/1]: Default: 0

 设备是随机访问或分区块设备。

   
0 块设备作为随机访问块设备公开
1 块设备作为主机管理的分区块设备公开。 需要 CONFIG_BLK_DEV_ZONED

zone_size=[MB]: Default: 256

 作为分区块设备公开时的每个区域大小。 必须是二的幂。

zone_nr_conv=[nr_conv]: Default: 0

 块设备分区时要创建的常规区域的数量。 如果 zone_nr_conv >= nr_zones,则会减少到 nr_zones - 1。