https://lequ7.com/guan-yu-linuxnuma-jia-gou-xia-de-nei-cun-yan-chi-qu-bie-ce-shi.html

当初的服务器物理机CPU个别都是多个CPU,核数也是十几甚至几十核。内存几十GB甚至是上百G,也是由许多的内存条组成的。那么我这里思考一下,这么多的CPU和内存它们之间是怎么相互连贯的?同一个CPU核拜访不同的内存条延时一样吗?
在《内存随机拜访也比程序慢,带你深刻了解内存IO过程》中咱们理解了内存拜访时芯片外部的执行过程,在《理论测试内存在程序IO和随机IO时的拜访延时差别》中咱们又进行了理论的代码测试。不过这两文中咱们都把精力聚焦在内存外部机制,而回避了下面的问题,那就是CPU和内存的连贯形式,也就是总线架构。

回顾CPU与内存的简略连贯:FSB时代

咱们先来回顾下在历史上CPU、内存数量比拟少的年代里的总线计划-FSB。FSB的全称是Front Side Bus,因而也叫前端总线。CPU通过FSB总线连贯到北桥芯片,而后再连贯到内存。内存控制器是集成在北桥里的,Cpu和内存之间的通信全副都要通过这一条FSB总线来进行。

在这个年代里,过后进步计算机系统整体性能的形式就是一直地进步CPU、FSB总线、内存条的数据传输频率。

现在多CPU多内存条简单互联:NUMA时代

当CPU的主频晋升到了3GHz每秒当前,硬件制造商们发现单个CPU的曾经到了物理极限了。所以就扭转了性能改良的办法,改成为向多核、甚至是多CPU的方向来倒退。在这种状况下,如果依然采纳FSB总线,会导致所有的CPU和内存通信都通过总线,这样总线就成为了瓶颈,无奈充分发挥多核的劣势与性能。所以CPU制造商们把内存控制器从北桥搬到了CPU外部,这样CPU便能够间接和本人的内存进行通信了。那么,如果CPU想要拜访不和本人直连的内存条怎么办呢?所以就诞生了新的总线类型,它就叫QPI总线。

图中CPU1如果想要拜访内存3的话,就须要通过QPS总线才能够。

入手查看Linux下NUMA架构

咱们先通过dmidecode命令查看一下内存插槽,单条大小等信息。大家能够试着在linux上执行以下该命令。输入后果很长,大家能够有空认真钻研。我这里不全副介绍,这里只筛选一些和内存相干的:

# dmidecode|grep -P -A5 "Memory\s+Device"|grep Size
Size: 8192 MB
Size: 8192 MB
Size: No Module Installed
Size: 8192 MB
Size: No Module Installed
Size: 8192 MB
Size: 8192 MB
Size: 8192 MB
Size: No Module Installed
Size: 8192 MB
Size: No Module Installed
Size: 8192 MB

能够看出,我以后应用的机器上共有16个内存插槽,共插了8条8G的内存。所以总共是64GB。如咱们后面所述,在NUMA架构里,每一个物理CPU都有不同的内存组,通过numactl命令能够查看这个分组状况。

# numactl --hardware
available: 2 nodes (0-1)
node 0 cpus: 0 1 2 3 4 5 12 13 14 15 16 17
node 0 size: 32756 MB
node 0 free: 19642 MB
node 1 cpus: 6 7 8 9 10 11 18 19 20 21 22 23
node 1 size: 32768 MB
node 1 free: 18652 MB
node distances:
node 0 1
0: 10 21
1: 21 10

通过上述命令能够看到,每一组CPU核调配了32GB(4条)的内存。 node distance是一个二维矩阵,形容node拜访所有内存条的延时状况。 node 0里的CPU拜访node 0里的内存绝对间隔是10,因为这时拜访的内存都是和该CPU直连的。而node 0如果想拜访node 1节点下的内存的话,就须要走QPI总线了,这时该绝对间隔就变成了21

所以、在NUMA架构下,CPU拜访本人同一个node里的内存要比其它内存要快!

入手测试NUMA架构内存提早差别

numactl命令有--cpubind--membind的选项,通过它们咱们能够指定咱们要用的node节点。还沿用《用代码让你来理论感触内存的在不同状况下的拜访延时差别》里的测试代码

1、让内存和CPU处于同一个node

