Zoneshare
From pressy's brainbackup
root@venus # ./zoneshare -? Usage: Report: ./zoneshare -l [-z <zonename>] -l list all zones -z list only that one Manipulate: ./zoneshare [-l] -z <zonename> -v <value> [-p] -l list the changed config -z zone to change -v new cpu-share value -p make the config permanent root@venus # ./zoneshare -l ZONENAME SHARES STATUS CONFIG POOL global 1 running - - testzone 1 running - - OPScenter 2 running 2 POOL1 root@venus # ./zoneshare -l -z OPScenter -v 4 ZONENAME SHARES STATUS CONFIG POOL OPScenter 4 running 2 POOL1 root@venus #
#!/usr/bin/ksh #set -x ###################################################################### # # zoneshare v0.4 # # small script to see and change CPU shares for zones in Solaris. # # 17.09.2010, written by Martin Presslaber # # # NOTES: # Tested on Solaris10 u8 and u9. It won't work with Sol10 releases # which do not have a cpu-shares property in zonecfg. # If you have questions or comments feel free to contact me via mail. # # Tried to improve that script to run on solaris 11. # v0.4 - 29.11.12 Tested and small changes for 11.1 # ###################################################################### ########################### SOME VARs ################################ ZONEADM=/usr/sbin/zoneadm PRCTL=/usr/bin/prctl ZONECFG=/usr/sbin/zonecfg DISPADMIN=/usr/sbin/dispadmin UNAME=/usr/bin/uname ###################################################################### ########################### SOME HELP ################################ help () { print "Usage:" print "\tReport:" print "\t\t$0 -l [-z <zonename>]" print "\t\t\t-l list all zones" print "\t\t\t-z list only that one" print "\tManipulate:" print "\t\t$0 [-l] -z <zonename> -v <value> [-p]" print "\t\t\t-l list the changed config" print "\t\t\t-z zone to change" print "\t\t\t-v new cpu-share value" print "\t\t\t-p make the config permanent" } ###################################################################### ######################### SOME PRECHECKS ############################# OS=$($UNAME -r) # no more /usr/ucb in sol11, and yes, only works on solaris [[ $($UNAME -s) == SunOS ]] || (echo "This script will work on Solaris only" && exit 1) if [ ${OS#*.} -gt 10 ] ; then ID=$(/usr/bin/whoami) else ID=$(/usr/ucb/whoami) fi #### if [ $ID != "root" ]; then echo "$ID, you must be root to run this program." exit 1 fi if [ $# -lt 1 ] then help && exit 1 fi ###################################################################### ######################## WHICH OPTIONS ############################### while getopts ":z:lv:ph" args do case $args in z) zone=$OPTARG if [[ $zone != $($ZONEADM list -c | grep -- $zone) ]] then print "ERROR: Wrong zone name or missing argument" && help && exit 5 fi ;; l) list=yes ;; v) # chance value=$OPTARG [[ $value == +([0-9]) ]] && [[ $value -gt 0 && $value -lt 65535 ]] || value=WRONG ;; p) permanent=yes ;; h|*) help && exit 0 ;; esac done shift $(($OPTIND -1)) ###################################################################### ############################ LET's GO ################################ listZ () { # OUTPUT print " ZONENAME\t SHARES\t STATUS\t CONFIG\t POOL" if [[ $zone == "" ]] then for zonelist in $($ZONEADM list -c); do # Zone-State zonestatus=$($ZONEADM list -cp | nawk -F: -v zname="$zonelist" '$2~zname {print $3}') configvalue=$($ZONECFG -z $zonelist info cpu-shares) configvalue=${configvalue#*:}; configvalue=${configvalue%*]}; configvalue=${configvalue:="-"} configpool=$($ZONECFG -z $zonelist info pool) configpool=${configpool#* }; configpool=${configpool%*]}; configpool=${configpool:="-"} if [[ $zonestatus == "running" ]] then testv=$($PRCTL -P -t privileged -n zone.cpu-shares -i zone $zonelist | awk '$2 ~ /priv/ {print $3}') [[ $zonelist == "global" ]] && \ printf " %-12s %11s %15s %15s %13s\n" $zonelist $testv $zonestatus $configvalue $configpool || \ printf " %-12s %10s %15s %15s %13s\n" $zonelist $testv $zonestatus $configvalue $configpool else printf " %-12s %10s %15s %15s %13s\n" $zonelist "-" $zonestatus $configvalue $configpool fi done else zonestatus=$($ZONEADM list -cp | nawk -F: -v zname="$zone" '$2~zname {print $3}') configvalue=$($ZONECFG -z $zone info cpu-shares) configvalue=${configvalue#*:}; configvalue=${configvalue%*]}; configvalue=${configvalue:="-"} configpool=$($ZONECFG -z $zone info pool) configpool=${configpool#* }; configpool=${configpool%*]}; configpool=${configpool:="-"} if [[ $zonestatus == "running" ]] then testv=$($PRCTL -P -t privileged -n zone.cpu-shares -i zone $zone | awk '$2 ~ /priv/ {print $3}') printf " %-12s %10s %15s %15s %13s\n" $zone $testv $zonestatus $configvalue $configpool else printf " %-12s %10s %15s %15s %13s\n" $zone "-" $zonestatus $configvalue $configpool fi fi } if [[ $zone == "" ]] then [[ $list == "yes" ]] && listZ || help else if [[ $zone == $($ZONEADM list -c | grep $zone) ]] then if [[ $value != "" ]] then if [[ $value == "WRONG" ]] then print "ERROR:\tValue must be an integer [1-65534]!" && exit 3 else zonestatus=$($ZONEADM list -cp | nawk -F: -v zname="$zone" '$2~zname {print $3}') if [[ $zonestatus != "running" ]] then [[ $permanent == "yes" ]] && $ZONECFG -z $zone set cpu-shares=$value || \ print "ERROR: Can't change live-value for zone $zone when state is \"$zonestatus\"" else $PRCTL -n zone.cpu-shares -r -v $value -i zone $zone [[ $permanent == "yes" ]] && $ZONECFG -z $zone set cpu-shares=$value fi fi fi [[ $list == "yes" ]] && listZ else print "ERROR:\tZone $zone not found!" && exit 1 fi fi ###################################################################### ########################## OPTIONS OK? ############################### [[ $zone != "" && $value == "" && $list == "" ]] && print "$0 syntax error" && help [[ $value != "" && $zone == "" ]] && print "INFO:\tIgnoring value, no zone specified" ###################################################################### ############################# EXTRA ################################## FSS=$($DISPADMIN -l | grep FSS) [[ $FSS == "" ]] && print "\nINFO:\t It makes no sence to configure CPU shares if you don't use the fair share scheduler\n" ############################# EOF ####################################