xref: /qemu/docs/system/devices/nvme.rst (revision 751babf5bb7f7e77f2676a9a9e54cc75a947b81b)
1a3d9f3a9SKlaus Jensen==============
2a3d9f3a9SKlaus JensenNVMe Emulation
3a3d9f3a9SKlaus Jensen==============
4a3d9f3a9SKlaus Jensen
5a3d9f3a9SKlaus JensenQEMU provides NVMe emulation through the ``nvme``, ``nvme-ns`` and
6a3d9f3a9SKlaus Jensen``nvme-subsys`` devices.
7a3d9f3a9SKlaus Jensen
8a3d9f3a9SKlaus JensenSee the following sections for specific information on
9a3d9f3a9SKlaus Jensen
10a3d9f3a9SKlaus Jensen  * `Adding NVMe Devices`_, `additional namespaces`_ and `NVM subsystems`_.
11a3d9f3a9SKlaus Jensen  * Configuration of `Optional Features`_ such as `Controller Memory Buffer`_,
12a3d9f3a9SKlaus Jensen    `Simple Copy`_, `Zoned Namespaces`_, `metadata`_ and `End-to-End Data
13a3d9f3a9SKlaus Jensen    Protection`_,
14a3d9f3a9SKlaus Jensen
15a3d9f3a9SKlaus JensenAdding NVMe Devices
16a3d9f3a9SKlaus Jensen===================
17a3d9f3a9SKlaus Jensen
18a3d9f3a9SKlaus JensenController Emulation
19a3d9f3a9SKlaus Jensen--------------------
20a3d9f3a9SKlaus Jensen
21a3d9f3a9SKlaus JensenThe QEMU emulated NVMe controller implements version 1.4 of the NVM Express
22a3d9f3a9SKlaus Jensenspecification. All mandatory features are implement with a couple of exceptions
23a3d9f3a9SKlaus Jensenand limitations:
24a3d9f3a9SKlaus Jensen
25a3d9f3a9SKlaus Jensen  * Accounting numbers in the SMART/Health log page are reset when the device
26a3d9f3a9SKlaus Jensen    is power cycled.
27a3d9f3a9SKlaus Jensen  * Interrupt Coalescing is not supported and is disabled by default.
28a3d9f3a9SKlaus Jensen
29a3d9f3a9SKlaus JensenThe simplest way to attach an NVMe controller on the QEMU PCI bus is to add the
30a3d9f3a9SKlaus Jensenfollowing parameters:
31a3d9f3a9SKlaus Jensen
32a3d9f3a9SKlaus Jensen.. code-block:: console
33a3d9f3a9SKlaus Jensen
34a3d9f3a9SKlaus Jensen    -drive file=nvm.img,if=none,id=nvm
35a3d9f3a9SKlaus Jensen    -device nvme,serial=deadbeef,drive=nvm
36a3d9f3a9SKlaus Jensen
37a3d9f3a9SKlaus JensenThere are a number of optional general parameters for the ``nvme`` device. Some
38a3d9f3a9SKlaus Jensenare mentioned here, but see ``-device nvme,help`` to list all possible
39a3d9f3a9SKlaus Jensenparameters.
40a3d9f3a9SKlaus Jensen
41a3d9f3a9SKlaus Jensen``max_ioqpairs=UINT32`` (default: ``64``)
42a3d9f3a9SKlaus Jensen  Set the maximum number of allowed I/O queue pairs. This replaces the
43a3d9f3a9SKlaus Jensen  deprecated ``num_queues`` parameter.
44a3d9f3a9SKlaus Jensen
45a3d9f3a9SKlaus Jensen``msix_qsize=UINT16`` (default: ``65``)
46a3d9f3a9SKlaus Jensen  The number of MSI-X vectors that the device should support.
47a3d9f3a9SKlaus Jensen
48a3d9f3a9SKlaus Jensen``mdts=UINT8`` (default: ``7``)
49a3d9f3a9SKlaus Jensen  Set the Maximum Data Transfer Size of the device.
50a3d9f3a9SKlaus Jensen
51a3d9f3a9SKlaus Jensen``use-intel-id`` (default: ``off``)
52a3d9f3a9SKlaus Jensen  Since QEMU 5.2, the device uses a QEMU allocated "Red Hat" PCI Device and
53a3d9f3a9SKlaus Jensen  Vendor ID. Set this to ``on`` to revert to the unallocated Intel ID
54a3d9f3a9SKlaus Jensen  previously used.
55a3d9f3a9SKlaus Jensen
56a3d9f3a9SKlaus JensenAdditional Namespaces
57a3d9f3a9SKlaus Jensen---------------------
58a3d9f3a9SKlaus Jensen
59a3d9f3a9SKlaus JensenIn the simplest possible invocation sketched above, the device only support a
60a3d9f3a9SKlaus Jensensingle namespace with the namespace identifier ``1``. To support multiple
61a3d9f3a9SKlaus Jensennamespaces and additional features, the ``nvme-ns`` device must be used.
62a3d9f3a9SKlaus Jensen
63a3d9f3a9SKlaus Jensen.. code-block:: console
64a3d9f3a9SKlaus Jensen
65a3d9f3a9SKlaus Jensen   -device nvme,id=nvme-ctrl-0,serial=deadbeef
66a3d9f3a9SKlaus Jensen   -drive file=nvm-1.img,if=none,id=nvm-1
67a3d9f3a9SKlaus Jensen   -device nvme-ns,drive=nvm-1
68a3d9f3a9SKlaus Jensen   -drive file=nvm-2.img,if=none,id=nvm-2
69a3d9f3a9SKlaus Jensen   -device nvme-ns,drive=nvm-2
70a3d9f3a9SKlaus Jensen
71a3d9f3a9SKlaus JensenThe namespaces defined by the ``nvme-ns`` device will attach to the most
72a3d9f3a9SKlaus Jensenrecently defined ``nvme-bus`` that is created by the ``nvme`` device. Namespace
73b980c1aeSStefan Weilidentifiers are allocated automatically, starting from ``1``.
74a3d9f3a9SKlaus Jensen
75a3d9f3a9SKlaus JensenThere are a number of parameters available:
76a3d9f3a9SKlaus Jensen
77a3d9f3a9SKlaus Jensen``nsid`` (default: ``0``)
78a3d9f3a9SKlaus Jensen  Explicitly set the namespace identifier.
79a3d9f3a9SKlaus Jensen
80a3d9f3a9SKlaus Jensen``uuid`` (default: *autogenerated*)
81a3d9f3a9SKlaus Jensen  Set the UUID of the namespace. This will be reported as a "Namespace UUID"
82a3d9f3a9SKlaus Jensen  descriptor in the Namespace Identification Descriptor List.
83a3d9f3a9SKlaus Jensen
846870cfb8SHeinrich Schuchardt``eui64``
856870cfb8SHeinrich Schuchardt  Set the EUI-64 of the namespace. This will be reported as a "IEEE Extended
866870cfb8SHeinrich Schuchardt  Unique Identifier" descriptor in the Namespace Identification Descriptor List.
873276dde4SHeinrich Schuchardt  Since machine type 6.1 a non-zero default value is used if the parameter
883276dde4SHeinrich Schuchardt  is not provided. For earlier machine types the field defaults to 0.
896870cfb8SHeinrich Schuchardt
90a3d9f3a9SKlaus Jensen``bus``
91a3d9f3a9SKlaus Jensen  If there are more ``nvme`` devices defined, this parameter may be used to
92a3d9f3a9SKlaus Jensen  attach the namespace to a specific ``nvme`` device (identified by an ``id``
93a3d9f3a9SKlaus Jensen  parameter on the controller device).
94a3d9f3a9SKlaus Jensen
95a3d9f3a9SKlaus JensenNVM Subsystems
96a3d9f3a9SKlaus Jensen--------------
97a3d9f3a9SKlaus Jensen
98a3d9f3a9SKlaus JensenAdditional features becomes available if the controller device (``nvme``) is
99a3d9f3a9SKlaus Jensenlinked to an NVM Subsystem device (``nvme-subsys``).
100a3d9f3a9SKlaus Jensen
101a3d9f3a9SKlaus JensenThe NVM Subsystem emulation allows features such as shared namespaces and
102a3d9f3a9SKlaus Jensenmultipath I/O.
103a3d9f3a9SKlaus Jensen
104a3d9f3a9SKlaus Jensen.. code-block:: console
105a3d9f3a9SKlaus Jensen
106a3d9f3a9SKlaus Jensen   -device nvme-subsys,id=nvme-subsys-0,nqn=subsys0
107a3d9f3a9SKlaus Jensen   -device nvme,serial=a,subsys=nvme-subsys-0
108a3d9f3a9SKlaus Jensen   -device nvme,serial=b,subsys=nvme-subsys-0
109a3d9f3a9SKlaus Jensen
110a3d9f3a9SKlaus JensenThis will create an NVM subsystem with two controllers. Having controllers
111a3d9f3a9SKlaus Jensenlinked to an ``nvme-subsys`` device allows additional ``nvme-ns`` parameters:
112a3d9f3a9SKlaus Jensen
113916b0f0bSKlaus Jensen``shared`` (default: ``on`` since 6.2)
114a3d9f3a9SKlaus Jensen  Specifies that the namespace will be attached to all controllers in the
115916b0f0bSKlaus Jensen  subsystem. If set to ``off``, the namespace will remain a private namespace
116916b0f0bSKlaus Jensen  and may only be attached to a single controller at a time. Shared namespaces
117916b0f0bSKlaus Jensen  are always automatically attached to all controllers (also when controllers
118916b0f0bSKlaus Jensen  are hotplugged).
119a3d9f3a9SKlaus Jensen
120a3d9f3a9SKlaus Jensen``detached`` (default: ``off``)
121a3d9f3a9SKlaus Jensen  If set to ``on``, the namespace will be be available in the subsystem, but
122916b0f0bSKlaus Jensen  not attached to any controllers initially. A shared namespace with this set
123916b0f0bSKlaus Jensen  to ``on`` will never be automatically attached to controllers.
124a3d9f3a9SKlaus Jensen
125a3d9f3a9SKlaus JensenThus, adding
126a3d9f3a9SKlaus Jensen
127a3d9f3a9SKlaus Jensen.. code-block:: console
128a3d9f3a9SKlaus Jensen
129a3d9f3a9SKlaus Jensen   -drive file=nvm-1.img,if=none,id=nvm-1
130916b0f0bSKlaus Jensen   -device nvme-ns,drive=nvm-1,nsid=1
131a3d9f3a9SKlaus Jensen   -drive file=nvm-2.img,if=none,id=nvm-2
132916b0f0bSKlaus Jensen   -device nvme-ns,drive=nvm-2,nsid=3,shared=off,detached=on
133a3d9f3a9SKlaus Jensen
134916b0f0bSKlaus Jensenwill cause NSID 1 will be a shared namespace that is initially attached to both
135916b0f0bSKlaus Jensencontrollers. NSID 3 will be a private namespace due to ``shared=off`` and only
136916b0f0bSKlaus Jensenattachable to a single controller at a time. Additionally it will not be
137916b0f0bSKlaus Jensenattached to any controller initially (due to ``detached=on``) or to hotplugged
138916b0f0bSKlaus Jensencontrollers.
139a3d9f3a9SKlaus Jensen
140a3d9f3a9SKlaus JensenOptional Features
141a3d9f3a9SKlaus Jensen=================
142a3d9f3a9SKlaus Jensen
143a3d9f3a9SKlaus JensenController Memory Buffer
144a3d9f3a9SKlaus Jensen------------------------
145a3d9f3a9SKlaus Jensen
146a3d9f3a9SKlaus Jensen``nvme`` device parameters related to the Controller Memory Buffer support:
147a3d9f3a9SKlaus Jensen
148a3d9f3a9SKlaus Jensen``cmb_size_mb=UINT32`` (default: ``0``)
149a3d9f3a9SKlaus Jensen  This adds a Controller Memory Buffer of the given size at offset zero in BAR
150a3d9f3a9SKlaus Jensen  2.
151a3d9f3a9SKlaus Jensen
152a3d9f3a9SKlaus Jensen``legacy-cmb`` (default: ``off``)
153a3d9f3a9SKlaus Jensen  By default, the device uses the "v1.4 scheme" for the Controller Memory
154a3d9f3a9SKlaus Jensen  Buffer support (i.e, the CMB is initially disabled and must be explicitly
155a3d9f3a9SKlaus Jensen  enabled by the host). Set this to ``on`` to behave as a v1.3 device wrt. the
156a3d9f3a9SKlaus Jensen  CMB.
157a3d9f3a9SKlaus Jensen
158a3d9f3a9SKlaus JensenSimple Copy
159a3d9f3a9SKlaus Jensen-----------
160a3d9f3a9SKlaus Jensen
161a3d9f3a9SKlaus JensenThe device includes support for TP 4065 ("Simple Copy Command"). A number of
162a3d9f3a9SKlaus Jensenadditional ``nvme-ns`` device parameters may be used to control the Copy
163a3d9f3a9SKlaus Jensencommand limits:
164a3d9f3a9SKlaus Jensen
165a3d9f3a9SKlaus Jensen``mssrl=UINT16`` (default: ``128``)
166a3d9f3a9SKlaus Jensen  Set the Maximum Single Source Range Length (``MSSRL``). This is the maximum
167a3d9f3a9SKlaus Jensen  number of logical blocks that may be specified in each source range.
168a3d9f3a9SKlaus Jensen
169a3d9f3a9SKlaus Jensen``mcl=UINT32`` (default: ``128``)
170a3d9f3a9SKlaus Jensen  Set the Maximum Copy Length (``MCL``). This is the maximum number of logical
171a3d9f3a9SKlaus Jensen  blocks that may be specified in a Copy command (the total for all source
172a3d9f3a9SKlaus Jensen  ranges).
173a3d9f3a9SKlaus Jensen
174a3d9f3a9SKlaus Jensen``msrc=UINT8`` (default: ``127``)
175a3d9f3a9SKlaus Jensen  Set the Maximum Source Range Count (``MSRC``). This is the maximum number of
176a3d9f3a9SKlaus Jensen  source ranges that may be used in a Copy command. This is a 0's based value.
177a3d9f3a9SKlaus Jensen
178a3d9f3a9SKlaus JensenZoned Namespaces
179a3d9f3a9SKlaus Jensen----------------
180a3d9f3a9SKlaus Jensen
181a3d9f3a9SKlaus JensenA namespaces may be "Zoned" as defined by TP 4053 ("Zoned Namespaces"). Set
182a3d9f3a9SKlaus Jensen``zoned=on`` on an ``nvme-ns`` device to configure it as a zoned namespace.
183a3d9f3a9SKlaus Jensen
184a3d9f3a9SKlaus JensenThe namespace may be configured with additional parameters
185a3d9f3a9SKlaus Jensen
186a3d9f3a9SKlaus Jensen``zoned.zone_size=SIZE`` (default: ``128MiB``)
187a3d9f3a9SKlaus Jensen  Define the zone size (``ZSZE``).
188a3d9f3a9SKlaus Jensen
189a3d9f3a9SKlaus Jensen``zoned.zone_capacity=SIZE`` (default: ``0``)
190a3d9f3a9SKlaus Jensen  Define the zone capacity (``ZCAP``). If left at the default (``0``), the zone
191a3d9f3a9SKlaus Jensen  capacity will equal the zone size.
192a3d9f3a9SKlaus Jensen
193a3d9f3a9SKlaus Jensen``zoned.descr_ext_size=UINT32`` (default: ``0``)
194a3d9f3a9SKlaus Jensen  Set the Zone Descriptor Extension Size (``ZDES``). Must be a multiple of 64
195a3d9f3a9SKlaus Jensen  bytes.
196a3d9f3a9SKlaus Jensen
197a3d9f3a9SKlaus Jensen``zoned.cross_read=BOOL`` (default: ``off``)
198a3d9f3a9SKlaus Jensen  Set to ``on`` to allow reads to cross zone boundaries.
199a3d9f3a9SKlaus Jensen
200a3d9f3a9SKlaus Jensen``zoned.max_active=UINT32`` (default: ``0``)
201a3d9f3a9SKlaus Jensen  Set the maximum number of active resources (``MAR``). The default (``0``)
202a3d9f3a9SKlaus Jensen  allows all zones to be active.
203a3d9f3a9SKlaus Jensen
204a3d9f3a9SKlaus Jensen``zoned.max_open=UINT32`` (default: ``0``)
205a3d9f3a9SKlaus Jensen  Set the maximum number of open resources (``MOR``). The default (``0``)
206a3d9f3a9SKlaus Jensen  allows all zones to be open. If ``zoned.max_active`` is specified, this value
207a3d9f3a9SKlaus Jensen  must be less than or equal to that.
208a3d9f3a9SKlaus Jensen
209176c0a49SKeith Busch``zoned.zasl=UINT8`` (default: ``0``)
210176c0a49SKeith Busch  Set the maximum data transfer size for the Zone Append command. Like
211176c0a49SKeith Busch  ``mdts``, the value is specified as a power of two (2^n) and is in units of
212176c0a49SKeith Busch  the minimum memory page size (CAP.MPSMIN). The default value (``0``)
213176c0a49SKeith Busch  has this property inherit the ``mdts`` value.
214176c0a49SKeith Busch
215a3d9f3a9SKlaus JensenMetadata
216a3d9f3a9SKlaus Jensen--------
217a3d9f3a9SKlaus Jensen
218a3d9f3a9SKlaus JensenThe virtual namespace device supports LBA metadata in the form separate
219a3d9f3a9SKlaus Jensenmetadata (``MPTR``-based) and extended LBAs.
220a3d9f3a9SKlaus Jensen
221a3d9f3a9SKlaus Jensen``ms=UINT16`` (default: ``0``)
222a3d9f3a9SKlaus Jensen  Defines the number of metadata bytes per LBA.
223a3d9f3a9SKlaus Jensen
224a3d9f3a9SKlaus Jensen``mset=UINT8`` (default: ``0``)
225a3d9f3a9SKlaus Jensen  Set to ``1`` to enable extended LBAs.
226a3d9f3a9SKlaus Jensen
227a3d9f3a9SKlaus JensenEnd-to-End Data Protection
228a3d9f3a9SKlaus Jensen--------------------------
229a3d9f3a9SKlaus Jensen
230a3d9f3a9SKlaus JensenThe virtual namespace device supports DIF- and DIX-based protection information
231a3d9f3a9SKlaus Jensen(depending on ``mset``).
232a3d9f3a9SKlaus Jensen
233a3d9f3a9SKlaus Jensen``pi=UINT8`` (default: ``0``)
234a3d9f3a9SKlaus Jensen  Enable protection information of the specified type (type ``1``, ``2`` or
235a3d9f3a9SKlaus Jensen  ``3``).
236a3d9f3a9SKlaus Jensen
237a3d9f3a9SKlaus Jensen``pil=UINT8`` (default: ``0``)
238a3d9f3a9SKlaus Jensen  Controls the location of the protection information within the metadata. Set
239a3d9f3a9SKlaus Jensen  to ``1`` to transfer protection information as the first eight bytes of
240a3d9f3a9SKlaus Jensen  metadata. Otherwise, the protection information is transferred as the last
241a3d9f3a9SKlaus Jensen  eight bytes.
242*751babf5SLukasz Maniak
243*751babf5SLukasz ManiakVirtualization Enhancements and SR-IOV (Experimental Support)
244*751babf5SLukasz Maniak-------------------------------------------------------------
245*751babf5SLukasz Maniak
246*751babf5SLukasz ManiakThe ``nvme`` device supports Single Root I/O Virtualization and Sharing
247*751babf5SLukasz Maniakalong with Virtualization Enhancements. The controller has to be linked to
248*751babf5SLukasz Maniakan NVM Subsystem device (``nvme-subsys``) for use with SR-IOV.
249*751babf5SLukasz Maniak
250*751babf5SLukasz ManiakA number of parameters are present (**please note, that they may be
251*751babf5SLukasz Maniaksubject to change**):
252*751babf5SLukasz Maniak
253*751babf5SLukasz Maniak``sriov_max_vfs`` (default: ``0``)
254*751babf5SLukasz Maniak  Indicates the maximum number of PCIe virtual functions supported
255*751babf5SLukasz Maniak  by the controller. Specifying a non-zero value enables reporting of both
256*751babf5SLukasz Maniak  SR-IOV and ARI (Alternative Routing-ID Interpretation) capabilities
257*751babf5SLukasz Maniak  by the NVMe device. Virtual function controllers will not report SR-IOV.
258*751babf5SLukasz Maniak
259*751babf5SLukasz Maniak``sriov_vq_flexible``
260*751babf5SLukasz Maniak  Indicates the total number of flexible queue resources assignable to all
261*751babf5SLukasz Maniak  the secondary controllers. Implicitly sets the number of primary
262*751babf5SLukasz Maniak  controller's private resources to ``(max_ioqpairs - sriov_vq_flexible)``.
263*751babf5SLukasz Maniak
264*751babf5SLukasz Maniak``sriov_vi_flexible``
265*751babf5SLukasz Maniak  Indicates the total number of flexible interrupt resources assignable to
266*751babf5SLukasz Maniak  all the secondary controllers. Implicitly sets the number of primary
267*751babf5SLukasz Maniak  controller's private resources to ``(msix_qsize - sriov_vi_flexible)``.
268*751babf5SLukasz Maniak
269*751babf5SLukasz Maniak``sriov_max_vi_per_vf`` (default: ``0``)
270*751babf5SLukasz Maniak  Indicates the maximum number of virtual interrupt resources assignable
271*751babf5SLukasz Maniak  to a secondary controller. The default ``0`` resolves to
272*751babf5SLukasz Maniak  ``(sriov_vi_flexible / sriov_max_vfs)``
273*751babf5SLukasz Maniak
274*751babf5SLukasz Maniak``sriov_max_vq_per_vf`` (default: ``0``)
275*751babf5SLukasz Maniak  Indicates the maximum number of virtual queue resources assignable to
276*751babf5SLukasz Maniak  a secondary controller. The default ``0`` resolves to
277*751babf5SLukasz Maniak  ``(sriov_vq_flexible / sriov_max_vfs)``
278*751babf5SLukasz Maniak
279*751babf5SLukasz ManiakThe simplest possible invocation enables the capability to set up one VF
280*751babf5SLukasz Maniakcontroller and assign an admin queue, an IO queue, and a MSI-X interrupt.
281*751babf5SLukasz Maniak
282*751babf5SLukasz Maniak.. code-block:: console
283*751babf5SLukasz Maniak
284*751babf5SLukasz Maniak   -device nvme-subsys,id=subsys0
285*751babf5SLukasz Maniak   -device nvme,serial=deadbeef,subsys=subsys0,sriov_max_vfs=1,
286*751babf5SLukasz Maniak    sriov_vq_flexible=2,sriov_vi_flexible=1
287*751babf5SLukasz Maniak
288*751babf5SLukasz ManiakThe minimum steps required to configure a functional NVMe secondary
289*751babf5SLukasz Maniakcontroller are:
290*751babf5SLukasz Maniak
291*751babf5SLukasz Maniak  * unbind flexible resources from the primary controller
292*751babf5SLukasz Maniak
293*751babf5SLukasz Maniak.. code-block:: console
294*751babf5SLukasz Maniak
295*751babf5SLukasz Maniak   nvme virt-mgmt /dev/nvme0 -c 0 -r 1 -a 1 -n 0
296*751babf5SLukasz Maniak   nvme virt-mgmt /dev/nvme0 -c 0 -r 0 -a 1 -n 0
297*751babf5SLukasz Maniak
298*751babf5SLukasz Maniak  * perform a Function Level Reset on the primary controller to actually
299*751babf5SLukasz Maniak    release the resources
300*751babf5SLukasz Maniak
301*751babf5SLukasz Maniak.. code-block:: console
302*751babf5SLukasz Maniak
303*751babf5SLukasz Maniak   echo 1 > /sys/bus/pci/devices/0000:01:00.0/reset
304*751babf5SLukasz Maniak
305*751babf5SLukasz Maniak  * enable VF
306*751babf5SLukasz Maniak
307*751babf5SLukasz Maniak.. code-block:: console
308*751babf5SLukasz Maniak
309*751babf5SLukasz Maniak   echo 1 > /sys/bus/pci/devices/0000:01:00.0/sriov_numvfs
310*751babf5SLukasz Maniak
311*751babf5SLukasz Maniak  * assign the flexible resources to the VF and set it ONLINE
312*751babf5SLukasz Maniak
313*751babf5SLukasz Maniak.. code-block:: console
314*751babf5SLukasz Maniak
315*751babf5SLukasz Maniak   nvme virt-mgmt /dev/nvme0 -c 1 -r 1 -a 8 -n 1
316*751babf5SLukasz Maniak   nvme virt-mgmt /dev/nvme0 -c 1 -r 0 -a 8 -n 2
317*751babf5SLukasz Maniak   nvme virt-mgmt /dev/nvme0 -c 1 -r 0 -a 9 -n 0
318*751babf5SLukasz Maniak
319*751babf5SLukasz Maniak  * bind the NVMe driver to the VF
320*751babf5SLukasz Maniak
321*751babf5SLukasz Maniak.. code-block:: console
322*751babf5SLukasz Maniak
323*751babf5SLukasz Maniak   echo 0000:01:00.1 > /sys/bus/pci/drivers/nvme/bind