diff --git a/ChangeLog b/ChangeLog index 1acda09a2..e9ba2551a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -12,6 +12,11 @@ v0.99.0 - 14 Jan 2010 --------------------- - User-space forwarding engine - Bug fixes + +v0.90.7 - 29 Nov 2009 +--------------------- + - Add support for NetFlow active timeouts + - Bug fixes v0.90.6 - 6 Oct 2009 -------------------- diff --git a/configure.ac b/configure.ac index 6d49484fc..e8497e1f3 100644 --- a/configure.ac +++ b/configure.ac @@ -53,6 +53,7 @@ OVS_CHECK_IF_PACKET OVS_CHECK_STRTOK_R AC_CHECK_MEMBERS([struct stat.st_mtim.tv_nsec, struct stat.st_mtimensec], [], [], [[#include ]]) +AC_CHECK_FUNCS([mlockall]) OVS_CHECK_PKIDIR OVS_CHECK_RUNDIR diff --git a/vswitchd/ovs-vswitchd.8.in b/vswitchd/ovs-vswitchd.8.in index cbfea13a5..0ec1ecda0 100644 --- a/vswitchd/ovs-vswitchd.8.in +++ b/vswitchd/ovs-vswitchd.8.in @@ -74,6 +74,17 @@ Open vSwitch distribution for instructions on how to build and load the Open vSwitch kernel module. .PP .SH OPTIONS +.IP "\fB--mlockall\fR" +Causes \fBovs\-vswitchd\fR to call the \fBmlockall()\fR function, to +attempt to lock all of its process memory into physical RAM, +preventing the kernel from paging any of its memory to disk. This +helps to avoid networking interruptions due to system memory pressure. +.IP +Some systems do not support \fBmlockall()\fR at all, and other systems +only allow privileged users, such as the superuser, to use it. +\fBovs\-vswitchd\fR emits a log message if \fBmlockall()\fR is +unavailable or unsuccessful. +. .IP "\fB--fake-proc-net\fR" Causes \fBovs\-vswitchd\fR to simulate some files in \fB/proc/net/vlan\fR and \fB/proc/net/bonding\fR that some legacy software expects to diff --git a/vswitchd/ovs-vswitchd.c b/vswitchd/ovs-vswitchd.c index 7b0661ec6..c1acfc414 100644 --- a/vswitchd/ovs-vswitchd.c +++ b/vswitchd/ovs-vswitchd.c @@ -22,6 +22,9 @@ #include #include #include +#ifdef HAVE_MLOCKALL +#include +#endif #include "bridge.h" #include "command-line.h" @@ -136,6 +139,7 @@ parse_options(int argc, char *argv[]) { enum { OPT_PEER_CA_CERT = UCHAR_MAX + 1, + OPT_MLOCKALL, OPT_FAKE_PROC_NET, VLOG_OPTION_ENUMS, LEAK_CHECKER_OPTION_ENUMS, @@ -144,6 +148,7 @@ parse_options(int argc, char *argv[]) static struct option long_options[] = { {"help", no_argument, 0, 'h'}, {"version", no_argument, 0, 'V'}, + {"mlockall", no_argument, 0, OPT_MLOCKALL}, {"fake-proc-net", no_argument, 0, OPT_FAKE_PROC_NET}, DAEMON_LONG_OPTIONS, VLOG_LONG_OPTIONS, @@ -175,6 +180,16 @@ parse_options(int argc, char *argv[]) OVS_PRINT_VERSION(OFP_VERSION, OFP_VERSION); exit(EXIT_SUCCESS); + 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 + break; + case OPT_FAKE_PROC_NET: error = proc_net_compat_init(); if (error) { diff --git a/xenserver/etc_init.d_vswitch b/xenserver/etc_init.d_vswitch index 7a8b83e66..9b05879aa 100755 --- a/xenserver/etc_init.d_vswitch +++ b/xenserver/etc_init.d_vswitch @@ -50,6 +50,7 @@ test -e /etc/sysconfig/vswitch && . /etc/sysconfig/vswitch : ${VSWITCHD_PIDFILE:=/var/run/ovs-vswitchd.pid} : ${VSWITCHD_RUN_DIR:=/var/xen/vswitch} : ${VSWITCHD_PRIORITY:=-10} +: ${VSWITCHD_MLOCKALL:=yes} : ${VSWITCHD_LOGFILE:=/var/log/ovs-vswitchd.log} : ${VSWITCHD_FILE_LOGLEVEL:=INFO} : ${VSWITCHD_SYSLOG_LOGLEVEL:=ERR} @@ -218,12 +219,15 @@ function start_vswitchd { if [ "$ENABLE_FAKE_PROC_NET" = "y" ]; then fake_proc_net_opt="--fake-proc-net" fi + if [ "$VSWITCHD_MLOCKALL" != "no" ]; then + mlockall_opt="--mlockall" + fi if [ "$daemonize" != "y" ]; then # Start in background and force a "success" message action "Starting ovs-vswitchd ($strace_opt$valgrind_opt)" true - (nice -n "$VSWITCHD_PRIORITY" $strace_opt $valgrind_opt "$vswitchd" --pidfile="$VSWITCHD_PIDFILE" --detach $monitor_opt --no-chdir $fake_proc_net_opt -vANY:CONSOLE:EMER $syslog_opt $logfile_level_opt $logfile_file_opt $leak_opt "$VSWITCHD_OVSDB_SERVER") & + (nice -n "$VSWITCHD_PRIORITY" $strace_opt $valgrind_opt "$vswitchd" --pidfile="$VSWITCHD_PIDFILE" --detach $monitor_opt --no-chdir $fake_proc_net_opt -vANY:CONSOLE:EMER $syslog_opt $logfile_level_opt $logfile_file_opt $leak_opt $mlockall_opt "$VSWITCHD_OVSDB_SERVER") & else - action "Starting ovs-vswitchd" nice -n "$VSWITCHD_PRIORITY" "$vswitchd" --pidfile="$VSWITCHD_PIDFILE" --detach $monitor_opt --no-chdir $fake_proc_net_opt -vANY:CONSOLE:EMER $syslog_opt $logfile_level_opt $logfile_file_opt $leak_opt "$VSWITCHD_OVSDB_SERVER" + action "Starting ovs-vswitchd" nice -n "$VSWITCHD_PRIORITY" "$vswitchd" --pidfile="$VSWITCHD_PIDFILE" --detach $monitor_opt --no-chdir $fake_proc_net_opt -vANY:CONSOLE:EMER $syslog_opt $logfile_level_opt $logfile_file_opt $leak_opt $mlockall_opt "$VSWITCHD_OVSDB_SERVER" fi } diff --git a/xenserver/usr_share_vswitch_scripts_sysconfig.template b/xenserver/usr_share_vswitch_scripts_sysconfig.template index 8b740c2e2..4d5efcab3 100644 --- a/xenserver/usr_share_vswitch_scripts_sysconfig.template +++ b/xenserver/usr_share_vswitch_scripts_sysconfig.template @@ -117,6 +117,13 @@ # processes. # VSWITCHD_PRIORITY=-10 +# VSWITCHD_MLOCKALL: Whether to pass ovs-vswitchd the --mlockall option. +# This option should be set to "yes" or "no". The default is "yes". +# Enabling this option can avoid networking interruptions due to +# system memory pressure in extraordinary situations, such as multiple +# concurrent VM import operations. +# VSWITCHD_MLOCKALL=yes + # VSWITCHD_LOGFILE: File to send the FILE_LOGLEVEL log messages to. # VSWITCHD_LOGFILE=/var/log/ovs-vswitchd.log