NGINX源代码剖析 之 CPU绑定(CPU亲和性)

NGINX源代码剖析 之 CPU绑定(CPU亲和性)

大家好,又见面了,我是全栈君。

1 引言

    非统一内存訪问(NUMA)是一种用于多处理器的电脑记忆体设计,内存訪问时间取决于处理器的内存位置。 在NUMA下,处理器訪问它自己的本地存储器的速度比非本地存储器(存储器的地方到还有一个处理器之间共享的处理器或存储器)快一些。

    针对NUMA架构系统的特点,能够通过将进程/线程绑定指定CPU(一个或多个)的方式,提高CPU CACHE的命中率,降低进程/线程迁移CPU造成的内存訪问的时间消耗,从而提高程序的执行效率。[注:关于CPU亲和性的概念,可參考《管理处理器的亲和性》]

2 源代码剖析

2.1 NGINX源代码

    NGINX进程绑定CPU的代码很easy,当中的核心接口为sche_setaffinity()。例如以下所看到的:

NGINX源代码剖析 之 CPU绑定(CPU亲和性)

代码1 绑定CPU

2.2 源代码分析

    经分析可知:

    1) 1进程可绑定到1个或多个CPU核

    -> 假设cpu_affinity的值相应的二进制值为下面值时,那么进程将绑定到第7和第63个CPU。(从0開始,下同)

10000000 00000000

00000000 00000000

00000000 00000000

00000000 10000000

    -> 假设cpu_affinity的值相应的二进制值为下面值时,那么进程将绑定到第2、第3和第7个CPU。

00000000 00000000

00000000 00000000

00000000 00000000

00000000 10001100

    其它情况能够依此类推。

    2) 该函数可设置CPU核范围:第0~63个.由于參数cpu_affinity的类型为uint64_t,其占用64位.

2.3 測试实例

    依据NGINX源代码的实现,能够编写例如以下測试代码:

NGINX源代码剖析 之 CPU绑定(CPU亲和性)

图1 測试代码

1) 測试之前:CPU0和CPU1的消耗都非常低

NGINX源代码剖析 之 CPU绑定(CPU亲和性)

图2 測试之前

2) 绑定CPU0:CPU0的使用接近100%,而CPU1基本不变

NGINX源代码剖析 之 CPU绑定(CPU亲和性)

图3 绑定CPU0

2) 绑定CPU1:CPU1的使用接近100%,而CPU0基本不变

NGINX源代码剖析 之 CPU绑定(CPU亲和性)

图4 绑定CPU1

2.4 其它接口

    除了sched_setaffinity()
能够设置“进程/线程”的CPU亲和性外。还能够使用pthread_setaffinity_np()设置“线程”的CPU亲和性。參考代码例如以下

NGINX源代码剖析 之 CPU绑定(CPU亲和性)

图5 线程绑定CPU

    以上代码相应的Makefile例如以下:

NGINX源代码剖析 之 CPU绑定(CPU亲和性)

图6 Makefile

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/115375.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 如何修改手机桌面软件名称_安卓软件如何改名字

    如何修改手机桌面软件名称_安卓软件如何改名字安卓手机怎么修改桌面上软件的名字呀!以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!安卓手机怎么修改桌面上软件的名字呀!使用360手机桌面,在图标上长按可以直接改。或者你使用apkeditor修改软件安装包求助,怎么修改桌面上软件的图标和名字如果是快捷方式的话,点击右键-》属性,在常规选项卡下修改名字,在快捷方式选项卡…

    2022年9月23日
    3
  • linux安装有几种方法_linux查看gcc是否安装

    linux安装有几种方法_linux查看gcc是否安装Linux安装Pycharm

    2022年10月18日
    1
  • python listnode.val(Python算法)

    在做leetcode简单题的时候发现了python的listcode,记录一下。源自:https://www.cnblogs.com/yuanmingzhou/p/9661152.htmlclassNode(object):def__init__(self):self.val=Noneself.next=NoneclassNode_handle():def__init__(self):self.cur_n

    2022年4月17日
    73
  • pycharm 2021最新永久激活码【在线注册码/序列号/破解码】

    pycharm 2021最新永久激活码【在线注册码/序列号/破解码】,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月18日
    42
  • siamfc++代码_siacoin

    siamfc++代码_siacoinSiamFC++:TowardsRobustandAccurateVisualTrackingwithTargetEstimationGuidelines摘要。视觉跟踪问题要求对给定目标进行高效的鲁棒分类和精确的状态估计。以往的方法提出了多种目标状态估计方法,但很少有方法考虑到视觉跟踪问题本身的特殊性。在仔细分析的基础上,为高性能通用目标跟踪器的设计提供了一套实用的目标状态估计指导原则。遵循这些指导原则,我们通过引入分类和目标状态估计分支(G1)、无模糊性分类评分(G2)、无先验知识跟

    2022年10月1日
    3
  • checkbox选中与取消选择[通俗易懂]

    checkbox选中与取消选择[通俗易懂]checkbox选中与取消选择1.html<form><inputtype="checkbox"name="items"value="足球"/>足球<inputtype="checkbox"name="items"value="篮球"/>篮球&

    2022年6月17日
    442

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号