Skip to content

Instantly share code, notes, and snippets.

@sjenning
Last active May 16, 2017 16:24
Show Gist options
  • Save sjenning/b81c10dcd62d0483abcb0ddda33f2776 to your computer and use it in GitHub Desktop.
Save sjenning/b81c10dcd62d0483abcb0ddda33f2776 to your computer and use it in GitHub Desktop.
#!/bin/bash
#set -x
CGROUPFS=/sys/fs/cgroup
CPUSET=$CGROUPFS/cpuset
CPUACCT=$CGROUPFS/cpu,cpuacct
cleanup() {
set +e
for i in $CPUSET $CPUACCT; do
for j in $i/pod-* $i/burstable/pod-*; do
for k in $(/usr/bin/cat $j/tasks); do
kill $k
echo $k >> $i/tasks
done
/usr/bin/rmdir $j
done
done
}
if [ "$1" = "cleanup" ]; then
cleanup
exit 0
fi
set -ue
if ! command -v stress &> /dev/null; then
echo "stress command is required"
exit 1
fi
mkcpuset() {
NAME=$1
CPUS=$2
PATH=$CPUSET/$NAME
/usr/bin/mkdir -p $PATH
echo $CPUS > $PATH/cpuset.cpus
echo 0 > $PATH/cpuset.mems
echo "$PATH"
}
mkcpuacct() {
NAME=$1
SHARES=$2
QUOTA=$3
PATH=$CPUACCT/$NAME
/usr/bin/mkdir -p $PATH
echo $SHARES > $PATH/cpu.shares
echo $QUOTA > $PATH/cpu.cfs_quota_us
echo "$PATH"
}
joincpuset() {
PATH=$(mkcpuset $*)
echo $BASHPID > $PATH/tasks
}
joincpuacct() {
PATH=$(mkcpuacct $*)
echo $BASHPID > $PATH/tasks
}
# simulate guaranteed pod (core 0 reserved)
gpod() {
NAME=$1
joincpuset pod-$NAME 0-3
joincpuacct pod-$NAME 1500 150000
exec /usr/bin/stress -c 1
}
# simulate burstable pod (no quota)
bupod() {
NAME=$1
joincpuset burstable/pod-$NAME 1-3
joincpuacct burstable/pod-$NAME 2500 -1
exec /usr/bin/stress -c 3
}
trap cleanup SIGINT SIGTERM
# create burstable tier
mkcpuset burstable 1-3
mkcpuacct burstable 2500 -1
# start pods
gpod mygpod &
bupod mybupod &
# print pids in each pod
/usr/bin/sleep 1
for i in $CPUSET/pod-* $CPUSET/burstable/pod-*; do
echo "pids for $(/usr/bin/basename $i)"
/usr/bin/cat $i/tasks
done
# wait for background processes to complete
wait
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment