From: Ben Pfaff Date: Wed, 19 Aug 2009 22:59:18 +0000 (-0700) Subject: xenserver: Renice netback process to priority 0 by default. X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=641a0a4ed0a79d53a52d4e78ce1d90140a768798;p=openvswitch xenserver: Renice netback process to priority 0 by default. Under heavy VM network load, we have observed that ovs-vswitchd can be starved for CPU time, which prevents flows from being set up. This can in turn cause connections to XAPI in Dom0 to time out (among other issues). It is probably not necessary to renice netback all the way to priority 0 as done in this commit. That is simply the value that we have tested. QA has not reported any ill side-effects of this choice of value (yet). One reasonable alternative, should any problems be noticed, would be to leave netback at its default -5 priority and simply boost ovs-vswitchd's priority to say -6 or -7. Bug #1656. --- diff --git a/xenserver/etc_init.d_vswitch b/xenserver/etc_init.d_vswitch index 83d84ec2..abd594ec 100755 --- a/xenserver/etc_init.d_vswitch +++ b/xenserver/etc_init.d_vswitch @@ -34,6 +34,7 @@ VSWITCHD_CONF="${VSWITCHD_CONF:-/etc/ovs-vswitchd.conf}" VSWITCHD_PIDFILE="${VSWITCHD_PIDFILE:-/var/run/ovs-vswitchd.pid}" VSWITCHD_RUN_DIR="${VSWITCHD_RUN_DIR:-/var/xen/vswitch}" VSWITCHD_PRIORITY="${VSWITCHD_PRIORITY:--5}" +VSWITCHD_NETBACK_PRIORITY="${VSWITCHD_NETBACK_PRIORITY:-0}" VSWITCHD_LOGFILE="${VSWITCHD_LOGFILE:-/var/log/ovs-vswitchd.log}" VSWITCHD_FILE_LOGLEVEL="${VSWITCHD_FILE_LOGLEVEL:-}" VSWITCHD_SYSLOG_LOGLEVEL="${VSWITCHD_SYSLOG_LOGLEVEL:-WARN}" @@ -115,6 +116,28 @@ function reload_vswitchd { fi } +function quietly { + "$@" > /dev/null +} + +# renice_netback PRIORITY PID [PID...] +# +# Renices the netback processes given as each PID to nice level PRIORITY. +function renice_netback { + local pri=$1 + shift + + if test $# = 0; then + warning "Netback not running, nothing to renice" + return + fi + + for pid + do + action "Renicing netback (pid $pid) to priority $pri" quietly renice $pri -p $pid + done +} + function start_vswitchd { local syslog_opt="-vANY:SYSLOG:${VSWITCHD_SYSLOG_LOGLEVEL}" local logfile_file_opt="" @@ -152,6 +175,11 @@ function start_vswitchd { if [ "$ENABLE_FAKE_PROC_NET" = "y" ]; then fake_proc_net_opt="--fake-proc-net" fi + if [ "$VSWITCHD_NETBACK_PRIORITY" != default ]; then + renice_netback $VSWITCHD_NETBACK_PRIORITY $(pidof netback) + else + warning "Netback renicing disabled (see /etc/sysconfig/vswitch)" + fi if [ "$daemonize" != "y" ]; then # Start in background and force a "success" message action "Starting ovs-vswitchd ($strace_opt$valgrind_opt)" true diff --git a/xenserver/etc_sysconfig_vswitch.example b/xenserver/etc_sysconfig_vswitch.example index 789d61ab..ea8efe16 100644 --- a/xenserver/etc_sysconfig_vswitch.example +++ b/xenserver/etc_sysconfig_vswitch.example @@ -43,6 +43,13 @@ # processes. # VSWITCHD_PRIORITY=-5 +# VSWITCHD_NETBACK_PRIORITY: "nice" priority at which to run netback. +# It is a good idea to run ovs-vswitchd at a higher priority than +# netback to ensure that it gets enough CPU time to set up flows +# (bug #1656). Set this to 'default' to avoid changing netback's +# priority. +# VSWITCHD_NETBACK_PRIORITY=0 + # VSWITCHD_LOGFILE: File to send the FILE_LOGLEVEL log messages to. # VSWITCHD_LOGFILE=/var/log/ovs-vswitchd.log