# numactl --cpubind=0 --membind=0 ./main
Delay (ns)
2k 8k 32k 128k 512k 2m 8m 32m 128m
s1 1.28 1.28 1.26 1.25 1.26 1.26 1.28 1.43 1.43
s32 1.27 1.26 1.32 1.78 2.67 2.73 3.27 9.95 10.37
s64 1.28 1.26 1.26 1.82 2.43 2.48 3.15 8.82 8.92
andom 2.40 2.40 2.40 2.40 4.80 4.80 19.20 28.80 52.80

2、让内存和CPU处于不同node

# numactl --cpubind=0 --membind=1 ./main
Delay (ns)
2k 8k 32k 128k 512k 2m 8m 32m 128m
s1 1.29 1.28 1.26 1.26 1.26 1.26 1.31 1.62 1.63
s32 1.29 1.26 1.33 1.77 2.80 2.92 3.95 13.69 13.77
s64 1.30 1.27 1.26 1.82 2.47 2.48 3.96 12.93 12.90
andom 2.40 2.40 2.40 2.40 4.80 4.80 19.20 31.20 52.80

论断

通过下面的各个大节咱们能够看到,古代的服务器里,CPU和内存条都有多个,它们之前目前次要采纳的是简单的NUMA架构进行互联,NUMA把服务器里的CPU和内存分组划分成了不同的node。从上述试验后果来看,拿8M数组,循环步长为64的case来说,同node耗时3.15纳秒,跨node为3.96纳秒。所以属于同一个node里的CPU和内存之间访问速度会比拟快。而如果跨node的话,则须要通过QPI总线,总体来说,速度会略慢一些。



开发内功修炼之内存篇专辑:

  • 1.带你深刻了解内存对齐最底层原理
  • 2.内存随机也比程序拜访慢,带你深刻了解内存IO过程
  • 3.从DDR到DDR4,内存外围频率其实基本上就没太大的提高
  • 4.理论测试内存在程序IO和随机IO时的拜访延时差别
  • 5.揭穿内存厂家“谎话”,实测内存带宽实在体现
  • 6.NUMA架构下的内存拜访提早区别!
  • 7.PHP7内存性能优化的思维精华
  • 8.一次内存性能晋升的我的项目实际
  • 9.挑战Redis单实例内存最大极限,“遭逢”NUMA陷阱!

我的公众号是「开发内功修炼」,在这里我不是单纯介绍技术实践,也不只介绍实践经验。而是把实践与实际联合起来,用实际加深对实践的了解、用实践进步你的技术实际能力。欢送你来关注我的公众号,也请分享给你的好友~~~

[转帖]关于linux:NUMA架构下的内存延迟区别测试的更多相关文章

  1. 在 linux x86-32 模式下分析内存映射流程

    前言 虚拟内存机制已经成为了现代操作系统所不可缺少的一部分, 不仅可以为每个程序提供独立的地址空间保证安全性,更可以通过和磁盘的内存交换来提高内存的使用效率.虚拟内存管理作为linux 上的重要组成部 ...

  2. Linux x86架构下ACPI PNP Hardware ID的识别机制

    转:https://blog.csdn.net/morixinguan/article/details/79343578 关于Hardware ID的用途,在前面已经大致的解释了它的用途,以及它和AC ...

  3. 在 linux x86-64 模式下分析内存映射流程

    前言 在上一篇中我们分析了 linux 在 x86-32 模式下的虚拟内存映射流程,本章主要继续分析 linux 在 x86-64 模式下的虚拟内存映射流程. 讨论的平台是 x86-64, 也可以称为 ...

  4. [转帖]NUMA架构的CPU -- 你真的用好了么?

    NUMA架构的CPU -- 你真的用好了么? 本文从NUMA的介绍引出常见的NUMA使用中的陷阱,继而讨论对于NUMA系统的优化方法和一些值得关注的方向. 文章欢迎转载,但转载时请保留本段文字,并置于 ...

  5. NUMA架构的CPU -- 你真的用好了么?

    本文从NUMA的介绍引出常见的NUMA使用中的陷阱,继而讨论对于NUMA系统的优化方法和一些值得关注的方向. 文章欢迎转载,但转载时请保留本段文字,并置于文章的顶部 作者:卢钧轶(cenalulu) ...

  6. 【ZT】NUMA架构的CPU -- 你真的用好了么?

    本文从NUMA的介绍引出常见的NUMA使用中的陷阱,继而讨论对于NUMA系统的优化方法和一些值得关注的方向. 文章欢迎转载,但转载时请保留本段文字,并置于文章的顶部 作者:卢钧轶(cenalulu) ...

  7. Redis性能篇(二)CPU核和NUMA架构的影响

    Redis被广泛使用的一个很重要的原因是它的高性能.因此我们必要要重视所有可能影响Redis性能的因素.机制以及应对方案.影响Redis性能的五大方面的潜在因素,分别是: Redis内部的阻塞式操作 ...

  8. Linux mem 2.4 Buddy 内存管理机制

    文章目录 1. Buddy 简介 2. Buddy 初始化 2.1 Struct Page 初始化 2.2 Buddy 初始化 3. 内存释放 4. 内存分配 4.1 gfp_mask 4.2 nod ...

  9. X86架构下Linux启动过程分析

    1.X86架构下的从开机到Start_kernel启动的整体过程 这个过程简要概述为: 开机-->BIOS-->GRUB/LILO-->Linux Kernel 其执行的流程图和重要 ...

  10. 【转帖】Linux 内核系统架构

    Linux 内核系统架构   描述Linux内核的文章已经有上亿字了 但是对于初学者,还是应该多学习多看,毕竟上亿字不能一下子就明白的. 即使看了所有的Linux 内核文章,估计也还不是很明白,这时候 ...

