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