1、序

1.1 CPU Affinity (CPU亲合力)

  CPU亲合力就是指在Linux系统中能够将一个或多个进程绑定到一个或多个处理器上运行。
  一个进程的CPU亲合力掩码决定了该进程将在哪个或哪几个CPU上运行.在一个多处理器系统中,设置CPU亲合力的掩码可能会获得更好的性能。
  一个CPU的亲合力掩码用一个cpu_set_t结构体来表示一个CPU集合,下面的几个宏分别对这个掩码集进行操作:

  • CPU_ZERO() 清空一个集合;
  • CPU_SET()与CPU_CLR()分别对将一个给定的CPU号加到一个集合或者从一个集合中去掉;
  • CPU_ISSET()检查一个CPU号是否在这个集合中.

*下面两个函数就是用来设置获取线程CPU亲和力状态:

sched_setaffinity(pid_t pid, unsigned int cpusetsize, cpu_set_t *mask) 

  该函数设置进程为pid的这个进程,让它运行在mask所设定的CPU上.如果pid的值为0,则表示指定的是当前进程,使当前进程运行在mask所设定的那些CPU上.第二个参数cpusetsize是mask所指定的数的长度.通常设定为sizeof(cpu_set_t).如果当前pid所指定的进程此时没有运行在mask所指定的任意一个CPU上,则该指定的进程会从其它CPU上迁移到mask的指定的一个CPU上运行;

sched_getaffinity(pid_t pid, unsigned int cpusetsize, cpu_set_t *mask) 

  该函数获得pid所指示的进程的CPU位掩码,并将该掩码返回到mask所指向的结构中.即获得指定pid当前可以运行在哪些CPU上.同样,如果pid的值为0.也表示的是当前进程。
  参考网址:https://www.cnblogs.com/dongzhiquan/archive/2012/02/15/2353274.html

2、示例

if CONFIG_CORE
#define _GNU_SOURCE
#include <sched.h>
#include <unistd.h>
#include <sys/syscall.h>void setAffinity_CPU(pid_t tid, int coreindex)
{cpu_set_t cst;CPU_ZERO(&cst);CPU_SET(coreindex, &cst);sched_setaffinity(tid, sizeof(cst), &cst);
}
#endifvoid main(int argc, char **argv)
{
#if CONFIG_COREint coreindex = 3;pid_t tid = null;coreindex = atoi(argv[0]);tid = syscall(SYS_gettid);setAffinity_CPU(tid, coreindex);
#endif
}
A、附加知识点:
A.1 Linux查看线程的TID

  TID就是Thread ID,他和POSIX中pthread_t表示的线程ID完全不是同一个东西。
  Linux中的POSIX线程库实现的线程其实也是一个轻量级进程(LWP),这个TID就是这个线程的真实PID。
  但是又不能通过getpid()函数获取,Linux中定义了gettid()这个接口,但是通常都是未实现的,所以需要使用下面的方式获取TID。
  参见参考网址1。

//program
#include <sys/syscall.h>
pid_t tid;
tid = syscall(__NR_gettid);// or syscall(SYS_gettid)  //command-line 3种方法(推荐第三种方法)
(1)ps -efL | grep prog_name
(2)ls /proc/pid/task            //文件夹名即TID
(3)ps -To 'pid,lwp,psr,cmd' -p PID

1参考网址:http://blog.163.com/liaoxiangui@126/blog/static/7956964020127204171138/
2参考网址:https://www.cnblogs.com/LubinLew/p/cpu_affinity.html
3参考网址;https://linux.die.net/man/3/cpu_zero
4参考网址;http://www.man7.org/linux/man-pages/man3/CPU_SET.3.html#top_of_page

