From patchwork Fri Feb 1 13:11:12 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ilya Maximets X-Patchwork-Id: 1034753 X-Patchwork-Delegate: ian.stokes@intel.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=openvswitch.org (client-ip=140.211.169.12; helo=mail.linuxfoundation.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=samsung.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=samsung.com header.i=@samsung.com header.b="HzDhcMO1"; dkim-atps=neutral Received: from mail.linuxfoundation.org (mail.linuxfoundation.org [140.211.169.12]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 43rd1S0vkXz9s9G for ; Sat, 2 Feb 2019 00:17:15 +1100 (AEDT) Received: from mail.linux-foundation.org (localhost [127.0.0.1]) by mail.linuxfoundation.org (Postfix) with ESMTP id 9875F76C3; Fri, 1 Feb 2019 13:16:41 +0000 (UTC) X-Original-To: ovs-dev@openvswitch.org Delivered-To: ovs-dev@mail.linuxfoundation.org Received: from smtp1.linuxfoundation.org (smtp1.linux-foundation.org [172.17.192.35]) by mail.linuxfoundation.org (Postfix) with ESMTPS id DE9EC76B4 for ; Fri, 1 Feb 2019 13:11:35 +0000 (UTC) X-Greylist: domain auto-whitelisted by SQLgrey-1.7.6 Received: from mailout2.w1.samsung.com (mailout2.w1.samsung.com [210.118.77.12]) by smtp1.linuxfoundation.org (Postfix) with ESMTPS id 682A0711 for ; Fri, 1 Feb 2019 13:11:34 +0000 (UTC) Received: from eucas1p1.samsung.com (unknown [182.198.249.206]) by mailout2.w1.samsung.com (KnoxPortal) with ESMTP id 20190201131132euoutp020193c3c9d2061adb3b2bafbf587e074e~-P5H2MaoM3161131611euoutp02w for ; Fri, 1 Feb 2019 13:11:32 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout2.w1.samsung.com 20190201131132euoutp020193c3c9d2061adb3b2bafbf587e074e~-P5H2MaoM3161131611euoutp02w DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1549026693; bh=lxz5s6GqfzoDSZV1N5/mBQQ9gQ32WlVnqKT0h1N3EQI=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=HzDhcMO1lTdcLTrs6eYBTzhFonPSf8E7yiMJQJPz0Sk/AWu9nrjYydxppZr/6tPer du6O0tPGRhCUugJUQTgdOOIofVlVbcQk0pujeWHOU1n7J9SHFXnKqSo0iDJTY2iO9W 2NxSpyZdsXRYb+YVevc1kUVIQcIS86v+E6lqgSg8= Received: from eusmges1new.samsung.com (unknown [203.254.199.242]) by eucas1p2.samsung.com (KnoxPortal) with ESMTP id 20190201131132eucas1p2fd56ec2eb63965cee5d5e47e4a91cc5c~-P5HXO1pZ2188721887eucas1p2y; Fri, 1 Feb 2019 13:11:32 +0000 (GMT) Received: from eucas1p2.samsung.com ( [182.198.249.207]) by eusmges1new.samsung.com (EUCPMTA) with SMTP id 18.EB.04441.485445C5; Fri, 1 Feb 2019 13:11:32 +0000 (GMT) Received: from eusmtrp1.samsung.com (unknown [182.198.249.138]) by eucas1p1.samsung.com (KnoxPortal) with ESMTPA id 20190201131131eucas1p16f9d8fd16e1ffeb60433c6374482f4c6~-P5Gc1BCU1342013420eucas1p1W; Fri, 1 Feb 2019 13:11:31 +0000 (GMT) Received: from eusmgms1.samsung.com (unknown [182.198.249.179]) by eusmtrp1.samsung.com (KnoxPortal) with ESMTP id 20190201131131eusmtrp18601e9036bfdc9eb2033abc954c69da1~-P5GOhBue2924629246eusmtrp1b; Fri, 1 Feb 2019 13:11:31 +0000 (GMT) X-AuditID: cbfec7f2-5e3ff70000001159-d1-5c544584bdbf Received: from eusmtip1.samsung.com ( [203.254.199.221]) by eusmgms1.samsung.com (EUCPMTA) with SMTP id A8.C2.04284.385445C5; Fri, 1 Feb 2019 13:11:31 +0000 (GMT) Received: from imaximets.rnd.samsung.ru (unknown [106.109.129.180]) by eusmtip1.samsung.com (KnoxPortal) with ESMTPA id 20190201131130eusmtip1e6972edce6cd14f8aefddb859cf2815f~-P5FfVGEM1130411304eusmtip1Z; Fri, 1 Feb 2019 13:11:30 +0000 (GMT) From: Ilya Maximets To: ovs-dev@openvswitch.org, Ian Stokes Date: Fri, 1 Feb 2019 16:11:12 +0300 Message-Id: <20190201131114.29799-2-i.maximets@samsung.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190201131114.29799-1-i.maximets@samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA0VSa0hTYRju2zk7O45mxyn4ooI4kshKWxTNNC9ksD9RikHY0I56cqKbsjM1 C8pbKTLNFJsJYVKguSJdS0TFdJhGpkF5x7x0Ey+VbFpOydp2lP49z/M+F/j4SEz8C/ciU9Va RqOm0yWEEG/ts707VHQ6VnF4eYyQbSzPCmSLVXlINlxsE8ha5gb5sqfmFYHsvmUeRRDyh50L PPm3ib9IPj+qw+U/u0YIebmpCZ3jxwlDk5n01GxGExR2Sah8MlOIZQ5WoCsLbd55yKosRS4k UEdhqHwSlSIhKaYaEWxuGHGOrCIwz3Uih0tMWREsFqKdxPCnte1EAwJD/RTGkXUE3S0TfIeL oA7CG0OvM+FBhcHdpgKew4RRZQiqJz8QjoM7dRLafo84AzjlDx9NK05dRIWA1VTJ4+Z8wdDc jTmwCxUKFn2NswioJQLWinvshLSTKLBVSTm/Oyz2mwQc9oGBKh3O4RswU7SAuGwJAr15a3sg HExLQwJHD0bth2ftQZwcCXrLFMHVu8L4dzeHjNlhZase42QRlNwSc+69sNnTgHHYCyZ+WAWc RQ6jr2O457mNoGhax69AvrX/tx4g1IQ8mSxWlcKwUjWTE8jSKjZLnRKYlKEyIvtvGNjqt7Sh tfeJZkSRSLJb1LwRoxDz6Ww2V2VGQGISD1FjVKxCLEqmc68ymowETVY6w5qRN4lLPEXXds1e FFMptJZJY5hMRrNz5ZEuXnmoJakh9OZs5KZmy/bIpnx8atwYoAu2Tnd3Xp7Jz+GTX/tj6vJ5 Ou3bY/411fF1fpLzip6xcf8yos8tOjzdb5+avlBvu96x+jyk0rt9StUR11jf5W7oTYqXps1F RGcu+9TVmu61nqgxEtrjrsEvbQcKEl58fnXnzJH1P7n6L2f3JEpwVklLAzANS/8DV0NCdQkD AAA= X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFrrBLMWRmVeSWpSXmKPExsVy+t/xu7rNriExBlMesVv8evOA3eLV5AZG iyvtP9ktNj48y2qx9tAHdou5n54zOrB5LN7zksnj2c3/jB7Pr/WweLzfd5XNo2/LKsYA1ig9 m6L80pJUhYz84hJbpWhDCyM9Q0sLPSMTSz1DY/NYKyNTJX07m5TUnMyy1CJ9uwS9jDX3m5kL zk5grHi5Q7qB8XNGFyMnh4SAicSVR18ZQWwhgaWMEgfuq0HEpSR+/LrACmELS/y51sXWxcgF VPONUWJazys2kASbgI7EqdVHwJpFBBwkNt9dzApSxCwwkVHi7NReJpCEsICtxI7vV8EmsQio Stzd8gGsmVfAWuLzlklMEBvkJVZvOMAMYnMK2Eh8mj4DKM4BtM1aon2C4gRGvgWMDKsYRVJL i3PTc4sN9YoTc4tL89L1kvNzNzECQ3XbsZ+bdzBe2hh8iFGAg1GJh3fDr6AYIdbEsuLK3EOM EhzMSiK8K1xCYoR4UxIrq1KL8uOLSnNSiw8xmgLdNJFZSjQ5HxhHeSXxhqaG5haWhubG5sZm FkrivOcNKqOEBNITS1KzU1MLUotg+pg4OKUaGIML3iVJ7i9olft091rNZFnnaatPhWzuOrNL 68rZd4IBn39z5JaIPcpie8Znv3Sf7t7jYlKrd8743XI363jttwliLO+bpCoXHdC+wyuzV7R5 xY9VTyTeSCW/rC7/xXE9dJIUn5j/vETbCAsR3Y4nWqqXf/GmVAg8q488FqiiuOhGf16zjEDO dCWW4oxEQy3mouJEACcKAmFrAgAA X-CMS-MailID: 20190201131131eucas1p16f9d8fd16e1ffeb60433c6374482f4c6 X-Msg-Generator: CA X-RootMTR: 20190201131131eucas1p16f9d8fd16e1ffeb60433c6374482f4c6 X-EPHeader: CA CMS-TYPE: 201P X-CMS-RootMailID: 20190201131131eucas1p16f9d8fd16e1ffeb60433c6374482f4c6 References: <20190201131114.29799-1-i.maximets@samsung.com> X-Spam-Status: No, score=-7.0 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on smtp1.linux-foundation.org Cc: Ilya Maximets Subject: [ovs-dev] [RFC 1/3] dpdk: Unify passing of DPDK EAL arguments. X-BeenThere: ovs-dev@openvswitch.org X-Mailman-Version: 2.1.12 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: ovs-dev-bounces@openvswitch.org Errors-To: ovs-dev-bounces@openvswitch.org This patch deprecates the usage of current configuration knobs for DPDK EAL arguments: - dpdk-alloc-mem - dpdk-socket-mem - dpdk-socket-limit - dpdk-lcore-mask - dpdk-hugepage-dir - dpdk-extra All above configuration options replaced with single 'dpdk-options' which has same format as old 'dpdk-extra', i.e. just a string with all the DPDK EAL arguments. All the documentation about old configuration knobs removed. Users could still use an old interface, but the deprecation warning will be printed. In case 'dpdk-options' provided, values of old options will be ignored. New users will start using new 'dpdk-options' as this is the only documented way providing EAL arguments. Rationale: From release to release DPDK becomes more complex. New EAL arguments appears, old arguments becomes deprecated. Some changes their meaning and behaviour. It's not easy task to manage all this and current code in OVS that tries to manage DPDK options is not flexible/extendable enough even to track all the dependencies between options in DPDK 18.11. For example, '--socket-mem' changed its meaning, '--legacy-mem' and '--socket-limit' appeared. But '--legacy-mem' and '--socket-limit' could not be used at the same time and, also, we want to provide good default value for '--socket-limit' to keep the consistent behaviour of OVS memory usage. And this will be worse in the future. Another point is that even now we have mutually exclusive database configs in OVS and we have to handle them. i.e we're providing 'dpdk-alloc-mem' and 'dpdk-socket-mem' at the same time. Additionally, user allowed to configure same options in 'dpdk-extra'. So, we have similar/equal options in a three places in ovsdb and we need to choose which one to use. It's pretty easy for user to get into inconsistent database configuration, because users could update one field without removing others, and OVS has to resolve all the conflicts somehow constructing the EAL args. But we do not know in practice, if the resulted arguments are the arguments that user wanted to see or just forget to remove the higher priority knob. Next point is that we have 'dpdk-lcore-mask' (-c) which is actually not so user-friendly as '-l', but we have no option for it. Will we create additional 'dpdk-lcore-list' ? I guess, no, because it's not really important thing. But users will stuck with this not so user-friendly masks. Another thing is that OVS is not really need to check the consistency of the EAL arguments because DPDK could check it instead. DPDK will always check the args and it will do it better. There is no real need to duplicate this functionality. Keeping all the options in a single string 'dpdk-options' allows: * To have only one place for all the configs, i.e. it will be harder for user to forget to remove something from the single string while updating it. * Not to check the consistency between different configs, DPDK could check the cmdline itself. * Not to document every DPDK EAL argument in OVS. We can just describe few of them and point to DPDK docs for more information. * OVS still able to provide some minimal default arguments. Thanks to DPDK 18.11 we only need to specify an lcore. All other arguments are not necessary. (We still also providing default --socket-limit in case --socket-mem passed without it and without --legacy-mem) Usage example: ovs-vsctl set Open_vSwitch . \ other_config:dpdk-options="-l 1 -n 4 --socket-mem 1024,1024" Signed-off-by: Ilya Maximets --- Documentation/intro/install/dpdk.rst | 40 +++++--- NEWS | 7 +- lib/dpdk.c | 49 +++++++++- utilities/ovs-dev.py | 2 +- vswitchd/vswitch.xml | 132 ++++++--------------------- 5 files changed, 108 insertions(+), 122 deletions(-) diff --git a/Documentation/intro/install/dpdk.rst b/Documentation/intro/install/dpdk.rst index 344d2b3a6..2243fde53 100644 --- a/Documentation/intro/install/dpdk.rst +++ b/Documentation/intro/install/dpdk.rst @@ -235,32 +235,44 @@ listed below. Defaults will be provided for all values not explicitly set. A value of ``try`` will imply that the ovs-vswitchd process should continue running even if the EAL initialization fails. -``dpdk-lcore-mask`` - Specifies the CPU cores on which dpdk lcore threads should be spawned and - expects hex string (eg '0x123'). +``dpdk-options`` + Specifies the string of EAL command line arguments for DPDK. + For example, ``other_config:dpdk-options="-l 0 --socket-mem 1024,1024"``. + Important arguments that could be passed there are: -``dpdk-socket-mem`` - Comma separated list of memory to pre-allocate from hugepages on specific - sockets. If not specified, 1024 MB will be set for each numa node by - default. + - ``-c`` or ``-l`` -``dpdk-hugepage-dir`` - Directory where hugetlbfs is mounted + Specifies the CPU cores on which dpdk lcore threads should be spawned. + ``-c`` expects hex string (eg ``0x123``) while ``-l`` expects core list + (eg ``0-5,8``). + + - ``--socket-mem`` + + Comma separated list of memory to pre-allocate from hugepages on specific + sockets. + + - ``--huge-dir`` + + Directory where hugetlbfs is mounted + + - See DPDK documentation for the full list: + + https://doc.dpdk.org/guides-18.11/linux_gsg/linux_eal_parameters.html ``vhost-sock-dir`` Option to set the path to the vhost-user unix socket files. -If allocating more than one GB hugepage, you can configure the -amount of memory used from any given NUMA nodes. For example, to use 1GB from -NUMA node 0 and 0GB for all other NUMA nodes, run:: +You can configure the amount of memory preallocated from any given NUMA nodes. +For example, to preallocate ``1GB`` from NUMA node ``0`` and ``0GB`` for all +other NUMA nodes, run:: $ ovs-vsctl --no-wait set Open_vSwitch . \ - other_config:dpdk-socket-mem="1024,0" + other_config:dpdk-options="<...> --socket-mem 1024,0" or:: $ ovs-vsctl --no-wait set Open_vSwitch . \ - other_config:dpdk-socket-mem="1024" + other_config:dpdk-options="<...> --socket-mem 1024" .. note:: Changing any of these options requires restarting the ovs-vswitchd diff --git a/NEWS b/NEWS index a64b9d94d..1c09e9d57 100644 --- a/NEWS +++ b/NEWS @@ -1,8 +1,11 @@ Post-v2.11.0 --------------------- - DPDK: - * New option 'other_config:dpdk-socket-limit' to limit amount of - hugepage memory that can be used by DPDK. + * New option 'other_config:dpdk-options' to pass all the + DPDK EAL argumants in a single string. + * Following config options deprecated: + 'dpdk-alloc-mem', 'dpdk-socket-mem', 'dpdk-socket-limit', + 'dpdk-lcore-mask', 'dpdk-hugepage-dir' and 'dpdk-extra'. v2.11.0 - xx xxx xxxx diff --git a/lib/dpdk.c b/lib/dpdk.c index 53b74fba4..0c37f231d 100644 --- a/lib/dpdk.c +++ b/lib/dpdk.c @@ -91,6 +91,41 @@ args_contains(const struct svec *args, const char *value) return false; } +static bool +report_deprecated_configs(const struct smap *ovs_other_config, bool ignore) +{ + struct option { + const char *opt; + const char *replacement; + } options[] = { + { "dpdk-alloc-mem", "-m" }, + { "dpdk-socket-mem", "--socket-mem" }, + { "dpdk-socket-limit", "--socket-limit" }, + { "dpdk-lcore-mask", "-c" }, + { "dpdk-hugepage-dir", "--huge-dir" }, + { "dpdk-extra", "" } + }; + int i; + bool found = false; + + for (i = 0; i < ARRAY_SIZE(options); i++) { + const char *value = smap_get(ovs_other_config, options[i].opt); + + if (value) { + VLOG_WARN("Detected deprecated '%s' config. Use '%s %s'" + " in 'dpdk-options' instead.%s", + options[i].opt, options[i].replacement, value, + ignore ? " Value ignored." : ""); + found = true; + } + } + if (found) { + VLOG_WARN("Deprecated options will be " + "silently ignored in the future."); + } + return found; +} + static void construct_dpdk_options(const struct smap *ovs_other_config, struct svec *args) { @@ -270,8 +305,10 @@ dpdk_init__(const struct smap *ovs_other_config) char **argv = NULL; int result; bool auto_determine = true; + bool deprecated_found; int err = 0; cpu_set_t cpuset; + const char *dpdk_options; struct svec args = SVEC_EMPTY_INITIALIZER; log_stream = fopencookie(NULL, "w+", dpdk_log_func); @@ -317,7 +354,15 @@ dpdk_init__(const struct smap *ovs_other_config) per_port_memory ? "enabled" : "disabled"); svec_add(&args, ovs_get_program_name()); - construct_dpdk_args(ovs_other_config, &args); + dpdk_options = smap_get(ovs_other_config, "dpdk-options"); + + deprecated_found = report_deprecated_configs(ovs_other_config, + dpdk_options ? true : false); + if (dpdk_options) { + svec_parse_words(&args, dpdk_options); + } else if (deprecated_found) { + construct_dpdk_args(ovs_other_config, &args); + } if (!args_contains(&args, "--legacy-mem") && !args_contains(&args, "--socket-limit")) { @@ -357,7 +402,7 @@ dpdk_init__(const struct smap *ovs_other_config) } } } else { - /* User did not set dpdk-lcore-mask and unable to get current + /* User did not set lcore mask and unable to get current * thread affintity - default to core #0 */ VLOG_ERR("Thread getaffinity error %d. Using core #0", err); } diff --git a/utilities/ovs-dev.py b/utilities/ovs-dev.py index 248d22ab9..d10b40c87 100755 --- a/utilities/ovs-dev.py +++ b/utilities/ovs-dev.py @@ -283,7 +283,7 @@ def run(): _sh("ovs-vsctl --no-wait set Open_vSwitch %s " "other_config:dpdk-init=true" % root_uuid) _sh("ovs-vsctl --no-wait set Open_vSwitch %s other_config:" - "dpdk-extra=\"%s\"" % (root_uuid, ' '.join(options.dpdk))) + "dpdk-options=\"%s\"" % (root_uuid, ' '.join(options.dpdk))) else: _sh("ovs-vsctl --no-wait set Open_vSwitch %s " "other_config:dpdk-init=false" % root_uuid) diff --git a/vswitchd/vswitch.xml b/vswitchd/vswitch.xml index 1db4e8694..c30265d9e 100644 --- a/vswitchd/vswitch.xml +++ b/vswitchd/vswitch.xml @@ -234,56 +234,6 @@

- -

- Set this value to true or try to enable - runtime support for DPDK ports. The vswitch must have compile-time - support for DPDK as well. -

-

- A value of true will cause the ovs-vswitchd process to - abort if DPDK cannot be initialized. A value of try - will allow the ovs-vswitchd process to continue running even if DPDK - cannot be initialized. -

-

- The default value is false. Changing this value requires - restarting the daemon -

-

- If this value is false at startup, any dpdk ports which - are configured in the bridge will fail due to memory errors. -

-
- - -

- Specifies the CPU cores where 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. -

-

- The lowest order bit corresponds to the first CPU core. A set bit - means the corresponding core is available and an lcore thread will be - created and pinned to it. If the input does not cover all cores, - those uncovered cores are considered not set. -

-

- For performance reasons, it is best to set this to a single core on - the system, rather than allow lcore threads to float. -

-

- 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. -

-
-

Specifies CPU mask for setting the cpu affinity of PMD (Poll @@ -303,78 +253,54 @@

- +

- Specifies the amount of memory to preallocate from the hugepage pool, - regardless of socket. It is recommended that dpdk-socket-mem is used - instead. + Set this value to true or try to enable + runtime support for DPDK ports. The vswitch must have compile-time + support for DPDK as well.

-
- -

- Specifies the amount of memory to preallocate from the hugepage pool, - on a per-socket basis. + A value of true will cause the ovs-vswitchd process to + abort if DPDK cannot be initialized. A value of try + will allow the ovs-vswitchd process to continue running even if DPDK + cannot be initialized.

- The specifier is a comma-separated string, in ascending order of CPU - socket. E.g. On a four socket system 1024,0,2048 would set socket 0 - to preallocate 1024MB, socket 1 to preallocate 0MB, socket 2 to - preallocate 2048MB and socket 3 (no value given) to preallocate 0MB. + The default value is false. Changing this value requires + restarting the daemon

- If dpdk-socket-mem and dpdk-alloc-mem are not specified, dpdk-socket-mem - will be used and the default value is 1024 for each numa node. If - dpdk-socket-mem and dpdk-alloc-mem are specified at same time, - dpdk-socket-mem will be used as default. Changing this value - requires restarting the daemon. + If this value is false at startup, any dpdk ports which + are configured in the bridge will fail due to memory errors.

-

- Limits the maximum amount of memory that can be used from the - hugepage pool, on a per-socket basis. + Specifies EAL command line arguments for DPDK. For example, + "-l 1 --socket-mem 1024,1024 -n 4"

- The specifier is a comma-separated list of memory limits per socket. - 0 will disable the limit for a particular socket. -

-

- If not specified, OVS will configure limits equal to the amount of - preallocated memory specified by or --socket-mem in - . If none of the above - options specified or --legacy-mem provided in - , limits will not be - applied. Changing this value requires restarting the daemon.

-
- - -

- Specifies the path to the hugetlbfs mount point. -

-

- If not specified, this will be guessed by the DPDK library (default - is /dev/hugepages). Changing this value requires restarting the - daemon. -

-
- -

- Specifies additional eal command line arguments for DPDK. + If -l and -c options are not specified, + the default value will be provided by choosing the lowest CPU core + from initial cpu affinity list. + For performance reasons, it is best to set lcore set/list to a single + core on the system, rather than allow lcore threads to float. + CPU cores proveded by -l and -c options + only used by DPDK internal threads. To manage affinity of PMD threads + use .

- The default is empty. Changing this value requires restarting the - daemon + if --socket-mem option provided without + --legacy-mem and --socket-limit, OVS will + provide --socket-limit equal to the amount of + preallocated memory specified by --socket-mem.