Hi,

When testing VPP, I ended up running most of the tests on a testbed with 
Solarflare X2522. DPDK has support for them, as documented here 
https://doc.dpdk.org/guides/nics/sfc_efx.html
The vpp sources disable the build of the dpdk sfc driver.
And didn't recognize the device id.

Below is a patch to enable the build and make vpp recognize it.
With that, VPP can run with the NIC. I do not have insights into if it might be 
running suboptimal or similar, but I can see that it seems to function.
I tried it via the ld preload library, and with that, vpp gives lower latency 
than the kernel, but higher than solarflares own OpenOnload kernel bypass.

Any objections to enable net/sfc?



```
diff --git a/build/external/packages/dpdk.mk b/build/external/packages/dpdk.mk
index 2f0f8ea27..26e967dab 100644
--- a/build/external/packages/dpdk.mk
+++ b/build/external/packages/dpdk.mk
@@ -84,7 +84,6 @@ DPDK_DRIVERS_DISABLED := baseband/\*, \
        net/liquidio,                                           \
        net/pcap,                                                       \
        net/pfe,                                                        \
-       net/sfc,                                                        \
        net/softnic,                                            \
        net/thunderx,                                           \
        raw/ifpga,                                                      \
diff --git a/src/plugins/dpdk/device/driver.c b/src/plugins/dpdk/device/driver.c
index bb7301aa9..b0958b6ff 100644
--- a/src/plugins/dpdk/device/driver.c
+++ b/src/plugins/dpdk/device/driver.c
@@ -134,6 +134,9 @@ static dpdk_driver_t dpdk_drivers[] = {
   {
     .drivers = DPDK_DRIVERS ({ "net_gve", "Google vNIC" }),
     .interface_name_prefix = "VirtualFunctionEthernet",
+  },
+  {
+    .drivers = DPDK_DRIVERS ({ "net_sfc_efx", "Solarflare X2 Family" }),
   }
 };

diff --git a/src/plugins/dpdk/device/init.c b/src/plugins/dpdk/device/init.c
index d96622573..951b310b3 100644
--- a/src/plugins/dpdk/device/init.c
+++ b/src/plugins/dpdk/device/init.c
@@ -828,6 +828,9 @@ dpdk_bind_devices_to_uio (dpdk_config_main_t * conf)
     /* Google vNIC */
     else if (d->vendor_id == 0x1ae0 && d->device_id == 0x0042)
       ;
+    /* Solarflare */
+    else if (d->vendor_id == 0x1924)
+      ;
     else
       {
         dpdk_log_warn ("Unsupported PCI device 0x%04x:0x%04x found "
```


Thanks,
Jakob



-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#27103): https://lists.fd.io/g/vpp-dev/message/27103
Mute This Topic: https://lists.fd.io/mt/120205546/21656
Group Owner: [email protected]
Unsubscribe: https://lists.fd.io/g/vpp-dev/leave/14379924/21656/631435203/xyzzy 
[[email protected]]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to