If anonymous memory mapping is supported by the kernel, it's better to run OVS entirely in memory rather than creating shared data structures. OVS doesn't work in multi-process mode, so there is no need to litter a filesystem and experience random crashes due to old memory chunks stored in re-opened files.
When OVS is not running in memory and crashes, it never reaches the clean up scripts that delete the new files it has created, resulting in "dirty" memory. OVS will partially overwrite this memory on the next start-up, but will fail to run again because its filesystem is full of old memory. Here is an example of these crashes: https://inbox.dpdk.org/dev/[email protected]/ Reported at: https://bugzilla.redhat.com/show_bug.cgi?id=1949849 Signed-off-by: Rosemarie O'Riorden <[email protected]> --- NEWS | 1 + acinclude.m4 | 6 ++++++ lib/dpdk.c | 7 +++++++ 3 files changed, 14 insertions(+) diff --git a/NEWS b/NEWS index 26920e215..515d3cddd 100644 --- a/NEWS +++ b/NEWS @@ -8,6 +8,7 @@ Post-v2.16.0 by default. 'other_config:dpdk-socket-limit' can be set equal to the 'other_config:dpdk-socket-mem' to preserve the legacy memory limiting behavior. + * EAL argument --in-memory is applied by default if supported. v2.16.0 - xx xxx xxxx diff --git a/acinclude.m4 b/acinclude.m4 index 5a48f0335..7720f2f1b 100644 --- a/acinclude.m4 +++ b/acinclude.m4 @@ -448,6 +448,12 @@ AC_DEFUN([OVS_CHECK_DPDK], [ ], [[#include <rte_config.h>]]) ], [], [[#include <rte_config.h>]]) + AC_CHECK_DECL([MAP_HUGE_SHIFT], [ + AC_DEFINE([DPDK_IN_MEMORY_SUPPORTED], [1], [If MAP_HUGE_SHIFT is + defined, anonomous memory mapping is supported by the + kernel, and --in-memory can be used.]) + ], [], [[#include <sys/mman.h>]]) + # DPDK uses dlopen to load plugins. OVS_FIND_DEPENDENCY([dlopen], [dl], [libdl]) diff --git a/lib/dpdk.c b/lib/dpdk.c index b2ef31cd2..97c902fab 100644 --- a/lib/dpdk.c +++ b/lib/dpdk.c @@ -405,6 +405,13 @@ dpdk_init__(const struct smap *ovs_other_config) svec_add(&args, ovs_get_program_name()); construct_dpdk_args(ovs_other_config, &args); +#ifdef DPDK_IN_MEMORY_SUPPORTED + if (!args_contains(&args, "--in-memory") && + !args_contains(&args, "--legacy-mem")) { + svec_add(&args, "--in-memory"); + } +#endif + if (args_contains(&args, "-c") || args_contains(&args, "-l")) { auto_determine = false; } -- 2.31.1 _______________________________________________ dev mailing list [email protected] https://mail.openvswitch.org/mailman/listinfo/ovs-dev