ARM处理器指定运行核相关推荐

  1. ARM处理器的运行模式和ARM寄存器

    一.ARM处理器共有7种运行模式  处理器模式 描述 用户模式(User,usr) 正常程序执行的模式 快速中断模式(FIQ,fiq) 用于高速数据传输和通道处理 外部中断模式(IRQ,irq) 用于 ...

  2. BlueStacks不仅支持x86和ARM处理器,新版BlueStacks并不是单纯的实现虚拟化,而是运行整个Android系统

    blueStacks是由AMD投资的一款安卓模拟器产品,可以让用户在Windows系统电脑上运行Android应用.日前,AMD宣布对这款应用进行了强化,新版BlueStacks将能在Windows台 ...

  3. ARM处理器运行模式

    ARM处理器运行模式 1.ARM处理器有7种运行模式: 1)用户模式 2)特权模式 3)中断模式 4)快速中断模式 5)终止模式 6)未定义指令模式 7)系统模式 其中,除用户模式外,其他6种模式称为 ...

  4. 基于ARM处理器的LCD控制及触摸屏接口设计

    作者:menuconfig 转自:http://blog.csdn.net/menuconfig/article/details/2621231 研究了一种基于ARM处理器的嵌入式网络收音机的设计方案 ...

  5. 【嵌入式开发】ARM 芯片简介 (ARM芯片类型 | ARM处理器工作模式 | ARM 寄存器 | ARM 寻址)

    作者 : 韩曙亮 博客地址 : http://blog.csdn.net/shulianghan/article/details/42375701 相关资源下载 :  -- 三星 ARM Archit ...

  6. ARM处理器全解析:A8/A9/A15都是什么?

    前不久ARM正式宣布推出新款ARMv8架构的Cortex-A50处理器系列产品,以此来扩大ARM在高性能与低功耗领域的领先地位,进一步抢占移动终端市场份额.Cortex-A50是继Cortex-A15 ...

  7. 华为第四代服务器芯片Hi1620,华为第四代自研芯片Hi1620曝光, 全球首款7nm的ARM处理器...

    日前,AnandTech披露了一组华为第四代ARM服务器自研芯片,Hi1620的主要规格信息,新的Hi1620被宣布为全球首款用于数据中心的7nm处理器,其中Ares内核将为其部署带来高性能. 至少四 ...

  8. ARM处理器的工作状态

    在ARM的体系结构中,可以工作在三种不同的状态,一是ARM状态,二是Thumb状态及Thumb-2状态,三是调试状态. <嵌入式系统开发与应用教程(第2版)>上介绍说:有两种状态ARM状态 ...

  9. ARM处理器与架构对应关系

    在使用ARM内核单片机的时候,经常搞不清楚处理器与内核架构之间的对应关系,于是自己画了一个思维导图,方便观看. 其中相关的命名规则如下 指令集命名规则 ARM 指令集架构命名规则: | ARMv | ...

最新文章

  1. 【面向工业界】推荐算法工程师培养计划
  2. c++中文件应用的一点小变化
  3. mysql dump gtid_mysqldump导出数据备份 --set-gtid-purged=OFF
  4. 计算机操作系统在线作业,【在线】电子科大17春《计算机操作系统》在线作业1...
  5. 返回路径平面上的间隙_裁切机的上刀下刀如何调整?
  6. 计算机系统的备份与还原实验报告,数据库《数据备份与还原》实验报告.doc
  7. android实现日志列表,【Android开发】listview+popupwindow实践:日志列表
  8. linux应用之Lamp(apache+mysql+php)的源码安装(centos)
  9. Google Maps API 进级:GoogleMaps中显示画中画
  10. [JNI]开发之旅(6)JNI函数中访问java类中对象的属性
  11. linux 编码转换iconv命令
  12. 计算机系统驱动级变速软件,驱动精灵
  13. 反编译PyInstaller打包后的exe为py源码
  14. Arduino入门教程(二) Unity动感单车
  15. 谈谈 .NET Reflector
  16. 各厂家端口MTU计算及应用
  17. ChatGPT 带火的「提示工程师」岗,不用写代码,也能获得年薪数百万?
  18. 分析5 中值定理与Taylor公式
  19. 中国IT工作者35岁后的发展出路调查报告(4)
  20. C语言怎么消除最后的回车键,多样例输出,如何去掉最后一个回车

热门文章

  1. 本地提交到yarn_Yarn运行Flink作业 0449
  2. java的数据连接_java中连接各种数据的方法
  3. java 多线程数据分发_多线程分发处理List集合数据
  4. jquery 监听返回事件
  5. 静态导入 java面试_Java面试系列【静态导入】-静态导入,基础篇
  6. 把url地址复制到粘贴板上_写个简单的python爬虫爬取堆糖上漂亮的小姐姐
  7. 深度搜索和广度搜索领接表实现_算法基础04-深度优先搜索、广度优先搜索、二分查找、贪心算法...
  8. 哈希表查找失败的平均查找长度_面试官:哈希表都不知道,你是怎么看懂HashMap的?...
  9. Mysql查询为空赋值为0
  10. Java并发编程之ConcurrentLinkedQueue详解