CPU亲和力

本文介绍了Linux中的CPU亲和力概念,如何使用taskset命令调整进程的CPU绑定,以及如何通过sched_setaffinity和pthread_setaffinity_np进行更精细的控制。重点讨论了提高缓存效率和性能测试的应用场景。
摘要由CSDN通过智能技术生成

  1、taskset:retrieve or set a processes's CPU affinity

  1)CPU亲和力是一种调度特性,它将一个进程“绑定”到某个CPU集合上。当然,调度程序也支持天然的CPU亲和力,这意味着进程通常不会在CPU之间频繁迁移。

  CPU亲和力可用位掩码表示,如0x3表示CPU 0和CPU 1。缺省时进程的掩码位全为1。

  fork出来的子进程继承父进程的CPU亲和力掩码,调用execve之后进程保留原本的掩码。

  2)选项:-p:指定PID;-c:指定CPU集合,如0,5,7,9-11

  3)示例:

  设置PID为14035的进程的亲和力掩码:taskset -p 03 14035

  查看PID为14035的进程的CPU亲和力掩码:taskset -p 14035

以指定亲和力掩码启动sshd命令:taskset 03 sshd -b 1024

查看某个watchdog进程运行在哪个CPU上:

$ ps aux|grep watchdog | grep -v grep
root         6  0.0  0.0      0     0 ?        S    Jul03   0:01 [watchdog/0]
... ...
root        50  0.0  0.0      0     0 ?        S    Jul03   0:00 [watchdog/11]
root        54  0.0  0.0      0     0 ?        S    Jul03   0:00 [watchdog/12]
root        58  0.0  0.0      0     0 ?        S    Jul03   0:00 [watchdog/13]
root        62  0.0  0.0      0     0 ?        S    Jul03   0:00 [watchdog/14]
root        66  0.0  0.0      0     0 ?        S    Jul03   0:01 [watchdog/15]
$ taskset -c -p 50
pid 50's current affinity list: 11

  4)使用CPU亲和力的几个原因:绑定到一个特定CPU有利于提高CPU缓存的命中率;可根据需要给进程专门指定一个或多个CPU;改变进程的亲和力掩码,测试复杂应用程序在不同硬件条件下的表现等。

  2、sched_setaffinity和sched_getaffinity

// 设置和获取进/线程的CPU亲和力掩码。这两个系统调用是Linux特有的
int sched_setaffinity(pid_t pid, size_t cpusetsize, cpu_set_t *mask);
int sched_getaffinity(pid_t pid, size_t cpusetsize, cpu_set_t *mask);

// 如果使用的是POSIX线程的API,则用以下两个函数
int pthread_setaffinity_np(pthread_t thread, size_t cpusetsize, const cpu_set_t *cpuset);
int pthread_getaffinity_np(pthread_t thread, size_t cpusetsize, cpu_set_t *cpuset);

  四个操作亲和力掩码(cpu_set_t,CPU集合)的宏:CPU_ZERO:清空集合;CPU_CLR:把一个CPU从集合中移除;CPU_SET:把一个CPU加入到集合;CPU_ISSET:测试一个CPU是否在集合中。

  常量CPU_SETSIZE指出CPU集合中最多能存放的最大CPU数加1。

获取CPU个数:int num = sysconf(_SC_NPROCESSORS_CONF);

原文作者:han'er

原文地址:CPU亲和力 - han'er - 博客园(版权归原文作者所有,侵权留言联系删除)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值