I don't know if something is out there already, but I was scripting a bit and *poof* out came: cpu_affinity
service. Its experimental but you get the idea. I took some example data from this thread, so kindly configure your own via uci or nano.
config: /etc/config/cpu_affinity
config little
option cores '0-3'
list processes 'crond'
config big
option cores '4-7'
list processes 'openvpn'
service: /etc/init.d/cpu_affinity
(dont forget to chmod +x )
#!/bin/sh /etc/rc.common
START=99
STOP=99
NAME=cpu_affinity
LOCK=/var/lock/cpu_affinity.lock
EXTRA_COMMANDS="list"
affinity() {
for type in little big
do
cores="$(uci get cpu_affinity.@$type[0].cores)"
processes="$(uci get cpu_affinity.@$type[0].processes)"
case $1 in
set) logger -t $NAME "setting $type: cores $cores affinity for: $processes";;
clear) logger -t $NAME "clearing affinity for: $processes";;
esac
for pid in $(pgrep "${processes// /|}")
do
case $1 in
set) taskset -ap -c "$cores" "$pid" &>/dev/null ;;
clear) taskset -p 0xff "$pid" &>/dev/null ;;
esac
done
done
}
status() {
[ -e "$LOCK" ]
}
start() {
status && return 1
touch "$LOCK"
affinity set
}
stop() {
status || return 1
affinity clear
rm -f "$LOCK"
}
list() {
process_list="
$(uci get cpu_affinity.@little[0].processes)
$(uci get cpu_affinity.@big[0].processes)
"
awk -v process_list="$process_list" '
BEGIN {
printf "%-30s %s\n", "Name:", "Allowed Cores:"
split(process_list, allowed_process," ")
for (i in allowed_process) {
process_set[allowed_process[i]] = 1
}
}
/^Name:/ { name = $2 }
/^Cpus_allowed_list:/ { cpus_allowed_list = $2 }
/^Cpus_allowed:/ { cpus_allowed = $2 }
/^Cpus_allowed_list:/ {
if (cpus_allowed != "ff" && name ~ /^[a-zA-Z0-9_-]+$/ && name in process_set) {
unique_key = name ":" cpus_allowed_list
if (!seen[unique_key]++) {
printf "%-30s %s\n", name, cpus_allowed_list
}
}
}
' /proc/*/status
}
start/stop/list:
# service cpu_affinity start
# service cpu_affinity list
Name: Allowed Cores:
crond 0-3
# service cpu_affinity stop
# service cpu_affinity list
Name: Allowed Cores:
logging:
# service cpu_affinity start
# service cpu_affinity stop
# logread -e cpu_affinity
user.notice cpu_affinity: setting little: cores 0-3 affinity for: crond
user.notice cpu_affinity: setting big: cores 4-7 affinity for: openvpn
user.notice cpu_affinity: clearing affinity for: crond
user.notice cpu_affinity: clearing affinity for: openvpn
#
add process:
# uci add_list cpu_affinity.@little[0].processes=cheese
# uci show cpu_affinity
cpu_affinity.@little[0]=little
cpu_affinity.@little[0].cores='0-3'
cpu_affinity.@little[0].processes='crond' 'cheese'
cpu_affinity.@big[0]=big
cpu_affinity.@big[0].cores='4-7'
cpu_affinity.@big[0].processes='openvpn'
#
remove process:
# uci del_list cpu_affinity.@little[0].processes=cheese
# uci show cpu_affinity
cpu_affinity.@little[0]=little
cpu_affinity.@little[0].cores='0-3'
cpu_affinity.@little[0].processes='crond'
cpu_affinity.@big[0]=big
cpu_affinity.@big[0].cores='4-7'
cpu_affinity.@big[0].processes='openvpn'
#
It was fun, hopefully its useful, if not Oh well 
edit:
fixed a few mistakes, cleaned up code, and added list