taskset for CPU affinity
SMP operating systems have choices when it comes to scheduling processes:
a new or newly rescheduled process can run on any available cpu. However,
while it shouldn't matter where a new process runs, an existing process
should go back to the same cpu it was running on simply because the cpu
may still be caching data that belongs to that process. This is
particularly apt to be true if the process is a thread: the other threads
in the same program are very likely to have cpu cache of interest to
their brethren (though obviously this also diminishes the performance
gain that might be seen from multithreading) . For these reasons, scheduling algorithms pay attention to cpu affinity and try to keep it constant.
It is possible to force a process to run only on a certain cpu. There
are Linux system calls (sched_setaffinity and sched_getaffinity) and a command
Most of us probably don't need to bother with being heavy handed here.
The Linux scheduler probably does a better job assigning processes to
cpu's than we would. There may be conditions where you want to effectively
dedicate a cpu to a certain process. Usually that means forcing all
other processes to another cpu to prevent them from migrating to the
cpu you want to keep dedicate. That's not too hard if we are only
dealing with two cpu's because processes inherit affinity from their
parants. So if you forced "init" to bind to cpu 0, all of its children
would inherit that restriction and wouldn't use cpu one unless specifically
set. You'd then set your "special" process to use cpu 1. This only
gets a little more complicated with more than two processors;
available cpu's are just a bit mask, so you would bind init to use
more than one cpu but not the one you want to keep clear.
Got something to add? Send me email.
Increase ad revenue 50-250% with Ezoic
More Articles by Tony Lawrence
Find me on Google+
© 2012-01-09 Tony Lawrence