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.内存.磁盘.网络等) ...
随机推荐
- SSM的医院管理系统录像
视频观看地址:http://mp.toutiao.com/preview_article/?pgc_id=6806135073323090444
- NLTK的安装与简单测试
1.NLTK简介 Natural Language Toolkit,自然语言处理工具包,在NLP领域中,最常使用的一个Python库.NLTK是一个开源的项目,包含:Python模块,数据集和教程,用 ...
- ysql常用sql语句(12)- group by 分组查询
测试必备的Mysql常用sql语句,每天敲一篇,每次敲三遍,每月一循环,全都可记住!! https://www.cnblogs.com/poloyy/category/1683347.html 前言 ...
- 设计模式之GOF23代理模式03
动态代理 public class StarHandler implements InvocationHandler{ Star realStar; public StarHandler(Star ...
- [hdu5360]贪心
题意:一个人想邀请n个人出去玩,假设当前同意和他一起去的人数为cnt,那么他去邀请i的时候,i同意的条件是L[i]<=cnt<=R[i],L[i],R[i]是给定的,问怎样安排邀请顺序,使 ...
- Mysql 常用函数(20)- ceiling 函数
Mysql常用函数的汇总,可看下面系列文章 https://www.cnblogs.com/poloyy/category/1765164.html ceiling 的作用 向上取整,ceil 函数一 ...
- Docker容器映射到宿主机只有tcp6没有tcp问题
问题描述: Docker容器映射到宿主机后,查询端口连接只有tcp6没有tcp,通过ipv4地址连接时无法连接成功. 处理方法: 1.检查是否开启ipv4端口转发 sysctl net.ipv4.ip ...
- 关于 Blob
博客地址:https://ainyi.com/88 对于 Blob,前端开发中可能比较少遇到:数据库中可使用 Blob 概念,例如 Mysql 存储二进制数据的类型就是 Blob,也就是说图片可存储于 ...
- 黑马程序员_毕向东_Java基础视频教程——位运算练习(随笔)
位运算(练习) 最有效率的方式算出 2乘以 8等于几 2 << 3 = 2 * 2^3 = 2 * 8 = 16 对于两个整数变量的值进行互换(不需要第三方变量) class Test { ...
- win10安装nodejs,修改全局依赖位置和环境变量配置
为什么要修改nodejs全局依赖位置? nodejs全局依赖安装默认位置在C盘,导致C盘文件太大,影响电脑运行速度. 步骤: 安装nodejs(在node官网下载并安装) 查看nodejs版本(在命令 ...