将进程与cpu绑定,最直观的好处就是减少cpu之间的cache同步和切换,提高了cpu cache的命中率,提高代码的效率。

从cpu架构上,NUMA拥有独立的本地内存,节点之间可以通过互换模块做连接和信息交互,因此每个CPU可以访问整个系统的内存,但是访问远地内存访问效率大大降低,绑定cpu操作对此类系统运行速度会有较大提升,UMA架构下,多cpu通过系统总线访问存储模块。不难看出,NUMA使用cpu绑定时,每个核心可以更专注地处理一件事情,资源体系被充分使用,减少了同步的损耗。

简单地说,CPU 亲和性(affinity)就是进程要在某个给定的 CPU 上尽量长时间地运行而不被迁移到其他处理器的倾向性。

软亲和性(affinity): 就是进程要在指定的 CPU 上尽量长时间地运行而不被迁移到其他处理器,Linux 内核进程调度器天生就具有被称为 软 CPU 亲和性(affinity) 的特性,这意味着进程通常不会在处理器之间频繁迁移。这种状态正是我们希望的,因为进程迁移的频率小就意味着产生的负载小。

2.6 版本的 Linux 内核还包含了一种机制,它让开发人员可以编程实现硬 CPU 亲和性(affinity)。这意味着应用程序可以显式地指定进程在哪个(或哪些)处理器上运行。

硬亲和性(affinity):简单来说就是利用linux内核提供给用户的API,强行将进程或者线程绑定到某一个指定的cpu核运行。

在 Linux 内核中,所有的进程都有一个相关的数据结构,称为 task_struct 。这个结构非常重要,原因有很多;其中与 亲和性(affinity)相关度最高的是cpus_allowed 位掩码。这个位掩码由n位组成,与系统中的n个逻辑处理器一一对应。 具有 4 个物理 CPU 的系统可以有 4 位。如果这些 CPU 都启用了超线程,那么这个系统就有一个 8 位的位掩码。

如果为给定的进程设置了给定的位,那么这个进程就可以在相关的 CPU 上运行。因此,如果一个进程可以在任何 CPU 上运行,并且能够根据需要在处理器之间进行迁移,那么位掩码就全是 1。实际上,这就是 Linux 中进程的缺省状态。

一般情况下,在应用程序中只需使用缺省的调度器行为。然而,您可能会希望修改这些缺省行为以实现性能的优化。让我们来看一下使用硬亲和性(affinity) 的 3 个原因。

原因 1. 有大量计算要做

基于大量计算的情形通常出现在科学和理论计算中,但是通用领域的计算也可能出现这种情况。一个常见的标志是您发现自己的应用程序要在多处理器的机器上花费大量的计算时间。

原因 2. 提高Cache命中率

在多核运行的机器上,每个CPU都有自己的缓存,缓存着进程使用的信息,而进程可能会被OS调度到其他CPU上,如此一来CPU Cache命中率就低了。当绑定CPU后,程序就会一直在指定的cpu跑,不会由OS调度到其他CPU上,提高CPU Cache命中率。

原因 3. 正在运行时间敏感的、决定性的进程

我们对 CPU 亲和性(affinity)感兴趣的最后一个原因是实时(对时间敏感的)进程。例如,您可能会希望使用硬亲和性(affinity)来指定一个 8 路主机上的某个处理器,而同时允许其他 7 个处理器处理所有普通的系统调度。这种做法确保长时间运行、对时间敏感的应用程序可以得到运行,同时可以允许其他应用程序独占其余的计算资源。

进程设置:

1 cpu_set_t mask;2 /*初始化set集,将set设置为空*/

3 CPU_ZERO(&mask);4 /*依次将0、1号cpu加入到集合*/

5 CPU_SET(0, &mask);6 CPU_SET(1, &mask);7 /*将当前进程绑定到cpu*/

8 sched_setaffinity(0, sizeof(mask), &mask);

线程设置:

1 cpu_set_t mask;2 /*初始化set集,将set设置为空*/

3 CPU_ZERO(&mask);4 /*依次将0、1号cpu加入到集合*/

5 CPU_SET(0, &mask);6 CPU_SET(1, &mask);7 /*将当前线程程绑定到cpu*/

8 pthread_setaffinity_np(pthread_self(), sizeof(mask), &mask);

节选自:

shell下也可以指定用哪个cpu。这对于作测试很方便。

