0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看威廉希尔官方网站 视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

同一个CPU核访问不同的内存条延时一样吗?

冬至配饺子 来源:开发内功修炼 作者:张彦飞allen 2022-08-30 17:03 次阅读

现在的服务器物理机一般都是多个CPU,核数也是十几甚至几十核。内存几十GB甚至是上百G,也是由许多条组成的。那么我这里思考一下,这么多的CPU和内存它们之间是怎么互相连接的?同一个CPU核访问不同的内存条延时一样吗?

在《内存随机访问也比顺序慢,带你深入理解内存IO过程》中我们了解了内存访问时芯片内部的执行过程,在《实际测试内存在顺序IO和随机IO时的访问延时差异》中我们又进行了实际的代码测试。不过这两文中我们都把精力聚焦在内存内部机制,而回避了上面的问题,那就是CPU和内存的连接方式,也就是总线架构。

1 回顾CPU与内存的简单连接:FSB时代

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

pYYBAGMN0ZeAU5m7AAA758U0WWc707.png

在这个年代里,当时提高计算机系统整体性能的方式就是不断地提高CPU、FSB总线、内存条的数据传输频率。

2 如今多CPU多内存复杂互联:NUMA时代

当CPU的主频提升到了3GHz每秒以后,硬件制造商们发现单个CPU的已经到了物理极限了。所以就改变了性能改进的方法,改成为向多核、甚至是多CPU的方向来发展。在这种情况下,如果仍然采用FSB总线,会导致所有的CPU和内存通信都经过总线,这样总线就成为了瓶颈,无法充分发挥多核的优势与性能。所以CPU制造商们把内存控制器从北桥搬到了CPU内部,这样CPU便可以直接和自己的内存进行通信了。那么,如果CPU想要访问不和自己直连的内存条怎么办呢?所以就诞生了新的总线类型,它就叫QPI总线。

poYBAGMN0bGAP6t4AABMX7DE0kA060.png

图2中CPU1如果想要访问内存3的话,就需要经过QPS总线才可以。

3 动手查看Linux下的NUMA架构

我们先通过dmidecode命令查看一下内存插槽,单条大小等信息。大家可以试着在linux上执行以下该命令。输出结果很长,大家可以有空仔细研究。我这里不全部介绍,这里只挑选一些和内存相关的:

pYYBAGMN0beAeBn_AABuL7i4jtg460.png

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

pYYBAGMN0ceACe7NAABTHY84VJM095.png

通过上述命令可以看到,每一组CPU核分配了32GB(4条)的内存。node distance是一个二维矩阵,描述node访问所有内存条的延时情况。node 0里的CPU访问node 0里的内存相对距离是10,因为这时访问的内存都是和该CPU直连的。而node 0如果想访问node 1节点下的内存的话,就需要走QPI总线了,这时该相对距离就变成了21。

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

4 动手测试NUMA架构内存延迟差异

numactl命令有--cpubind和--membind的选项,通过它们我们可以指定我们要用的node节点。还沿用《实际测试内存在顺序IO和随机IO时的访问延时差异》里的测试代码

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

下面代码可能需要左右滑动

poYBAGMN0fSATUlkAABbASvIM8U756.png

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

下面代码可能需要左右滑动

pYYBAGMN0g2ADYUBAABagSCySQ4468.png

5 结论

通过上面的各个小节我们可以看到,现代的服务器里,CPU和内存条都有多个,它们之前目前主要采用的是复杂的NUMA架构进行互联,NUMA把服务器里的CPU和内存分组划分成了不同的node。从上述实验结果来看,拿8M数组,循环步长为64的case来说,同node耗时3.15纳秒,跨node为3.96纳秒。所以属于同一个node里的CPU和内存之间访问速度会比较快。而如果跨node的话,则需要经过QPI总线,总体来说,速度会略慢一些。


审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • cpu
    cpu
    +关注

    关注

    68

    文章

    10863

    浏览量

    211772
  • 服务器
    +关注

    关注

    12

    文章

    9160

    浏览量

    85423
  • 总线
    +关注

    关注

    10

    文章

    2881

    浏览量

    88088
  • FSB
    FSB
    +关注

    关注

    0

    文章

    7

    浏览量

    9397
