[dpdk-dev,2.3] tools/dpdk_nic_bind.py: Verbosely warn the user on bind
Commit Message
DPDK ports are only detected during the EAL initialization. After that, any
new DPDK ports which are bound will not be visible to the application.
The dpdk_nic_bind.py can be a bit more helpful to let users know that DPDK
enabled applications will not find rebound ports until after they have been
restarted.
Signed-off-by: Aaron Conole <aconole@redhat.com>
---
tools/dpdk_nic_bind.py | 8 ++++++++
1 file changed, 8 insertions(+)
Comments
Ping... This patch has been sitting^Hrotting for a bit over a month.
> DPDK ports are only detected during the EAL initialization. After that, any
> new DPDK ports which are bound will not be visible to the application.
>
> The dpdk_nic_bind.py can be a bit more helpful to let users know that DPDK
> enabled applications will not find rebound ports until after they have been
> restarted.
>
> Signed-off-by: Aaron Conole <aconole@redhat.com>
>
> ---
> tools/dpdk_nic_bind.py | 8 ++++++++
> 1 file changed, 8 insertions(+)
>
> diff --git a/tools/dpdk_nic_bind.py b/tools/dpdk_nic_bind.py
> index f02454e..ca39389 100755
> --- a/tools/dpdk_nic_bind.py
> +++ b/tools/dpdk_nic_bind.py
> @@ -344,8 +344,10 @@ def bind_one(dev_id, driver, force):
> dev["Driver_str"] = "" # clear driver string
>
> # if we are binding to one of DPDK drivers, add PCI id's to that driver
> + bDpdkDriver = False
> if driver in dpdk_drivers:
> filename = "/sys/bus/pci/drivers/%s/new_id" % driver
> + bDpdkDriver = True
> try:
> f = open(filename, "w")
> except:
> @@ -371,12 +373,18 @@ def bind_one(dev_id, driver, force):
> try:
> f.write(dev_id)
> f.close()
> + if bDpdkDriver:
> + print "Device rebound to dpdk driver."
> + print "Remember to restart any application that will use this port."
> except:
> # for some reason, closing dev_id after adding a new PCI ID to new_id
> # results in IOError. however, if the device was successfully bound,
> # we don't care for any errors and can safely ignore IOError
> tmp = get_pci_device_details(dev_id)
> if "Driver_str" in tmp and tmp["Driver_str"] == driver:
> + if bDpdkDriver:
> + print "Device rebound to dpdk driver."
> + print "Remember to restart any application that will use this port."
> return
> print "Error: bind failed for %s - Cannot bind to driver %s" % (dev_id, driver)
> if saved_driver is not None: # restore any previous driver
2015-12-11 11:20, Aaron Conole:
> DPDK ports are only detected during the EAL initialization. After that, any
> new DPDK ports which are bound will not be visible to the application.
>
> The dpdk_nic_bind.py can be a bit more helpful to let users know that DPDK
> enabled applications will not find rebound ports until after they have been
> restarted.
I think it's better to improve hotplug and allow hot binding.
A work is in progress towards this direction.
David, can you confirm?
Is this patch still valuable in the meantime?
> --- a/tools/dpdk_nic_bind.py
> +++ b/tools/dpdk_nic_bind.py
> @@ -344,8 +344,10 @@ def bind_one(dev_id, driver, force):
> dev["Driver_str"] = "" # clear driver string
>
> # if we are binding to one of DPDK drivers, add PCI id's to that driver
> + bDpdkDriver = False
Please do not use camel case.
On Tue, Jan 26, 2016 at 9:14 PM, Thomas Monjalon
<thomas.monjalon@6wind.com> wrote:
> 2015-12-11 11:20, Aaron Conole:
>> DPDK ports are only detected during the EAL initialization. After that, any
>> new DPDK ports which are bound will not be visible to the application.
>>
>> The dpdk_nic_bind.py can be a bit more helpful to let users know that DPDK
>> enabled applications will not find rebound ports until after they have been
>> restarted.
>
> I think it's better to improve hotplug and allow hot binding.
> A work is in progress towards this direction.
> David, can you confirm?
I intend to provide some rfc patches later this week, for next release.
2016-01-26 21:21, David Marchand:
> On Tue, Jan 26, 2016 at 9:14 PM, Thomas Monjalon
> <thomas.monjalon@6wind.com> wrote:
> > 2015-12-11 11:20, Aaron Conole:
> >> DPDK ports are only detected during the EAL initialization. After that, any
> >> new DPDK ports which are bound will not be visible to the application.
> >>
> >> The dpdk_nic_bind.py can be a bit more helpful to let users know that DPDK
> >> enabled applications will not find rebound ports until after they have been
> >> restarted.
> >
> > I think it's better to improve hotplug and allow hot binding.
> > A work is in progress towards this direction.
> > David, can you confirm?
>
> I intend to provide some rfc patches later this week, for next release.
These "auto-hotplug" patches won't be ready for 16.04.
But it's possible to use a new bound device with rte_eth_dev_attach().
So this patch is rejected.
@@ -344,8 +344,10 @@ def bind_one(dev_id, driver, force):
dev["Driver_str"] = "" # clear driver string
# if we are binding to one of DPDK drivers, add PCI id's to that driver
+ bDpdkDriver = False
if driver in dpdk_drivers:
filename = "/sys/bus/pci/drivers/%s/new_id" % driver
+ bDpdkDriver = True
try:
f = open(filename, "w")
except:
@@ -371,12 +373,18 @@ def bind_one(dev_id, driver, force):
try:
f.write(dev_id)
f.close()
+ if bDpdkDriver:
+ print "Device rebound to dpdk driver."
+ print "Remember to restart any application that will use this port."
except:
# for some reason, closing dev_id after adding a new PCI ID to new_id
# results in IOError. however, if the device was successfully bound,
# we don't care for any errors and can safely ignore IOError
tmp = get_pci_device_details(dev_id)
if "Driver_str" in tmp and tmp["Driver_str"] == driver:
+ if bDpdkDriver:
+ print "Device rebound to dpdk driver."
+ print "Remember to restart any application that will use this port."
return
print "Error: bind failed for %s - Cannot bind to driver %s" % (dev_id, driver)
if saved_driver is not None: # restore any previous driver