[ovs-dev] [PATCH] ovs-vswitchd: Call mlockall() from the daemon, not the parent or monitor.
Justin Pettit
jpettit at nicira.com
Fri Jun 29 20:24:22 UTC 2012
Great catch! Thanks, Ben.
--Justin
On Jun 29, 2012, at 12:28 PM, Ben Pfaff wrote:
> mlockall(2) says:
>
> Memory locks are not inherited by a child created via fork(2) and are
> automatically removed (unlocked) during an execve(2) or when the
> process terminates.
>
> which means that --mlockall was ineffective in combination with --detach
> or --monitor or both. Both are used in the most common production
> configuration of Open vSwitch, so this means that --mlockall has never been
> effective in production.
>
> Signed-off-by: Ben Pfaff <blp at nicira.com>
> ---
> vswitchd/ovs-vswitchd.c | 22 +++++++++++++++-------
> 1 files changed, 15 insertions(+), 7 deletions(-)
>
> diff --git a/vswitchd/ovs
>
>
>
> -vswitchd.c b/vswitchd/ovs-vswitchd.c
> index 8ef3b10..6062a40 100644
> --- a/vswitchd/ovs-vswitchd.c
> +++ b/vswitchd/ovs-vswitchd.c
> @@ -55,6 +55,10 @@
>=20
> VLOG_DEFINE_THIS_MODULE(vswitchd);
>=20
> +/* --mlockall: If set, locks all process memory into physical RAM, =
preventing
> + * the kernel from paging any of its memory to disk. */
> +static bool want_mlockall;
> +
> static unixctl_cb_func ovs_vswitchd_exit;
>=20
> static char *parse_options(int argc, char *argv[], char =
**unixctl_path);
> @@ -81,6 +85,16 @@ main(int argc, char *argv[])
>=20
> daemonize_start();
>=20
> + if (want_mlockall) {
> +#ifdef HAVE_MLOCKALL
> + if (mlockall(MCL_CURRENT | MCL_FUTURE)) {
> + VLOG_ERR("mlockall failed: %s", strerror(errno));
> + }
> +#else
> + VLOG_ERR("mlockall not supported on this system");
> +#endif
> + }
> +
> retval =3D unixctl_server_create(unixctl_path, &unixctl);
> if (retval) {
> exit(EXIT_FAILURE);
> @@ -175,13 +189,7 @@ parse_options(int argc, char *argv[], char =
**unixctl_pathp)
> exit(EXIT_SUCCESS);
>=20
> case OPT_MLOCKALL:
> -#ifdef HAVE_MLOCKALL
> - if (mlockall(MCL_CURRENT | MCL_FUTURE)) {
> - VLOG_ERR("mlockall failed: %s", strerror(errno));
> - }
> -#else
> - VLOG_ERR("mlockall not supported on this system");
> -#endif
> + want_mlockall =3D true;
> break;
>=20
> case OPT_UNIXCTL:
> --=20
> 1.7.2.5
>=20
> _______________________________________________
> dev mailing list
> dev at openvswitch.org
> http://openvswitch.org/mailman/listinfo/dev
More information about the dev
mailing list