Skip to main content

devbind: inspect and control PCI device-driver binding in Linux

devbind

PyPI Python Test

devbind is a small CLI for binding and unbinding PCI devices to a chosen kernel driver via sysfs. The typical use is moving a device between its native driver (e.g. nvme) and a user space driver framework (vfio-pci, uio_pci_generic) for DPDK/SPDK and xNVMe/uPCIe workloads. devbind --list also reports the process RLIMIT_MEMLOCK and warns when the soft limit is below the 64 MiB threshold those frameworks inherit.

Install

pipx install devbind

Or standalone (single-file, stdlib only, no pip needed):

curl -fsSL https://raw.githubusercontent.com/xnvme/devbind/main/src/devbind/devbind.py \
  -o ~/.local/bin/devbind && chmod +x ~/.local/bin/devbind

Shell completion

devbind --print-completion bash > ~/.local/share/bash-completion/completions/devbind

Open a new shell (or source the file) and tab-completion is live: devbind --bind <TAB> lists nvme vfio-pci vfio-noiommu uio_pci_generic.

Usage

$ devbind --help
usage: devbind [-h] [--version] [--classcode CLASSCODE] [--device DEVICE]
               [--list] [--unbind] [--bind BIND] [--verbose]
               [--print-completion SHELL]

Inspect and control PCI device-driver binding in Linux

options:
  -h, --help            show this help message and exit
  --version             show program's version number and exit
  --classcode CLASSCODE
                        The class of PCIe devices to scan for
  --device DEVICE       Instead of all; then only the given PCI address.
  --list                Print PCIe device(s); such as their 'bdf' and driver-
                        association.
  --unbind              Unbind if bound.
  --bind BIND           Unbind if bound; then bind to the given driver-name
                        [nvme, vfio-pci, uio_pci_generic] or to a .ko driver
                        file (path)
  --verbose             Enable verbose logging
  --print-completion SHELL
                        Print shell completion script to stdout and exit

A few common invocations:

devbind --list                                       # list NVMe devices and their drivers
sudo devbind --bind vfio-pci --device 0000:01:00.0   # bind one device to vfio-pci
sudo devbind --bind nvme --device 0000:01:00.0       # rebind to the native driver
sudo devbind --unbind --device 0000:01:00.0          # unbind without rebinding

devbind --list sample output (stock WSL host, no NVMe devices visible):

system:
  drivers:
  - uio_pci_generic: {'available': False}
  - vfio-noiommu: {'available': False}
  - vfio-pci: {'available': False}
  - nvme: {'available': True}
  limits:
    memlock_soft: 64 MB
    memlock_hard: 64 MB

On a host with NVMe devices visible, a props: block is also printed per device with bdf, vendor, device, classcode, driver, iommugroup, handles, and is_used.

Related

  • iommu: inspect and configure the IOMMU in Linux.
  • hugepages: inspect and manage Linux hugepages.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

devbind-0.3.10.tar.gz (8.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

devbind-0.3.10-py3-none-any.whl (8.7 kB view details)

Uploaded Python 3

File details

Details for the file devbind-0.3.10.tar.gz.

File metadata

  • Download URL: devbind-0.3.10.tar.gz
  • Upload date:
  • Size: 8.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for devbind-0.3.10.tar.gz
Algorithm Hash digest
SHA256 e91b541209e14737efac12c99ad9a3cdbf4ee7e7b244777a3f5a94367f5b6c5c
MD5 424fd120b905f9a5fa61d764d5a2a394
BLAKE2b-256 3a3480d85ac4daab9fbda276bd3c7d10ae7d35fe15803dc28a5bda644f05642b

See more details on using hashes here.

Provenance

The following attestation bundles were made for devbind-0.3.10.tar.gz:

Publisher: publish.yml on xnvme/devbind

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file devbind-0.3.10-py3-none-any.whl.

File metadata

  • Download URL: devbind-0.3.10-py3-none-any.whl
  • Upload date:
  • Size: 8.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for devbind-0.3.10-py3-none-any.whl
Algorithm Hash digest
SHA256 e55500cd56ddf445cdb45becb591e3321e91feec1448fc3d6d24dd54b0e12a24
MD5 15cce404df39505e969417878ae31b15
BLAKE2b-256 4b1d2c287ab569e36ecd563259df48473b47ee997313d87bb9071f4f8db5a33a

See more details on using hashes here.

Provenance

The following attestation bundles were made for devbind-0.3.10-py3-none-any.whl:

Publisher: publish.yml on xnvme/devbind

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page