[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