xref: /openbmc/linux/Documentation/block/null_blk.rst (revision 4f2c0a4acffbec01079c28f839422e64ddeff004)
104c56957SAndré Almeida.. SPDX-License-Identifier: GPL-2.0
204c56957SAndré Almeida
3898bd37aSMauro Carvalho Chehab========================
4898bd37aSMauro Carvalho ChehabNull block device driver
5898bd37aSMauro Carvalho Chehab========================
6898bd37aSMauro Carvalho Chehab
704c56957SAndré AlmeidaOverview
804c56957SAndré Almeida========
9898bd37aSMauro Carvalho Chehab
1004c56957SAndré AlmeidaThe null block device (``/dev/nullb*``) is used for benchmarking the various
11898bd37aSMauro Carvalho Chehabblock-layer implementations. It emulates a block device of X gigabytes in size.
1204c56957SAndré AlmeidaIt does not execute any read/write operation, just mark them as complete in
1304c56957SAndré Almeidathe request queue. The following instances are possible:
14898bd37aSMauro Carvalho Chehab
15898bd37aSMauro Carvalho Chehab  Multi-queue block-layer
16898bd37aSMauro Carvalho Chehab
17898bd37aSMauro Carvalho Chehab    - Request-based.
18898bd37aSMauro Carvalho Chehab    - Configurable submission queues per device.
19898bd37aSMauro Carvalho Chehab
20898bd37aSMauro Carvalho Chehab  No block-layer (Known as bio-based)
21898bd37aSMauro Carvalho Chehab
22898bd37aSMauro Carvalho Chehab    - Bio-based. IO requests are submitted directly to the device driver.
23898bd37aSMauro Carvalho Chehab    - Directly accepts bio data structure and returns them.
24898bd37aSMauro Carvalho Chehab
25898bd37aSMauro Carvalho ChehabAll of them have a completion queue for each core in the system.
26898bd37aSMauro Carvalho Chehab
2704c56957SAndré AlmeidaModule parameters
2804c56957SAndré Almeida=================
29898bd37aSMauro Carvalho Chehab
30898bd37aSMauro Carvalho Chehabqueue_mode=[0-2]: Default: 2-Multi-queue
31898bd37aSMauro Carvalho Chehab  Selects which block-layer the module should instantiate with.
32898bd37aSMauro Carvalho Chehab
33898bd37aSMauro Carvalho Chehab  =  ============
34898bd37aSMauro Carvalho Chehab  0  Bio-based
3504c56957SAndré Almeida  1  Single-queue (deprecated)
36898bd37aSMauro Carvalho Chehab  2  Multi-queue
37898bd37aSMauro Carvalho Chehab  =  ============
38898bd37aSMauro Carvalho Chehab
39898bd37aSMauro Carvalho Chehabhome_node=[0--nr_nodes]: Default: NUMA_NO_NODE
40898bd37aSMauro Carvalho Chehab  Selects what CPU node the data structures are allocated from.
41898bd37aSMauro Carvalho Chehab
42898bd37aSMauro Carvalho Chehabgb=[Size in GB]: Default: 250GB
43898bd37aSMauro Carvalho Chehab  The size of the device reported to the system.
44898bd37aSMauro Carvalho Chehab
45898bd37aSMauro Carvalho Chehabbs=[Block size (in bytes)]: Default: 512 bytes
46898bd37aSMauro Carvalho Chehab  The block size reported to the system.
47898bd37aSMauro Carvalho Chehab
48898bd37aSMauro Carvalho Chehabnr_devices=[Number of devices]: Default: 1
49898bd37aSMauro Carvalho Chehab  Number of block devices instantiated. They are instantiated as /dev/nullb0,
50898bd37aSMauro Carvalho Chehab  etc.
51898bd37aSMauro Carvalho Chehab
52898bd37aSMauro Carvalho Chehabirqmode=[0-2]: Default: 1-Soft-irq
53898bd37aSMauro Carvalho Chehab  The completion mode used for completing IOs to the block-layer.
54898bd37aSMauro Carvalho Chehab
55898bd37aSMauro Carvalho Chehab  =  ===========================================================================
56898bd37aSMauro Carvalho Chehab  0  None.
57898bd37aSMauro Carvalho Chehab  1  Soft-irq. Uses IPI to complete IOs across CPU nodes. Simulates the overhead
58898bd37aSMauro Carvalho Chehab     when IOs are issued from another CPU node than the home the device is
59898bd37aSMauro Carvalho Chehab     connected to.
60898bd37aSMauro Carvalho Chehab  2  Timer: Waits a specific period (completion_nsec) for each IO before
61898bd37aSMauro Carvalho Chehab     completion.
62898bd37aSMauro Carvalho Chehab  =  ===========================================================================
63898bd37aSMauro Carvalho Chehab
64898bd37aSMauro Carvalho Chehabcompletion_nsec=[ns]: Default: 10,000ns
65898bd37aSMauro Carvalho Chehab  Combined with irqmode=2 (timer). The time each completion event must wait.
66898bd37aSMauro Carvalho Chehab
6704c56957SAndré Almeidasubmit_queues=[1..nr_cpus]: Default: 1
68898bd37aSMauro Carvalho Chehab  The number of submission queues attached to the device driver. If unset, it
69898bd37aSMauro Carvalho Chehab  defaults to 1. For multi-queue, it is ignored when use_per_node_hctx module
70898bd37aSMauro Carvalho Chehab  parameter is 1.
71898bd37aSMauro Carvalho Chehab
72898bd37aSMauro Carvalho Chehabhw_queue_depth=[0..qdepth]: Default: 64
73898bd37aSMauro Carvalho Chehab  The hardware queue depth of the device.
74898bd37aSMauro Carvalho Chehab
75*058efe00SVincent Fumemory_backed=[0/1]: Default: 0
76*058efe00SVincent Fu  Whether or not to use a memory buffer to respond to IO requests
77*058efe00SVincent Fu
78*058efe00SVincent Fu  =  =============================================
79*058efe00SVincent Fu  0  Transfer no data in response to IO requests
80*058efe00SVincent Fu  1  Use a memory buffer to respond to IO requests
81*058efe00SVincent Fu  =  =============================================
82*058efe00SVincent Fu
83*058efe00SVincent Fudiscard=[0/1]: Default: 0
84*058efe00SVincent Fu  Support discard operations (requires memory-backed null_blk device).
85*058efe00SVincent Fu
86*058efe00SVincent Fu  =  =====================================
87*058efe00SVincent Fu  0  Do not support discard operations
88*058efe00SVincent Fu  1  Enable support for discard operations
89*058efe00SVincent Fu  =  =====================================
90*058efe00SVincent Fu
91*058efe00SVincent Fucache_size=[Size in MB]: Default: 0
92*058efe00SVincent Fu  Cache size in MB for memory-backed device.
93*058efe00SVincent Fu
94*058efe00SVincent Fumbps=[Maximum bandwidth in MB/s]: Default: 0 (no limit)
95*058efe00SVincent Fu  Bandwidth limit for device performance.
96*058efe00SVincent Fu
9704c56957SAndré AlmeidaMulti-queue specific parameters
9804c56957SAndré Almeida-------------------------------
99898bd37aSMauro Carvalho Chehab
100898bd37aSMauro Carvalho Chehabuse_per_node_hctx=[0/1]: Default: 0
10104c56957SAndré Almeida  Number of hardware context queues.
102898bd37aSMauro Carvalho Chehab
103898bd37aSMauro Carvalho Chehab  =  =====================================================================
104898bd37aSMauro Carvalho Chehab  0  The number of submit queues are set to the value of the submit_queues
105898bd37aSMauro Carvalho Chehab     parameter.
106898bd37aSMauro Carvalho Chehab  1  The multi-queue block layer is instantiated with a hardware dispatch
107898bd37aSMauro Carvalho Chehab     queue for each CPU node in the system.
108898bd37aSMauro Carvalho Chehab  =  =====================================================================
109898bd37aSMauro Carvalho Chehab
110898bd37aSMauro Carvalho Chehabno_sched=[0/1]: Default: 0
11104c56957SAndré Almeida  Enable/disable the io scheduler.
112898bd37aSMauro Carvalho Chehab
113898bd37aSMauro Carvalho Chehab  =  ======================================
114898bd37aSMauro Carvalho Chehab  0  nullb* use default blk-mq io scheduler
115898bd37aSMauro Carvalho Chehab  1  nullb* doesn't use io scheduler
116898bd37aSMauro Carvalho Chehab  =  ======================================
117898bd37aSMauro Carvalho Chehab
118898bd37aSMauro Carvalho Chehabblocking=[0/1]: Default: 0
11904c56957SAndré Almeida  Blocking behavior of the request queue.
120898bd37aSMauro Carvalho Chehab
121898bd37aSMauro Carvalho Chehab  =  ===============================================================
122898bd37aSMauro Carvalho Chehab  0  Register as a non-blocking blk-mq driver device.
123898bd37aSMauro Carvalho Chehab  1  Register as a blocking blk-mq driver device, null_blk will set
124898bd37aSMauro Carvalho Chehab     the BLK_MQ_F_BLOCKING flag, indicating that it sometimes/always
125898bd37aSMauro Carvalho Chehab     needs to block in its ->queue_rq() function.
126898bd37aSMauro Carvalho Chehab  =  ===============================================================
127898bd37aSMauro Carvalho Chehab
128898bd37aSMauro Carvalho Chehabshared_tags=[0/1]: Default: 0
12904c56957SAndré Almeida  Sharing tags between devices.
130898bd37aSMauro Carvalho Chehab
131898bd37aSMauro Carvalho Chehab  =  ================================================================
132898bd37aSMauro Carvalho Chehab  0  Tag set is not shared.
133898bd37aSMauro Carvalho Chehab  1  Tag set shared between devices for blk-mq. Only makes sense with
134898bd37aSMauro Carvalho Chehab     nr_devices > 1, otherwise there's no tag set to share.
135898bd37aSMauro Carvalho Chehab  =  ================================================================
136898bd37aSMauro Carvalho Chehab
137898bd37aSMauro Carvalho Chehabzoned=[0/1]: Default: 0
13804c56957SAndré Almeida  Device is a random-access or a zoned block device.
139898bd37aSMauro Carvalho Chehab
140898bd37aSMauro Carvalho Chehab  =  ======================================================================
141898bd37aSMauro Carvalho Chehab  0  Block device is exposed as a random-access block device.
142898bd37aSMauro Carvalho Chehab  1  Block device is exposed as a host-managed zoned block device. Requires
143898bd37aSMauro Carvalho Chehab     CONFIG_BLK_DEV_ZONED.
144898bd37aSMauro Carvalho Chehab  =  ======================================================================
145898bd37aSMauro Carvalho Chehab
146898bd37aSMauro Carvalho Chehabzone_size=[MB]: Default: 256
147898bd37aSMauro Carvalho Chehab  Per zone size when exposed as a zoned block device. Must be a power of two.
148898bd37aSMauro Carvalho Chehab
149898bd37aSMauro Carvalho Chehabzone_nr_conv=[nr_conv]: Default: 0
150898bd37aSMauro Carvalho Chehab  The number of conventional zones to create when block device is zoned.  If
151898bd37aSMauro Carvalho Chehab  zone_nr_conv >= nr_zones, it will be reduced to nr_zones - 1.
152