svn commit: r316342 - in head: etc/defaults etc/periodic/daily share/man/man5 usr.sbin/periodic
Rodney W. Grimes
freebsd at pdx.rh.CN85.dnsmgr.net
Sat Apr 1 05:31:58 UTC 2017
Small error in date below
> Author: asomers
> Date: Sat Apr 1 04:42:35 2017
> New Revision: 316342
> URL: https://svnweb.freebsd.org/changeset/base/316342
>
> Log:
> Consolidate random sleeps in periodic scripts
>
> Multiple periodic scripts sleep for a random amount of time in order to
> mitigate the thundering herd problem. This is bad, because the sum of
> multiple uniformly distributed random variables approaches a normal
> distribution, so the problem isn't mitigated as effectively as it would be
> with a single sleep.
>
> This change creates a single configurable anticongestion sleep. periodic
> will only sleep if at least one script requires it, and it will never sleep
> more than once per invocation. It also won't sleep if periodic was run
> interactively, fixing an unrelated longstanding bug.
>
> PR: 217055
> PR: 210188
> Reviewed by: cy
> MFC after: 3 weeks
> Differential Revision: https://reviews.freebsd.org/D10211
>
> Modified:
> head/etc/defaults/periodic.conf
> head/etc/periodic/daily/480.leapfile-ntpd
> head/share/man/man5/periodic.conf.5
> head/usr.sbin/periodic/periodic.sh
>
> Modified: head/etc/defaults/periodic.conf
> ==============================================================================
> --- head/etc/defaults/periodic.conf Sat Apr 1 01:00:36 2017 (r316341)
> +++ head/etc/defaults/periodic.conf Sat Apr 1 04:42:35 2017 (r316342)
> @@ -22,6 +22,8 @@ periodic_conf_files="/etc/periodic.conf
> # periodic script dirs
> local_periodic="/usr/local/etc/periodic"
>
> +# Max time to sleep to avoid causing congestion on download servers
> +anticongestion_sleeptime=3600
>
> # Daily options
>
> @@ -136,8 +138,6 @@ daily_status_mail_rejects_shorten="NO"
>
> # 480.leapfile-ntpd
> daily_ntpd_leapfile_enable="YES" # Fetch NTP leapfile
> -daily_ntpd_avoid_congestion="YES" # Avoid congesting
> - # leapfile sources
>
> # 480.status-ntpd
> daily_status_ntpd_enable="NO" # Check NTP status
> @@ -307,6 +307,18 @@ security_status_tcpwrap_period="daily"
> if [ -z "${source_periodic_confs_defined}" ]; then
> source_periodic_confs_defined=yes
>
> + # Sleep for a random amount of time in order to mitigate the thundering
> + # herd problem of multiple hosts running periodic simultaneously.
> + # Will not sleep when used interactively.
> + # Will sleep at most once per invocation of periodic
> + anticongestion() {
> + [ -n "$PERIODIC_IS_INTERACTIVE" ] && return
> + if [ -f "$PERIODIC_ANTICONGESTION_FILE" ]; then
> + rm -f $PERIODIC_ANTICONGESTION_FILE
> + sleep `jot -r 1 0 ${anticongestion_sleeptime}`
> + fi
> + }
> +
> # Compatibility with old daily variable names.
> # They can be removed in stable/11.
> security_daily_compat_var() {
>
> Modified: head/etc/periodic/daily/480.leapfile-ntpd
> ==============================================================================
> --- head/etc/periodic/daily/480.leapfile-ntpd Sat Apr 1 01:00:36 2017 (r316341)
> +++ head/etc/periodic/daily/480.leapfile-ntpd Sat Apr 1 04:42:35 2017 (r316342)
> @@ -13,16 +13,9 @@ fi
>
> case "$daily_ntpd_leapfile_enable" in
> [Yy][Ee][Ss])
> - case "$daily_ntpd_avoid_congestion" in
> - [Yy][Ee][Ss])
> - # Avoid dogpiling
> - (sleep $(jot -r 1 0 3600); service ntpd onefetch) &
> - ;;
> - *)
> - service ntpd onefetch
> - ;;
> - esac
> - ;;
> + anticongestion
> + service ntpd onefetch
> + ;;
> esac
>
> exit $rc
>
> Modified: head/share/man/man5/periodic.conf.5
> ==============================================================================
> --- head/share/man/man5/periodic.conf.5 Sat Apr 1 01:00:36 2017 (r316341)
> +++ head/share/man/man5/periodic.conf.5 Sat Apr 1 04:42:35 2017 (r316342)
> @@ -25,7 +25,7 @@
> .\"
> .\" $FreeBSD$
> .\"
> -.Dd March 26, 2015
> +.Dd March 31, 2015
^^^^ 2017?
> .Dt PERIODIC.CONF 5
> .Os
> .Sh NAME
> @@ -133,6 +133,10 @@ respectively.
> Refer to the
> .Xr periodic 8
> manual page for how script return codes are interpreted.
> +.It Va anticongestion_sleeptime
> +.Pq Vt int
> +The maximum number of seconds to randomly sleep in order to smooth bursty loads
> +on a shared resource, such as a download mirror.
> .El
> .Pp
> The following variables are used by the standard scripts that reside in
>
> Modified: head/usr.sbin/periodic/periodic.sh
> ==============================================================================
> --- head/usr.sbin/periodic/periodic.sh Sat Apr 1 01:00:36 2017 (r316341)
> +++ head/usr.sbin/periodic/periodic.sh Sat Apr 1 04:42:35 2017 (r316342)
> @@ -76,6 +76,12 @@ fi
> shift
> arg=$1
>
> +if [ -z "$PERIODIC_ANTICONGESTION_FILE" ] ; then
> + export PERIODIC_ANTICONGESTION_FILE=`mktemp ${TMPDIR:-/tmp}/periodic.anticongestion.XXXXXXXXXX`
> +fi
> +if tty > /dev/null 2>&1; then
> + export PERIODIC_IS_INTERACTIVE=1
> +fi
> tmp_output=`mktemp ${TMPDIR:-/tmp}/periodic.XXXXXXXXXX`
> context="$PERIODIC"
> export PERIODIC="$arg${PERIODIC:+ }${PERIODIC}"
> @@ -141,3 +147,4 @@ esac
> } | output_pipe $arg "$context"
>
> rm -f $tmp_output
> +rm -f $PERIODIC_ANTICONGESTION_FILE
>
>
--
Rod Grimes rgrimes at freebsd.org
More information about the svn-src-all
mailing list