On 2013-12-19 Thu 13:43 PM |, Craig R. Skinner wrote:
> Enhance rc.d/rc.subr with lowered/raised daemon running priority.
> 

Comments/testing observations/?

ksh syntax used (which works with /bin/sh & bin/ksh being the same
binary), but dinnae ken if that's "wrong"... for rc* stuff.


> Use renice as simple nice didn't always work on daemons started in the
> background. Niceness level sanity checked, defaulting to 10.
> 
> Index: rc.subr
> ===================================================================
> RCS file: /cvs/src/etc/rc.d/rc.subr,v
> retrieving revision 1.70
> diff -u -u -p -r1.70 rc.subr
> --- rc.subr   11 Jul 2013 09:34:33 -0000      1.70
> +++ rc.subr   19 Dec 2013 13:17:45 -0000
> @@ -104,6 +104,25 @@ rc_wait() {
>       return 1
>  }
>  
> +rc_reprioritise()
> +{
> +     [[ ${rc_renice} != 'YES' ]] &&
> +     {
> +             for _renice_level in $(jot 40 20 -20)
> +             do
> +                     [[ ${rc_renice} == ${_renice_level} ]] &&
> +                     {
> +                             _scheduling_priority=${rc_renice}
> +                             break
> +                     }
> +             done
> +     }
> +
> +     [[ -z ${_scheduling_priority} ]] && _scheduling_priority='10'
> +
> +     renice -n ${_scheduling_priority} -p $(pgrep -f "^${pexp}")
> +}
> +
>  rc_cmd() {
>       local _bg _n
>  
> @@ -136,6 +155,17 @@ rc_cmd() {
>               fi
>               [ -z "${INRC}" ] && rc_do rc_check && exit 0
>               echo $_n "${INRC:+ }${_name}"
> +
> +             [[ ${rc_renice} == 'NO' ]] && unset rc_renice
> +             [[ -n ${rc_renice} ]] &&
> +             {
> +                     printf "%d" ${rc_renice} > /dev/null 2>&1 &&
> +                     {
> +                             rc_renice=$(printf "%d" ${rc_renice})
> +                             [[ ${rc_renice} -eq 0 ]] && unset rc_renice
> +                     }
> +             }
> +
>               while true; do  # no real loop, only needed to break
>                       if type rc_pre >/dev/null; then
>                               rc_do rc_pre || break
> @@ -148,6 +178,7 @@ rc_cmd() {
>                               rc_do rc_wait start || break
>                       fi
>                       rc_do rc_write_runfile
> +                     [[ -n ${rc_renice} ]] && rc_do rc_reprioritise
>                       rc_exit ok
>               done
>               # handle failure
> 

Reply via email to