随机推荐

  1. 关于echarts+vue频繁刷新的造成的内存增长问题

    前言 关于解决echarts+ws多次数据刷新渲染,内存增长溢出的尝试. 记录一下,便于下次使用有参考 方法 关闭echarts动画 tooltip的动画设置为false.(echarts动画会缓存, ...

  2. 7种创建方式,带你理解Java的单例模式

    本文分享自华为云社区<<Java极简设计模式>第01章:单例模式(Singleton)>,作者:冰 河. 单例设计模式 看几个单例对象的示例代码,其中有些代码是线程安全的,有些 ...

  3. 遥居前列!华为云GaussDB再获行业权威验证

    摘要:北京国家金融科技认证中心正式公布了2022年通过"分布式数据库金融标准验证"的数据库产品名单.华为云GaussDB金融级分布式数据库以突出的技术优势通过验证,跃然榜上,且测试 ...

  4. tsconfig.json在配置文件中找不到任何输入,怎么办?

    摘要:原来在我们创建tsconfig.json文件的时候,VSCode会自动检测当前项目当中是否有TS文件:如果没有的话,就会报这个错提示我们去创建一个文件,再去使用. 本文分享自华为云社区<t ...

  5. 这8个JS 新功能,你应该去尝试一下

    摘要:本文主要介绍几个已经进入stage4的提案,这几个提案有望在2022年逐步纳入标准. 本文分享自华为云社区<2022 年你应该尝试的 8个 JavaScript 新功能>,作者:前端 ...

  6. 利用 Solon-web 框架写一个 Hello World

    Solon 项目的开源地址: https://gitee.com/noear/solon 最近看了不少别人写的各种框架的 Hello world 示例,有些看起来,真的很复杂. 今天,我们用号称简单到 ...

  7. PPT 求职应聘:如何利用PPT去制作简历

    PPT 求职应聘:如何利用PPT去制作简历 知识的载体 传播.美学.价值 价值:是通过思考 价值:将PPT导成了长图放到了微薄, 如何制作简历 09:00

  8. AtCoder Beginner Contest 185 题解

    A - ABC Preparation 排序找出最小值 int main() { ios_base::sync_with_stdio(false), cin.tie(0); vector<int ...

  9. Modern C++ Starter Kits Share

    初入 C++ 搬砖,在团队中开发实际上很少亲自从零开始搭建C++的完整项目,99%时候都是使用基础架构团队或者CI/CD团队搭建好的框架.这里分享几个配置C++项目的模版,它们一般会涉及三方库管理.格 ...

  10. 【调试】kdump原理及其使用方法

    kdump机制 简介 Kdump是在系统崩溃.死锁或死机时用来转储内存运行参数的一个工具和服务,是一种新的crash dump捕获机制,用来捕获kernel crash(内核崩溃)的时候产生的cras ...