CPU亲和度(CPU Affinity),就是将一个进程或者线程强制绑定在CPU的某一个core上运行。

参考:https://www.cnblogs.com/zhangxuan/p/6427533.html

https://www.cnblogs.com/LubinLew/p/cpu_affinity.html

demo是将ljj_test进程强制绑定在CPU core7上运行。

代码如下:

 #define __USE_GNU //这个必须要加,不然编译不过,因为在sched.h中,用该宏控制打开和关闭cpu_set_t的定义
#include <stdio.h>
#include <unistd.h>
#include <sched.h>
#include <stdlib.h> int main(){
int i, pid, ret, num;
cpu_set_t mask; pid = getpid();
num = sysconf(_SC_NPROCESSORS_CONF); //获取核数
printf("[ljj_test] pid = %d, cpu cores = %d\n",pid, num); CPU_ZERO(&mask);//clear
CPU_SET(, &mask);//cpu7 ret = sched_setaffinity(pid, sizeof(cpu_set_t), &mask);
if(ret < )
{
printf("[ljj_test]---error1\n");
return -;
} CPU_ZERO(&mask);//clear ret = sched_getaffinity(pid, sizeof(cpu_set_t), &mask);
if(ret < )
{
printf("[ljj_test]---error2\n");
return -;
} for (i = ; i < num; i++)
{
if (CPU_ISSET(i, &mask))//判断线程与哪个CPU有亲和力
printf("this thread %d is running processor : %d\n", i,i);
} i = ;
while(i--)
{
sleep();
printf("[ljj_test]---cnt = %d\n", i);
}
return ;
}

运行log如下:

 htc_imedugl:/ # ./system/xbin/ljj_test
[ljj_test] pid = , cpu cores =
this thread is running processor :
[ljj_test]---cnt =
[ljj_test]---cnt =
[ljj_test]---cnt =
[ljj_test]---cnt =
[ljj_test]---cnt =
[ljj_test]---cnt =
[ljj_test]---cnt =
[ljj_test]---cnt =
[ljj_test]---cnt =
[ljj_test]---cnt =
[ljj_test]---cnt =
[ljj_test]---cnt =
[ljj_test]---cnt =
[ljj_test]---cnt =
[ljj_test]---cnt =
[ljj_test]---cnt =
[ljj_test]---cnt =
[ljj_test]---cnt =
[ljj_test]---cnt =
[ljj_test]---cnt =
[ljj_test]---cnt =
[ljj_test]---cnt =
[ljj_test]---cnt =
[ljj_test]---cnt =
[ljj_test]---cnt =
[ljj_test]---cnt =
[ljj_test]---cnt =
[ljj_test]---cnt =
[ljj_test]---cnt =
[ljj_test]---cnt =

同时,我也抓取了systrace,用于check进程的运行情况。如下:

首先,一开始运行ljj_test,没有设置亲和度,那么它默认从CPU0上运行了(这个不一定每次是CPU core0,是会从进程调度的管理中动态选择core而运行new task):

而后,设置了CPU亲和度,将进程绑定到了CPU core7上,

因为使用了一个while循环,多次运行printf,但是由于使用的是sleep函数,会主动放弃时间片,所以只有一小段时间是处于running:

并且每个间隔都约1s:

最新文章

  1. php curl 例子
  2. svn 的备份还原
  3. day5_常用模块
  4. WPF 之 TreeView右键选中节点及节点重命名
  5. Python脚本控制的WebDriver 常用操作 &lt;二十一&gt; 执行JS
  6. 【BZOJ2318】【spoj4060】game with probability Problem 概率DP
  7. RHEL修改主机名和IP
  8. margin 和 padding 的本质区别
  9. Django(三) ORM 数据库操作
  10. centos7之zabbix的web检测
  11. Lvs Dr 模式配置
  12. 分频器的Verilog实现
  13. 使用Gson解析复杂、变态的Json数据(包含中文key)
  14. redis缓存服务器集群搭建
  15. php 请求另一个服务器接口返回数据
  16. 20155226 《网络对抗》Exp9 Web安全基础
  17. 解决 ERROR in native method: JDWP No transports initialized, jvmtiError=AGENT_ERROR_TRANSPORT_INIT(197)
  18. 【BZOJ3691】游行 费用流
  19. Oracle体系结构之联机日志文件管理
  20. Elasticsearch 索引的全量/增量更新

热门文章

  1. C语言进阶_变量属性
  2. HBase Filter 过滤器之QualifierFilter详解
  3. [hdu5375 Gray code]DP
  4. 00001- layui 表格的默认工具栏添加自定义按钮
  5. DPDK LPM库(学习笔记)
  6. poj2449第K小路径问题
  7. HDU1160
  8. C# 使用RestClient 调用接口
  9. 开箱即用,Knative 给您极致的容器 Serverless 体验
  10. SpringBoot2.x【一】从零开始环境搭建