How to Set or Query CPU Affinity for Running Processes in CentOS/RHEL 6

This post provides information on how to set or retrieve the CPU affinity of running processes. The ‘taskset’ command has been shipped with different package names from version-to-versions.

# cat /etc/redhat-release
CentOS release 6.10 (Final)
# uname -a
Linux geeksearch.mylabserver.com 2.6.32-754.23.1.el6.x86_64 #1 SMP Thu Sep 26 12:05:41 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
# rpm -qf /bin/taskset
util-linux-ng-2.17.2-12.28.el6_9.2.x86_64

From ’taskset’ manual page:

# man taskset
....
DESCRIPTION
       taskset  is used to set or retrieve the CPU affinity of a running process given its PID or to launch a new COMMAND with a given CPU affinity.  CPU affinity is a scheduler prop-
       erty that "bonds" a process to a given set of CPUs on the system.  The Linux scheduler will honor the given CPU affinity and the process will not run on any other  CPUs.   Note
       that  the Linux scheduler also supports natural CPU affinity: the scheduler attempts to keep processes on the same CPU as long as practical for performance reasons.  Therefore,
       forcing a specific CPU affinity is useful only in certain applications.

       The CPU affinity is represented as a bitmask, with the lowest order bit corresponding to the first logical CPU and the highest order bit corresponding to the last logical  CPU.
       Not  all  CPUs may exist on a given system but a mask may specify more CPUs than are present.  A retrieved mask will reflect only the bits that correspond to CPUs physically on
       the system.  If an invalid mask is given (i.e., one that corresponds to no valid CPUs on the current system) an error is returned.  The masks are typically given  in  hexadeci-
       mal.

Query CPU Affinity

To query the current affinity, use ‘-p ’ option ( ‘-c’ to list CPU affinity list):

$ taskset -p 31564
pid 31564's current affinity mask: 64
$ taskset -pc 31564
pid 31564's current affinity list: 2,5,6

The affinity task is defined in hexadecimal format. And each bit with ‘1’ represents a CPU, with right most bit represents CPU # 0

CPU #0: 0x00000001
CPU #1: 0x00000002
CPU #2: 0x00000004
CPU #3: 0x00000008
CPU #0 and CPU #1: 0x00000003
CPU #2 and CPU #3: 0x0000000C
All CPUs: 0xFFFFFFFF

For above example, hexadecimal 64 is ‘01100100’, which is present as 6,5,2.

Set CPU Affinity

To set the CPU affinity for a running process, use ‘-c [cpu list]’ option below:

$ taskset -pc 0,1 31564
pid 31564's current affinity list: 2,5,6
pid 31564's new affinity list: 0,1

For more information please check taskset manual:

$ man taskset