aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorChristian Trautman <ctrautma@redhat.com>2017-08-09 15:11:15 -0400
committerMartin Klozik <martinx.klozik@intel.com>2017-08-18 07:13:38 +0000
commitf023e531fe8e02cfb2bcc76dd6226746b183e4b4 (patch)
tree5372a24237c787d115c598e5ee7f38c0cadec2bf /src
parent73025baf2e393c61c59957e8714d2ddd54d25e51 (diff)
driverctl: Add driverctl binding tool
Adds driverctl as a binding tool option for dpdk devices. JIRA ticket contains test results to verify it works when using dpdk-devbind or driverctl. JIRA: VSPERF-525 Change-Id: Ia7a6e43a4b6fb3ba21f5d87d601f4ea4b95b7dab Signed-off-by: Christian Trautman <ctrautma@redhat.com>
Diffstat (limited to 'src')
-rw-r--r--src/dpdk/dpdk.py53
1 files changed, 36 insertions, 17 deletions
diff --git a/src/dpdk/dpdk.py b/src/dpdk/dpdk.py
index 438fe40b..2f120129 100644
--- a/src/dpdk/dpdk.py
+++ b/src/dpdk/dpdk.py
@@ -138,7 +138,7 @@ def _vhost_user_cleanup():
def _bind_nics():
- """Bind NICs using the Intel DPDK ``dpdk*bind.py`` tool.
+ """Bind NICs using the bind tool specified in the configuration.
"""
if not len(_NICS_PCI):
_LOGGER.info('NICs are not configured - nothing to bind')
@@ -153,26 +153,39 @@ def _bind_nics():
tasks.run_task(['sudo', 'chmod', '-R', '666', '/dev/vfio/'],
_LOGGER, 'Setting VFIO permissions .. 0666',
True)
-
- tasks.run_task(['sudo', S.getValue('TOOLS')['bind-tool'],
- '--bind=' + _driver] +
- _NICS_PCI, _LOGGER,
- 'Binding NICs %s...' % _NICS_PCI,
- True)
+ if 'driverctl' in S.getValue('TOOLS')['bind-tool'].lower():
+ for nic in _NICS_PCI:
+ tasks.run_task(['sudo', S.getValue('TOOLS')['bind-tool'], '-v',
+ 'set-override'] + [nic] + [_driver], _LOGGER,
+ 'Binding NIC %s...' % nic, True)
+ else:
+ tasks.run_task(['sudo', S.getValue('TOOLS')['bind-tool'],
+ '--bind=' + _driver] +
+ _NICS_PCI, _LOGGER,
+ 'Binding NICs %s...' % _NICS_PCI,
+ True)
except subprocess.CalledProcessError:
_LOGGER.error('Unable to bind NICs %s', str(_NICS_PCI))
+
def _unbind_nics():
- """Unbind NICs using the Intel DPDK ``dpdk*bind.py`` tool.
+ """Unbind NICs using the bind tool specified in the configuration.
"""
if not len(_NICS_PCI):
_LOGGER.info('NICs are not configured - nothing to unbind')
return
try:
- tasks.run_task(['sudo', S.getValue('TOOLS')['bind-tool'], '--unbind'] +
- _NICS_PCI, _LOGGER,
- 'Unbinding NICs %s...' % str(_NICS_PCI),
- True)
+ if 'driverctl' in S.getValue('TOOLS')['bind-tool'].lower():
+ for nic in _NICS_PCI:
+ tasks.run_task(['sudo', S.getValue('TOOLS')['bind-tool'], '-v',
+ 'unset-override'] + [nic], _LOGGER,
+ 'Binding NIC %s...' % nic, True)
+ else:
+ tasks.run_task(['sudo', S.getValue('TOOLS')['bind-tool'],
+ '--unbind'] +
+ _NICS_PCI, _LOGGER,
+ 'Unbinding NICs %s...' % str(_NICS_PCI),
+ True)
except subprocess.CalledProcessError:
_LOGGER.error('Unable to unbind NICs %s', str(_NICS_PCI))
# Rebind NICs to their original drivers
@@ -180,15 +193,21 @@ def _unbind_nics():
for nic in _NICS:
try:
if nic['driver']:
- tasks.run_task(['sudo', S.getValue('TOOLS')['bind-tool'], '--bind',
- nic['driver'], nic['pci']],
- _LOGGER, 'Binding NIC %s to %s...' %
- (nic['pci'], nic['driver']),
- True)
+ if 'driverctl' in S.getValue('TOOLS')['bind-tool'].lower():
+ # driverctl restores the driver automatically on unset
+ break
+ else:
+ tasks.run_task(['sudo', S.getValue('TOOLS')['bind-tool'],
+ '--bind',
+ nic['driver'], nic['pci']],
+ _LOGGER, 'Binding NIC %s to %s...' %
+ (nic['pci'], nic['driver']),
+ True)
except subprocess.CalledProcessError:
_LOGGER.error('Unable to bind NIC %s to driver %s',
nic['pci'], nic['driver'])
+
class Dpdk(object):
"""A context manager for the system init/cleanup.
"""