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

关于,linux,numa,架构,内存,延迟,区别,测试 · 浏览次数 : 0

小编点评

# CPU和内存的连贯形式 CPU和内存之间通过总线架构连接,总线架构是指所有CPU和内存之间连接的总线网络。总线将CPU和其他硬件组件连接起来,并通过它交换数据。 **NUMA架构**是一种将CPU和内存分组在一起的架构。NUMA架构把服务器里的CPU和内存分成不同的**node**中,每个node都是一个独立的计算节点。node之间通过总线连接,每个node都有自己的内存。 **NUMA架构下,CPU和内存之间访问速度会比拟快。**这是因为node之间使用的是同一个总线,因此它们可以并行访问相同的内存。 **NUMA架构的优缺点:** **优点:** * 提高了性能。 * 降低了成本。 **缺点:** * 增加了复杂性。 * 增加了延迟。 **NUMA架构下,CPU和内存之间的访问速度会比拟快,这有助于提高系统的性能。**

正文

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架构下的内存延迟区别测试相似的内容:

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

https://lequ7.com/guan-yu-linuxnuma-jia-gou-xia-de-nei-cun-yan-chi-qu-bie-ce-shi.html 当初的服务器物理机CPU个别都是多个CPU,核数也是十几甚至几十核。内存几十GB甚至是上百G,也是由许多的内存条组成的。那么我这

[转帖]关于Linux操作系统中LUN的队列深度(queue_depth)

Linux中的queue_depth(队列深度),可以用lsscsi查看。不过今天在我的vm 虚拟机环境中(无外界存储),是没有lsscsi命令。不过,从网上,搜到了如下的信息:$ lsscsi -l[0:0:1:0] disk FUJITSU MAM3184MP 0105 /dev/sda sta

[转帖]linux中关于带宽 MTU的一些命令

linux中关于带宽 MTU的一些命令 https://blog.51cto.com/xiaoliuer/1882208 查看协商的带宽大小 sudo ethtools eth0 Linux更改网卡MTU方法: 1. 打开终端,查看当前网卡设置:ifconfig 2. 对需要改MTU的网卡进行设置(

[转帖]Linux中关于库

库 1.库文件2.库的分类3.静态库和共享库的区别 1.库文件 库是一组预先编译好的方法的集合. /lib 根目录下的库文件 /usr/lib Linux系统存储库的位置一般存放在/lib 和/usr/lib(64位系统/usr/lib64) 库的头文件放在/usr/include 2.库的分类 静

[转帖]CONNTRACK_MAX和HASHSIZE

关于linux中的CONNTRACK_MAX和HASHSIZE要注意的地方 如果在压力测试的时候,并发数增大,但无法完成测试,可以尝试调整下参数: vi /etc/sysctl.conf 在kernel2.6之前的添加项: net.ipv4.netfilter.ip_conntrack_max =

[转帖]Linux性能测试之LTP

https://www.modb.pro/db/487946 hello,大家好,今天为大家更新一篇关于Linux性能测试的文章,大家都知道在Windows下测试计算机的性能,我们可以使用鲁大师等软件进行测试,直观易懂便捷有效,但是在Linux下进行计算机性能测试该用什么呢?今天就推荐一个压力测试的

[转帖]关于Java:是否可以覆盖-XX + HeapDumpOnOutOfMemoryError生成的堆转储的文件权限?

https://www.codenong.com/12484559/ Can you override the file permissions for the heap dump produced by -XX+HeapDumpOnOutOfMemoryError? 在Linux上,使用-XX+H

[转帖]Linux 文件系统 EXT4 的前世今生

https://www.oschina.net/translate/introduction-ext4-filesystem?print 在先前关于Linux文件系统的文章中,我写了一份说明书去介绍Linux文件系统,里面有一些高级的概念,比如说,一切都是文件。我很想去深入地讨论更多EXT文件系统的

[转帖]关于 Shell 脚本的经典十三问

https://zhuanlan.zhihu.com/p/472862663 1、为何叫做 Shell? 我们知道计算机的运作离不开硬件,但却无法直接操作硬件,硬件的驱动只能通过一种称之为“操作系统(OS,Opertating System)的软件来管控。Linux 严格来说是一个操作系统(OS)。

[转帖]Linux块层技术全面剖析-v0.1

Linux块层技术全面剖析-v0.1 perftrace@gmail.com 前言 网络上很多文章对块层的描述散乱在各个站点,而一些经典书籍由于更新不及时难免更不上最新的代码,例如关于块层的多队列。那么,是时候写一个关于linux块层的中文专题片章了,本文基于内核4.17.2。 因为文章中很多内容都