java设置cpu亲和性_cpu亲和性绑定相关推荐

  1. java手机cpu测试_CPU性能检测下载

    测试你的CPU速度和性能,这个简单而强大的工具. 用于教育目的这个进程也可以比较不同的方法,看看它们之间的关系. 有了这个性能测试工具,你可以通过测试手机CPU: 测试使用的Java代码被称为整数AL ...

  2. 设置cpu亲和性_如何快速设置一个任务的CPU亲和力?

    设置cpu亲和性 How to set one task's CPU affinity quickly? 如何快速设置一个任务的CPU亲和力? 1, Get this task's ID 1,获取此任 ...

  3. Linux设置进程CPU亲和力(核心绑定)

    文章目录 1. 获取CPU核数 2. 线程绑定CPU核心 ① 概念 ② 函数 ③ 例子 1. 获取CPU核数 int CPU_NUM = sysconf(_SC_NPROCESSORS_CONF); ...

  4. Qt 设置CPU亲缘性,把进程和线程绑定到CPU核心上(Linux)

    Qt 设置CPU亲缘性,把进程和线程绑定到CPU核心上(Linux) 文章目录 Qt 设置CPU亲缘性,把进程和线程绑定到CPU核心上(Linux) 摘要 1 什么是CPU亲缘性 2 目的 3 API ...

  5. linux线程亲和性,线程亲和性

    解 Linux? 2.6 调度器如何处理 CPU 亲和性(affinity)可以帮助您更好地设计用户空间的应用程序.软亲和性(affinity) 意味着进程并不会在处理器之间频繁迁移,而 硬亲和性(a ...

  6. 虚拟机服务器多线程设置,cpu核数线程做虚拟机

    cpu核数线程做虚拟机 内容精选 换一换 在服务器上运行多个虚拟机,每台虚拟机的业务不同,造成不同程度的资源占用,对于存储IO密集型的虚拟机,为了避免相邻的虚拟机的干扰,需要将不同虚拟机处理IO的存储 ...

  7. k8s调度之node的亲和性以及pod的亲和性/反亲和性

    k8s调度之node的亲和性以及pod的亲和性/反亲和性 通常情况下,使用的都是k8s默认的调度调度方式,但是在有些情况下,我们需要将pod运行在具有特定的标签的node上才能都运行,这个时候,pod ...

  8. OpenShift 4 - Pod的亲和性/反亲和性

    <OpenShift 4.x HOL教程汇总> 文章目录 Pod的亲和性/反亲和性 方法1:直接指定Pod运行Node 方法2:通过设置Pod的nodeselector实现 方法3:通过设 ...

  9. java程序CPU使用率高可能的原因

    1. 前言 在Java并发编程方面,如何在多线程环境中设置合理的线程数,那我们需要了解两个概念: 计算密集型 要进行大量的计算.逻辑判断等操作,消耗CPU资源,比如计算圆周率.对视频进行高清解码等等, ...

最新文章

  1. 解决ie6、7 margin-bottom 失效问题
  2. hive(3)——在hive中使用自己写的函数(python实现)
  3. Spring中AOP的实现原理
  4. PS美容磨皮插件:dr5白金版mac版(兼容ps2020)
  5. 攻防世界PWN新手练习区WP
  6. 用PuTTY 访问远程主机
  7. 容器化一个简单的 Mern stack app
  8. 在html中加上时钟,Html5绘制时钟
  9. html渐变不兼容,CSS实现兼容性的渐变背景(gradient)效果兼容众多浏览器
  10. 一定要学会的vsCode格式化整理代码的快捷键,再也不用手动调格式了
  11. OpenAI的创立和发展历程
  12. PPC关闭和切换程序小软件收集
  13. 微访谈:引爆微博舆论爆发的导火索
  14. 解答c语言的app,你学c语言用的什么app?
  15. MATLAB遗传神经网络算法学习
  16. “老爸抽检”历时5年制订100个产品标准,老爸评测新模式要为消费者保驾护航
  17. 【Paper】2019_DoS/数据注入攻击下基于一致性的信息物理系统安全性研究_曹雄
  18. 一次帮用户解决源码被敲诈事件
  19. 常见的中间件以及什么是中间件
  20. 美创数据安全服务能力再获认可!

热门文章

  1. VBA实现 Excel自动填充
  2. DataTable常用数据筛选方法
  3. 如何在python中获得当前时间前几天的日期
  4. oracle 实用记录
  5. CF-GYM 103119 L. Random Permutation
  6. 2019 ICPC 上海站网络赛 K.Peekaboo (圆上整点)
  7. 利用sqlmap注入获取网址管理员账号密码
  8. suse报:passwd: Module is unknown passwd: password unchanged 或 passwd: Permission denied
  9. Ubuntu18.04 无法解析域名
  10. Mac简单易用的复制软件——“TouchCopy”