收藏 人收藏

    评论

    相关推荐

    DDR内存条对比分析

    DDR内存条经历了DDR内存条、DDR2内存条、DDR3内存条时代。这里给出了DDR内存条
    发表于 12-29 14:21 3730次阅读

    内存条频率不一样,能起用吗? #电脑小技巧

    内存条电脑/办公
    学习硬声知识
    发布于 :2022年11月01日 22:52:40

    FPGA对DDRSDRAM内存条的控制

    首先介绍了内存条的工作原理,内存条电路设计的注意事项,以及如何使用FPGA实现对DDR内存条的控制,最后给出控制的仿真波形。 1 内存条的工作原理   
    发表于 06-29 15:37 2548次阅读
    FPGA对DDRSDRAM<b class='flag-5'>内存条</b>的控制

    内存条买单跟双的区别解析

    买过内存条的用户定都有过这样的纠结:在限定容量下,是该买根足量的内存条还是买双根内存条进行组合?今天,我们就来聊聊这个问题。
    发表于 06-11 16:28 3.8w次阅读

    内存条需要注意什么

    安装新的内存条时不要为追求高性能而安装与原内存条差距过大的内存条。比如我们在1gb内存条旁边加装4gb的内存条,这样是不行的。如果这样安装会
    的头像 发表于 12-08 09:46 12.9w次阅读

    内存条的什么属性重要应该如何选择

    买电脑内存条主要看什么呢?由于内存条的种类和品牌非常的多,消费者在选择内存条的时候就需要认识内存的主要配置,特别是DIY配置电脑的时候,如果想要购买好点的
    的头像 发表于 12-01 12:02 5740次阅读

    如何选择合适的内存条内存条的什么属性最重要

    买电脑内存条主要看什么呢?由于内存条的种类和品牌非常的多,消费者在选择内存条的时候就需要认识内存的主要配置,特别是DIY配置电脑的时候,如果想要购买好点的
    的头像 发表于 04-12 09:14 7348次阅读

    怎么区分内存条的单面和双面

    什么是单面和双面内存?它们有些什么的特性与区别呢?你们知道怎么区分内存条单面和双面吗?下面小编带来怎么区分内存条单面和双面的内容,欢迎阅读!
    发表于 05-28 09:51 8930次阅读

    内存条坏了会出现什么状况_内存条坏了如何解决

    内存条大家应该知道吧1它是电脑运行不可缺少的种零件,大家可能光是知道这个东西,却不知道它到底有哪些方面的作用。简单的来说内存条就是电脑的
    发表于 06-01 10:22 1.3w次阅读

    内存条故障原因及解决

    内存是电脑必不可少的组成部分,CPU可通过数据总线对内存寻址。历史上的电脑主板上有主内存内存条是主内存
    发表于 06-09 10:44 8406次阅读

    内存条起着什么的作用

     当电脑的CPU工作时,会从硬盘调用数据并存储在内存条中,然后再从内存条中读取数据使用,和直接从硬盘调用数据相比CPU内存条之间的数据传输
    发表于 06-17 10:21 5107次阅读

    如何让RTOS多任务访问同一个UART?

    在RTOS多任务编程的时候,同一个硬件(比如UART、I2C等)被多个任务访问的情况比较多,如果不合理处理,就会导致“混乱”的局面。 处理“混乱”局面的方法比较多,下面基于FreeRTOS,以
    的头像 发表于 03-12 17:18 2092次阅读

    内存条的6层PCB设计

    内存条的6层PCB设计
    发表于 03-20 09:24 0次下载

    网络IP地址是否在同一个段中的判断方法

    我们知道IP地址是由“网络号+子网号+主机号”组成,判断两IP地址是否在同一个网段主要看“网络号”,如果网络号一样,那么他们就在同一个网段,否则就不在
    的头像 发表于 06-02 14:31 1.3w次阅读
    两<b class='flag-5'>个</b>网络IP地址是否在<b class='flag-5'>同一个</b>段中的判断方法

    服务器内存条和普通内存条的区别

    内存条般采用ECC DIMM封装形式。ECC DIMM具有额外的错误检测和纠正功能,可以提供更高的数据可靠性,减少硬件故障的风险。 此外,服务器内存条通常具有更多的插槽和更大的容量支持。普通
    的头像 发表于 02-19 10:19 8843次阅读