[dpdk-dev,2.3] tools/dpdk_nic_bind.py: Verbosely warn the user on bind

Message ID 1449850823-29017-1-git-send-email-aconole@redhat.com (mailing list archive)
State Rejected, archived
Delegated to: Thomas Monjalon
Headers

Commit Message

Aaron Conole Dec. 11, 2015, 4:20 p.m. UTC
  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

Aaron Conole Jan. 26, 2016, 7:25 p.m. UTC | #1
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
  
Thomas Monjalon Jan. 26, 2016, 8:14 p.m. UTC | #2
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.
  
David Marchand Jan. 26, 2016, 8:21 p.m. UTC | #3
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.
  
Thomas Monjalon March 1, 2016, 8:38 a.m. UTC | #4
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.
  

Patch

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