On 01/13/2016 11:17 PM, Aaron Conole wrote:
Existing DPDK integration is provided by use of command line options which
must be split out and passed to librte in a special manner. However, this
forces any configuration to be passed by way of a special DPDK flag, and
interferes with ovs+dpdk packaging solutions.

This commit delays dpdk initialization until after the OVS database
connection is established, at which point ovs initializes librte. It
pulls all of the config data from the OVS database, and assembles a
new argv/argc pair to be passed along.

Signed-off-by: Aaron Conole <acon...@redhat.com>
---
v2:
* Removed trailing whitespace
* Followed for() loop brace coding style
* Automatically enable DPDK when adding a DPDK enabled port
* Fixed an issue on startup when DPDK enabled ports are present
* Updated the documentation (including vswitch.xml) and documented all
   new parameters
* Dropped the premature initialization test

v3:
* Improved description language in INSTALL.DPDK.md
* Fixed the ovs-vsctl examples for DPDK
* Returned to the global dpdk-init (bullet 3 from v2)
* Fixed a build error when compiling without dpdk support enabled
* converted to xstrdup, for consistency after rebasing

  INSTALL.DPDK.md         |  81 +++++++++++++++-----
  lib/netdev-dpdk.c       | 191 ++++++++++++++++++++++++++++++++++--------------
  lib/netdev-dpdk.h       |  22 ++++--
  vswitchd/bridge.c       |   3 +
  vswitchd/ovs-vswitchd.c |  25 +------
  vswitchd/vswitch.xml    | 118 +++++++++++++++++++++++++++++-
  6 files changed, 336 insertions(+), 104 deletions(-)

diff --git a/INSTALL.DPDK.md b/INSTALL.DPDK.md
index 96b686c..46bd1a8 100644
--- a/INSTALL.DPDK.md
+++ b/INSTALL.DPDK.md
@@ -143,22 +143,64 @@ Using the DPDK with ovs-vswitchd:

  5. Start vswitchd:

-   DPDK configuration arguments can be passed to vswitchd via `--dpdk`
-   argument. This needs to be first argument passed to vswitchd process.
-   dpdk arg -c is ignored by ovs-dpdk, but it is a required parameter
-   for dpdk initialization.
+   DPDK configuration arguments can be passed to vswitchd via Open_vSwitch
+   other_config database. The recognized configuration options are listed.
+   Defaults will be provided for all values not explicitly set.
+
+   * dpdk-init
+   Specifies whether OVS should initialize and support DPDK ports. This is
+   a boolean, and defaults to false.
+
+   * dpdk-lcore-mask
+   Specifies the CPU cores on which dpdk lcore threads should be spawned.
+   The DPDK lcore threads are used for DPDK library tasks, such as
+   library internal message processing, logging, etc. Value should be in
+   the form of a hex string (so '0x123') similar to the 'taskset' mask
+   input.
+   If not specified, the value will be determined by choosing the lowest
+   CPU core from initial cpu affinity list. Otherwise, the value will be
+   passed directly to the DPDK library.
+   For performance reasons, it is best to set this to a single core on
+   the system, rather than allow lcore threads to float.
+
+   * dpdk-mem-channels
+   This sets the number of memory spread channels per CPU socket. It is purely
+   an optimization flag.
+   * dpdk-alloc-mem
+   This sets the total memory to preallocate from hugepages regardless of
+   processor socket. It is recommended to use dpdk-socket-mem instead.

Since dpdk-socket-mem is the recommended option, does it actually make sense to support this at all? In case of DPDK itself I'd hazard a guess the -m option simply predates --socket-mem so its just a historical leftover (but again, this is just a guess)

+   * dpdk-socket-mem
+   Comma separated list of memory to pre-allocate from hugepages on specific
+   sockets.
+
+   * dpdk-hugepage-dir
+   Directory where hugetlbfs is mounted
+
+   * cuse-dev-name
+   Option to set the vhost_cuse character device name.
+
+   * vhost-sock-dir
+   Option to set the path to the vhost_user unix socket files.
+

Hmm, this is quite a limited set of options considering that previously you could pass arbitrary DPDK options to vswitchd (unless I'm being blind again, wouldn't be the first time :)

I dont remember all DPDK options off-hand, much less know how many of them are actually used in the wild, but what I suspect people would sooner than later miss are:
- support for adding virtual devices (ie --vdev equivalent)
- blacklist/whitelist of devices (especially with virtio devices)

Adding virtual devices via "raw" DPDK args is horribly klunky of course, it could use some nicer way, ditto for blacklist/whitelist.

Anyway, I think it'd be important to have *some* way of passing arbitrary DPDK flags to OVS, klunky or not. That way people wont get stuck if they happen to need some esoteric option in their setup, and also allows testing new features before proper integration is implemented. For example libvirt has all sorts of higher level options in its config, but also a special syntax to pass arbitrary options to qemu:
https://libvirt.org/drvqemu.html#qemucommand

        - Panu -
_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to