85cd488bef
Signed-off-by: Dean Troyer <dtroyer@gmail.com>
108 lines
3.3 KiB
Bash
Executable File
108 lines
3.3 KiB
Bash
Executable File
#!/bin/bash
|
|
#
|
|
# Copyright(c) 2013-2016, Wind River Systems, Inc.
|
|
#
|
|
# Redistribution and use in source and binary forms, with or without
|
|
# modification, are permitted provided that the following conditions
|
|
# are met:
|
|
#
|
|
# * Redistributions of source code must retain the above copyright
|
|
# notice, this list of conditions and the following disclaimer.
|
|
# * Redistributions in binary form must reproduce the above copyright
|
|
# notice, this list of conditions and the following disclaimer in
|
|
# the documentation and/or other materials provided with the
|
|
# distribution.
|
|
# * Neither the name of Wind River Systems nor the names of its
|
|
# contributors may be used to endorse or promote products derived
|
|
# from this software without specific prior written permission.
|
|
#
|
|
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
#
|
|
# This is a basic sample script showing what the script needs to be able to do.
|
|
# The script can be edited as needed or replaced by a script or binary that
|
|
# works in the same way, or can be deleted entirely if the default behaviour
|
|
# of offlining the highest-numbered CPU is satisfactory and you don't care
|
|
# about logging scaling events.
|
|
#
|
|
# We expect to be called in one of the following ways:
|
|
#
|
|
# "--cpu_add <cpu> <new cpu range>"
|
|
#
|
|
# This indicates that "cpu" has been set online, and we can now make use of it.
|
|
# Do whatever is necessary to start using it, then return 0.
|
|
#
|
|
#
|
|
# "--cpu_del"
|
|
# In this case we pick an online cpu to offline, and do whatever we need to in
|
|
# order to stop using it, and return the cpu number. Note that CPU 0 must
|
|
# always remain online.
|
|
|
|
info_log()
|
|
{
|
|
logger -p daemon.info -t $0 "$*"
|
|
echo $*
|
|
}
|
|
|
|
err_log()
|
|
{
|
|
logger -p daemon.err -t $0 "$*"
|
|
echo $*
|
|
}
|
|
|
|
usage()
|
|
{
|
|
err_log "usage: $0 {--cpu_del | --cpu_add <cpu> <new cpu range>}"
|
|
exit -1
|
|
}
|
|
|
|
cpu_scale_up ()
|
|
{
|
|
CPU_NUM=$1
|
|
CPU_ONLINE_RANGE=$2
|
|
info_log "cpu add notification, cpu: ${CPU_NUM}"
|
|
info_log "cpu_online_range: ${CPU_ONLINE_RANGE}"
|
|
}
|
|
|
|
cpu_scale_down ()
|
|
{
|
|
# Make sure host & guest views of offline cpus are consistent
|
|
/usr/sbin/offline_cpus
|
|
|
|
info_log "cpu del request"
|
|
#pick the highest online cpu
|
|
CPUS_ONLINE=`cat /sys/devices/system/cpu/online`
|
|
CPU_NUM=${CPUS_ONLINE##*[,-]}
|
|
|
|
info_log "selected cpu ${CPU_NUM} to offline"
|
|
return $CPU_NUM
|
|
}
|
|
|
|
if [ $# -lt 1 ]
|
|
then
|
|
usage
|
|
elif [ $1 = "--cpu_add" ]
|
|
then
|
|
if [ $# = 3 ]
|
|
then
|
|
cpu_scale_up $2 $3
|
|
else
|
|
err_log "--cpu_add option called with $# args, expected 3"
|
|
usage
|
|
fi
|
|
elif [ $1 = "--cpu_del" ]
|
|
then
|
|
cpu_scale_down
|
|
else
|
|
usage
|
|
fi
|