Skip to content

Instantly share code, notes, and snippets.

@sethhall
Created May 13, 2013 15:54
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save sethhall/5569364 to your computer and use it in GitHub Desktop.
Save sethhall/5569364 to your computer and use it in GitHub Desktop.
CPU Pinning on FreeBSD
#!/usr/bin/env bash
# the number of workers we expect
WORKER_COUNT=7
# the number of proxies we expect
PROXY_COUNT=0
# the cpu mask for our default set
DFLT_SET="0,1,9,10,11"
# get short hostname
HOSTNAME=$(hostname -s)
case $1 in
start)
# put all processes in a default CPU set
cpuset -l ${DFLT_SECT} -s 1
if [[ ${WORKER_COUNT} -gt 0 ]];
then
for i in $(jot ${WORKER_COUNT} 1 ${WORKER_COUNT});
do
WORKER_PID=$(</usr/local/bro/spool/${HOSTNAME}-$i/.pid)
ps $WORKER_PID >/dev/null 2>&1
RET_VAL=$?
if [[ $RET_VAL -eq 0 ]];
then
let CPUID=1
let "CPUID = CPUID + $i"
cpuset -C -c -l $CPUID -p ${WORKER_PID}
fi
done
fi
if [[ ${PROXY_COUNT} -gt 0 ]];
then
for i in $(jot ${PROXY_COUNT} 1 ${PROXY_COUNT});
do
PROXY_PID=$(</usr/local/bro/spool/${HOSTNAME}-$i/.pid)
ps $PROXY_PID >/dev/null 2>&1
RET_VAL=$?
if [[ $RET_VAL -eq 0 ]];
then
cpuset -C -c -l $i -p ${PROXY_PID}
fi
done
fi
;;
check)
if [[ $WORKER_COUNT -gt 0 ]];
then
for i in $(jot $WORKER_COUNT 1 $WORKER_COUNT);
do
WORKER_PID=$(</usr/local/bro/spool/$HOSTNAME-$i/.pid)
ps $WORKER_PID >/dev/null 2>&1
RET_VAL=$?
if [[ $RET_VAL -eq 0 ]];
then
CURRENT_CPU=$(cpuset -g -p $WORKER_PID |cut -d" " -f4|egrep -o [0-9]*)
let CPUID=1
let CPUID="CPUID = CPUID + $i"
if [[ $CURRENT_CPU -eq $CPUID ]];
then
echo "$HOSTNAME-$i is pinned to CPU $CURRENT_CPU"
else
echo "$HOSTNAME-$i is not pinned correctly : CPU $CURRENT_CPU"
fi
fi
done
fi
if [[ $PROXY_COUNT -gt 0 ]];
then
for i in $(jot $PROXY_COUNT 1 $PROXY_COUNT);
do
PROXY_PID=$(</usr/local/bro/spool/proxy-$i/.pid)
ps $PROXY_PID >/dev/null 2>&1
RET_VAL=$?
if [[ $RET_VAL -eq 0 ]];
then
CURRENT_CPU=$(cpuset -g -p $PROXY_PID |cut -d" " -f4|egrep -o [0-9]*)
if [[ $CURRENT_CPU -eq $i ]];
then
echo "$HOSTNAME-$i is pinned to CPU $CURRENT_CPU"
else
echo "$HOSTNAME-$i is not pinned correctly : CPU $CURRENT_CPU"
fi
fi
done
fi
;;
list)
if [[ $WORKER_COUNT -gt 0 ]];
then
for i in $(jot $WORKER_COUNT 1 $WORKER_COUNT);
do
WORKER_PID=$(</usr/local/bro/spool/$HOSTNAME-$i/.pid)
ps $WORKER_PID >/dev/null 2>&1
RET_VAL=$?
if [[ $RET_VAL -eq 0 ]];
then
CURRENT_SET=$(cpuset -g -i -p $WORKER_PID |cut -d" " -f5|egrep -o [0-9]*)
CURRENT_CPU=$(cpuset -g -p $WORKER_PID |cut -d" " -f4|egrep -o [0-9]*)
echo "worker $HOSTNAME-$i [$WORKER_PID] in set $CURRENT_SET on CPU $CURRENT_CPU"
fi
done
fi
if [[ $PROXY_COUNT -gt 0 ]];
then
for i in $(jot $PROXY_COUNT 1 $PROXY_COUNT);
do
PROXY_PID=$(</usr/local/bro/spool/proxy-$i/.pid)
ps $PROXY_PID >/dev/null 2>&1
RET_VAL=$?
if [[ $RET_VAL -eq 0 ]];
then
CURRENT_SET=$(cpuset -g -i -p $PROXY_PID |cut -d" " -f5|egrep -o [0-9]*)
CURRENT_CPU=$(cpuset -g -p $PROXY_PID |cut -d" " -f4|egrep -o [0-9]*)
echo "worker proxy-$i [$PROXY_PID] in set $CURRENT_SET on CPU $CURRENT_CPU"
fi
done
fi
;;
fix)
if [[ $WORKER_COUNT -gt 0 ]];
then
for i in $(jot $WORKER_COUNT 1 $WORKER_COUNT);
do
WORKER_PID=$(</usr/local/bro/spool/$HOSTNAME-$i/.pid)
ps $WORKER_PID >/dev/null 2>&1
RET_VAL=$?
if [[ $RET_VAL -eq 0 ]];
then
let CPUID=1
let "CPUID = CPUID + $i"
CURRENT_CPU=$(cpuset -g -p $WORKER_PID |cut -d" " -f4|egrep -o [0-9]*)
if [[ $CURRENT_CPU -ne $CPUID ]];
then
cpuset -C -c -l $CPUID -p $WORKER_PID
NEW_CPU=$(cpuset -g -p $WORKER_PID |cut -d" " -f4|egrep -o [0-9]*)
echo "worker $HOSTNAME-$i [$WORKER_PID] moved from CPU $CURRENT_CPU to CPU $NEW_CPU"
fi
fi
done
fi
if [[ $PROXY_COUNT -gt 0 ]];
then
for i in $(jot $PROXY_COUNT 1 $PROXY_COUNT);
do
PROXY_PID=$(</usr/local/bro/spool/proxy-$i/.pid)
ps $PROXY_PID >/dev/null 2>&1
RET_VAL=$?
if [[ $RET_VAL -eq 0 ]];
then
CURRENT_CPU=$(cpuset -g -p $PROXY_PID |cut -d" " -f4|egrep -o [0-9]*)
if [[ $CURRENT_CPU -ne $i ]];
then
cpuset -C -c -l $i -p $PROXY_PID
NEW_CPU=$(cpuset -g -p $PROXY_PID |cut -d" " -f4|egrep -o [0-9]*)
echo "worker proxy-$i [$PROXY_PID] moved from CPU $CURRENT_CPU to CPU $NEW_CPU"
fi
fi
done
fi
;;
*)
echo "Tell me what to do : start | check | list"
exit
;;
esac
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment