Lines Matching +full:multi +full:- +full:block
1 .. SPDX-License-Identifier: GPL-2.0
4 Multi-Queue Block IO Queueing Mechanism (blk-mq)
7 The Multi-Queue Block IO Queueing Mechanism is an API to enable fast storage
9 through queueing and submitting IO requests to block devices simultaneously,
16 ----------
19 development of the kernel. The Block IO subsystem aimed to achieve the best
26 However, with the development of Solid State Drives and Non-Volatile Memories
30 in those devices' design, the multi-queue mechanism was introduced.
32 The former design had a single queue to store block IO requests with a single
36 to different CPUs) wanted to perform block IO. Instead of this, the blk-mq API
42 ---------
44 When the userspace performs IO to a block device (reading or writing a file,
45 for instance), blk-mq takes action: it will store and manage IO requests to
46 the block device, acting as middleware between the userspace (and a file
47 system, if present) and the block device driver.
49 blk-mq has two group of queues: software staging queues and hardware dispatch
50 queues. When the request arrives at the block layer, it will try the shortest
59 resources to accept more requests, blk-mq will place requests on a temporary
65 The block IO subsystem adds requests in the software staging queues
68 block layer through the data structure struct bio. The block layer
71 the number of queues is defined by a per-CPU or per-node basis.
74 instance, requests for sector 3-6, 6-7, 7-9 can become one request for 3-9.
87 There are several schedulers implemented by the block layer, each one following
91 <https://www.kernel.org/doc/html/latest/block/index.html>`_. The scheduling
107 buffer), and are the last step of the block layer submission code before the
109 block layer removes requests from the associated software queues and tries to
113 added to a linked list (``hctx->dispatch``) of requests. Then,
114 next time the block layer runs a queue, it will send the requests laying at the
124 Neither the block layer nor the device protocols guarantee
128 Tag-based completion
133 is generated by the block layer and later reused by the device driver, removing
135 driver, the tag is sent back to the block layer to notify it of the finalization.
140 ---------------
142 - `Linux Block IO: Introducing Multi-queue SSD Access on Multi-core Systems <http://kernel.dk/blk-m…
144 - `NOOP scheduler <https://en.wikipedia.org/wiki/Noop_scheduler>`_
146 - `Null block device driver <https://www.kernel.org/doc/html/latest/block/null_blk.html>`_
151 .. kernel-doc:: include/linux/blk-mq.h
153 .. kernel-doc:: block/blk-mq.c