CPU亲和度
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:

CPU亲和度的更多相关文章
- nginx 网络模型,cpu亲和等优点
nginx优点1.IO多路复用epollIO多路复用:多个描述符的I/O操作都能在一个线程内并发交替地顺序完成,这里的"复用" 指的是复用同一个线程epollIO多路复用的实现方式 ...
- Redis优化之CPU充分利用
Linux Redis Server之CPU充分利用 不知道大家有没有注意到你们公司的集群配置是否是有一种配置是这样的: 多个Redis Server分布在同一个节点,只是端口不同,如果有的话,应该是 ...
- linux系统设置cpu孤立
介绍 针对cpu密集型的任务,消耗cpu较高,最好设置cpu亲和度,以提高任务执行效率,避免cpu进行上下文切换,浪费不必要的性能. 特定任务(进程/线程)需要独占一个cpu核心并且不想让其他任务(进 ...
- python之psutil模块(获取系统性能信息(CPU,内存,磁盘,网络)
一.psutil模块 1. psutil是一个跨平台库(http://code.google.com/p/psutil/),能够轻松实现获取系统运行的进程和系统利用率(包括CPU.内存.磁盘.网络等) ...
- Linux -- 进程或线程独占CPU
如果想让特定进程或线程独占某一或某些CPU,我们需要做三件事. 一,隔离CPU,避免其它线程run在被隔离的CPU上. 二,绑定所有的interrupts到非隔离的CPU上,避免被隔离的CPU收到in ...
- Cocos2dx中线程优先级
Cocos2dx中线程优先级问题 不论是ios还是android,遇到耗时的任务都要另起线程处理,否则程序不能及时用户的反馈.游戏中如果一圈循环不能在1/frameRate(帧率是30则1/30)秒内 ...
- psutil 模块
psutil.pids()查看单个进程p = psutil.Process(2423) p.name() #进程名p.exe() #进程的bin路径p.cwd() #进程的工作目录绝对 ...
- python之系统性能信息模块psutil
系统性能信息模块psutil 跨平台库 轻松实现获取系统运行的进程和系统利用率(包括CPU.内存.磁盘.网络等)信息. 主要用于系统监控,分析和限制系统资源及进程的管理 实现同等命令行工具提供的功能( ...
- 15.python笔记之psutil模块
一.psutil模块 1. psutil是一个跨平台库(http://code.google.com/p/psutil/),能够轻松实现获取系统运行的进程和系统利用率(包括CPU.内存.磁盘.网络等) ...
随机推荐
- FOC:在MCU上检验Clark和Park坐标变换是否正确
文章目录 前言 程序 头文件 clark 变换 C实现 park c 变换实现 仿真 前言 仿真简单,可以参考仿真的结果,但是实际中将代码移植到MCU,会出现一些新的问题,所以需要对坐标变换部分算法进 ...
- 对文本的内容进行排序(io流、集合操作)
package com.itheima.demo01.BufferedStream; import java.io.*; import java.util.HashMap; /* 练习: 对文本的内容 ...
- Android将库导入到build.gradle
如图
- 比AtomicLong更优秀的LongAdder确定不来了解一下吗?
前言 思维导图.png 文章中所有高清无码图片在公众号号回复: 图片666 即可查阅, 可直接关注公众号:壹枝花算不算浪漫 最近阿里巴巴发布了Java开发手册(泰山版) (公众号回复: 开发手册 可收 ...
- 1005 Spell It Right (20分)
1005 Spell It Right (20分) 题目: Given a non-negative integer N, your task is to compute the sum of all ...
- 2020版Adobe全家桶介绍及免费下载安装
前言 Adobe公司创建于1982年,是世界领先的数字媒体和在线营销解决方案供应商.公司总部位于美国加利福尼亚州圣何塞.Adobe 的 客户包括世界各地的企业.知识工作者.创意人士和设计者.OEM合作 ...
- 论文阅读:Reducing Transformer Depth On Demand With Structured Dropout
Introduction 这篇paper是做Transformer压缩的,但其实bert的核心也就是transformer,这篇paper的实验里也做了bert的压缩.作者的主要工作是提出了Layer ...
- Centos慢慢长大(一)
1.写在前面 这将是一个系列性的文章.可能更多的是记录我在学习的过程中的一些感悟吧.我想强调的是在这一系列文章里我会从最小化的安装开始,然后逐渐的增加需要安装的软件.就象一个婴儿的诞生,慢慢的学走路. ...
- Java并发编程入门(二)
1.竞态条件 1.1 定义 当某个计算的正确性取决于多个线程的交替执行时序时,就会发生竞态条件.换句话说,正确的结果要取决于运气. 最常见的竞态条件类型:先检查后执行(Check-Then-Act)操 ...
- 验证for循环打印数字1-9999所需要使用的时间(毫秒)
package com.yhqtv.demo01.FunctionalInterface; /* * @author XMKJ yhqtv.com Email:yhqtv@qq.com * @crea ...