-
Notifications
You must be signed in to change notification settings - Fork 1.2k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
VMD driver bindings not reset after none override #2926
Comments
wolf-218_dmesg_nodriver.log |
Hi @tanabarr, I think that behavior should be expected.
unbinds the nvme driver on all drives (from all VMD domains).
binds the loads the vfio-pci driver on VMD domains
tries to bind vmd driver to the specified domains. You can either specify the drives behind
or do an extra |
[Bug scrub] @tanabarr Any feedback on the above ? |
Thanks @ksztyber and @tomzawadzki , I will update our usage as per this comment: DAOS tools that wrap the setup script apply PCI_ALLOWED filter based on the PCI list in DAOS config files. This enables a subset of the host SSDs to be selected for use. As a result the setup script gets called with the VMD domains in the allow list in both setup and reset mode. As the override call is made during the setup workflow to speed up the binding times on high-capacity drives, we end up in the described scenario when only a subset of domains are specified in the DAOS config file and after reset is called not all drives are visible in /dev/nvme* (which confuses people). The intent behind applying the allow list when running the setup script is to enable other applications on the same host to use SPDK with SSDs not in use by DAOS (and only bind a subset to userspace drivers). The solution you have suggested to call reset without an allow list is an acceptable compromise. Whilst this conceptually disturbs the intended ability to "play nicely with other applications that might be using system SSDs" the reality is that when devices need to be re-bound back for use via the kernel it's unlikely that not specifying an allow list will cause any unintended consequences on DAOS storage servers. I think this ticket can be marked as resolved. |
DAOS update ticket reference: https://daosio.atlassian.net/browse/DAOS-13521 |
To avoid undesired consequences related to spdk/spdk#2926, perform an extra SPDK reset (without PCI_ALLOWED) at the end of the daos_server nvme reset command when VMD is enabled. This will reset any dangling NVMe devices left unbound after the DRIVER_OVERRIDE=none setup call was used in daos_server nvme prepare. Features: control Required-githooks: true Signed-off-by: Tom Nabarro <tom.nabarro@intel.com>
…#12397) To avoid undesired consequences related to spdk/spdk#2926, perform an extra SPDK reset (without PCI_ALLOWED) at the end of the daos_server nvme reset command when VMD is enabled. This will reset any dangling NVMe devices left unbound after the DRIVER_OVERRIDE=none setup call was used in daos_server nvme prepare. Signed-off-by: Tom Nabarro <tom.nabarro@intel.com>
…#12397) To avoid undesired consequences related to spdk/spdk#2926, perform an extra SPDK reset (without PCI_ALLOWED) at the end of the daos_server nvme reset command when VMD is enabled. This will reset any dangling NVMe devices left unbound after the DRIVER_OVERRIDE=none setup call was used in daos_server nvme prepare. Signed-off-by: Tom Nabarro <tom.nabarro@intel.com>
…#12397) (#12482) To avoid undesired consequences related to spdk/spdk#2926, perform an extra SPDK reset (without PCI_ALLOWED) at the end of the daos_server nvme reset command when VMD is enabled. This will reset any dangling NVMe devices left unbound after the DRIVER_OVERRIDE=none setup call was used in daos_server nvme prepare. Signed-off-by: Tom Nabarro <tom.nabarro@intel.com>
Sighting report
If I run
setup.sh
withDRIVER_OVERRIDE=none
(as recommended to speed up binding on VMD systems), all the VMD domains get unbound (and are therefore inaccessible from OS) but in order to get them back I trysetup.sh
reset withPCI_ALLOWED='0000:2a:00.5 0000:62:00.5 0000:a1:00.5 0000:dd:00.5'
only half of the devices are then visible even though the VMD domain shown to have been returned to the kernel driver:spdk/scripts/setup.sh status
shows that the backing devices have not been bound back to the kernel which explains why they are not visible in the OS under/dev/nvme*
.I think the workaround in my case is to make sure we populate
PCI_ALLOWED
whenever we setDRIVER_OVERRIDE=none
.Expected Behavior
Current Behavior
Possible Solution
Workaround to change step no.1 below to:
BUT using this workaround defeats the point of running the preparatory
DRIVER_OVERRIDE=none
as an interim step to improve VMD driver binding times on high-capacity systems. Specifying VMD controller addresses in this command slows the setup time down dramatically.Steps to Reproduce
Devices can be returned to the kernel using the following sequence when in this state:
Context (Environment including OS version, SPDK version, etc.)
Rocky Linux 8.6, SPDK 22.01.2, IceLake
The text was updated successfully, but these errors were encountered: