CPU的亲缘性

查看CPU个数

总核数 = 物理CPU个数 X 每颗物理CPU的核数
总逻辑CPU数 = 物理CPU个数 X 每颗物理CPU的核数 X 超线程数

  • 查看物理CPU个数
    cat /proc/cpuinfo| grep “physical id”| sort| uniq| wc -l

  • 查看每个物理CPU中core的个数(即核数)
    cat /proc/cpuinfo| grep “cpu cores”| uniq

  • 查看逻辑CPU的个数
    cat /proc/cpuinfo| grep “processor”| wc -l

  • 查看CPU型号
    cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c

如何查看进程和线程的CPU亲缘性

http://www.embeddedlinux.org.cn/html/xinshourumen/201601/30-5013.html

线程如何设置CPU的亲缘性

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
cpu_set_t cpuset;
pthread_attr_t attr;
pthread_attr_init(&attr);
pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);

//设置主线程在CPU0上
pthread_t master_tid = pthread_self();
CPU_ZERO(&cpuset);
CPU_SET(0, &cpuset);
pthread_setaffinity_np(master_tid, sizeof(cpu_set_t), &cpuset);

for(int i = 0; i < MAX_THREAD_NUM; i++)
{
//将第i个线程绑定至第i + 1个core上执行, 因为CPU0上运行主线程
CPU_ZERO(&cpuset);
CPU_SET(i + 1, &cpuset);
pthread_attr_setaffinity_np(&attr, sizeof(cpu_set_t), &cpuset);
pthread_create(&tid[i], &attr, thread_proc, &loop_count);
}