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