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亲和度的更多相关文章

  1. nginx 网络模型,cpu亲和等优点

    nginx优点1.IO多路复用epollIO多路复用:多个描述符的I/O操作都能在一个线程内并发交替地顺序完成,这里的"复用" 指的是复用同一个线程epollIO多路复用的实现方式 ...

  2. Redis优化之CPU充分利用

    Linux Redis Server之CPU充分利用 不知道大家有没有注意到你们公司的集群配置是否是有一种配置是这样的: 多个Redis Server分布在同一个节点,只是端口不同,如果有的话,应该是 ...

  3. linux系统设置cpu孤立

    介绍 针对cpu密集型的任务,消耗cpu较高,最好设置cpu亲和度,以提高任务执行效率,避免cpu进行上下文切换,浪费不必要的性能. 特定任务(进程/线程)需要独占一个cpu核心并且不想让其他任务(进 ...

  4. python之psutil模块(获取系统性能信息(CPU,内存,磁盘,网络)

    一.psutil模块 1. psutil是一个跨平台库(http://code.google.com/p/psutil/),能够轻松实现获取系统运行的进程和系统利用率(包括CPU.内存.磁盘.网络等) ...

  5. Linux -- 进程或线程独占CPU

    如果想让特定进程或线程独占某一或某些CPU,我们需要做三件事. 一,隔离CPU,避免其它线程run在被隔离的CPU上. 二,绑定所有的interrupts到非隔离的CPU上,避免被隔离的CPU收到in ...

  6. Cocos2dx中线程优先级

    Cocos2dx中线程优先级问题 不论是ios还是android,遇到耗时的任务都要另起线程处理,否则程序不能及时用户的反馈.游戏中如果一圈循环不能在1/frameRate(帧率是30则1/30)秒内 ...

  7. psutil 模块

    psutil.pids()查看单个进程p = psutil.Process(2423) p.name()   #进程名p.exe()    #进程的bin路径p.cwd()    #进程的工作目录绝对 ...

  8. python之系统性能信息模块psutil

    系统性能信息模块psutil 跨平台库 轻松实现获取系统运行的进程和系统利用率(包括CPU.内存.磁盘.网络等)信息. 主要用于系统监控,分析和限制系统资源及进程的管理 实现同等命令行工具提供的功能( ...

  9. 15.python笔记之psutil模块

    一.psutil模块 1. psutil是一个跨平台库(http://code.google.com/p/psutil/),能够轻松实现获取系统运行的进程和系统利用率(包括CPU.内存.磁盘.网络等) ...

随机推荐

  1. Python网络爬虫练习

    1. 豆瓣top250电影 1.1 查看网页 目标网址:https://movie.douban.com/top250?start=0&filter= start=后面的数字从0,25,50一 ...

  2. String、StringBuffer和StringBuilder比较

    从执行速度效率来说: String为字符串常量,一旦创建就不能修改,第一次创建一个String对象,实例化后有初始值:当第二次创建String对象后,再次赋值,表面上看是改变了第一个String对象的 ...

  3. 【Hadoop离线基础总结】Hive的基本操作

    Hive的基本操作 创建数据库与创建数据库表 创建数据库的相关操作 创建数据库:CREATE TABLE IF NOT EXISTS myhive hive创建表成功后的存放位置由hive-site. ...

  4. Tomcat服务器的下载与安装,修改端口号

    安装及简单配置Tomcat服务器: 1.登录www.apache.org 网站,之后点击Projects , 点击Project List,找到Tomcat. 2.点击Tomcat之后,之后进入Tom ...

  5. kubernetes部署redis主从高可用集群

    1.redis主从高可用集群结构 2.k8s部署有状态的服务选择 对于K8S集群有状态的服务,我们可以选择deployment和statefulset statefulset service& ...

  6. linux-Curl error (37): Couldn't read a file:// file for file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-x86_64 [Couldn't open file /e tc/pki/rpm-gpg/RPM-GPG-KEY-fedora-x86_64]

    在安装Python3-pip 的时候遇到 [root@localhost rpm-gpg]# yum install python3-pipFedora 31 - x86_64 - Updates - ...

  7. Windows基础学习

    0x01 常用的端口 HTTP协议代理服务器常用端口号:80/8080/3128/8081/9098SOCKS代理协议服务器常用端口号:1080FTP(文件传输)协议代理服务器常用端口号:21Teln ...

  8. Redis数据类型简介(十分钟快速学习Redis)

    如何在ubuntu18.04上安装和保护redis 如何连接到Redis数据库 如何管理Redis数据库和Keys 如何在Redis中管理副本和客户端 如何在Redis中管理字符串 如何在Redis中 ...

  9. Analysis分析器

    一.Analysis简介 场景执行过程中,loadrunner收集执行过程中的数据,存储在扩展名为.lrr的文件中,Analysis分析器打开这个文件,对文件信息进行处理,并生成图和报告. 数据分析不 ...

  10. 关于Tomcat+Nginx负载均衡与Jmeter服务器测压的日记

    Jmeter测压 1.Jmeter-5.1.1下载:http://mirror.bit.edu.cn/apache//jmeter/binaries/apache-jmeter-5.1.1.zip 2 ...