CPU Affinity

What is CPU affinity ?

Binding or unbinding  one or more processes to one or more processors called CPU affinity. It enables that process(es) runs only designated processor(s) rather than any processor. There are two types of CPU affinity, which are soft affinity and hard affinity.

Soft affinity is a mechanism that keeping  process on the same CPU as long as possible otherwise, process is migrated to other processor.

Hard affinity is a mechanism that enables processes can run only on a fixed set of  one or more processor(s).

Benefits of CPU affinity

1- Optimizes cache performance as the process runs on the same CPU core and no cache invalidation happens. (NUMA architecture.)

2- Time-sensitive, and real time  applications. Due to the fact that those applications will run only designated cores. And scheduler runs other applications on the other processors.

How to Implement CPU affinity in Linux ?

In Linux, you can set CPU affinity with taskset or numactl command. In this post I will use taskset command.

taskset -c <cpu core(s)> <program>

To run a nvpy, which is python based note taking application, on the only core 0.

taskset -c 0 nvpy

To set cpu affinity for a running process.

First we need to find pid.

gokay@ankara:~$ pgrep nvpy
26119

Set CPU affinity to core 3 for  running process whose pid is 26119.(nvpy)

gokay@ankara:~$ taskset -pc 3 26119
pid 26119's current affinity list: 0
pid 26119's new affinity list: 3
gokay@ankara:~$

Showing process (26119) and its threads of CPUs currently running on.

gokay@ankara:~$ ps -T -p 26119 -o pid,spid,psr
  PID  SPID PSR
26119 26119   3
26119 26121   0
26119 26122   0
26119 26123   0

 

Note: If you do not know what to do please leave it to OS scheduler. Otherwise your application may suffer from compute resources.

 

 

 

 

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.