《深入浅出DPDK》—第2章2.9节NUMA系统

2.9 NUMA系统
之前的章节已经简要介绍过NUMA系统,它是一种多处理器环境下设计的计算机内存结构。NUMA系统是从SMP(Symmetric Multiple Processing,对称多处理器)系统演化而来。
SMP系统最初是在20世纪90年代由Unisys、Convex Computer(后来的HP)、Honeywell、IBM等公司开发的一款商用系统,该系统被广泛应用于Unix类的操作系统,后来又扩展到Windows NT中,该系统有如下特点:
1)所有的硬件资源都是共享的。即每个处理器都能访问到任何内存、外设等。
2)所有的处理器都是平等的,没有主从关系。
3)内存是统一结构、统一寻址的(UMA,Uniform Memory Architecture)。
4)处理器和内存,处理器和处理器都通过一条总线连接起来。
其结构如图2-14所示:
SMP的问题也很明显,因为所有的处理器都通过一条总线连接起来,因此随着处理器的增加,系统总线成为了系统瓶颈,另外,处理器和内存之间的通信延迟也较大。为了克服以上的缺点,才应运而生了NUMA架构,如图2-15所示。

NUMA是起源于AMD Opteron的微架构,同时被英特尔Nehalem架构采用。在这个架构中,处理器和本地内存之间拥有更小的延迟和更大的带宽,而整个内存仍然可作为一个整体,任何处理器都能够访问,只不过跨处理器的内存访问的速度相对较慢一点。同时,每个处理器都可以拥有本地的总线,如PCIE、SATA、USB等。和内存一样,处理器访问本地的总线延迟低,吞吐率高;访问远程资源,则延迟高,并且要和其他处理器共享一条总线。图2-16是英特尔公司的至强E5服务器的架构示意图。

可以看到,该架构有两个处理器,处理器通过QPI总线相连。每个处理器都有本地的四个通道的内存系统,并且也有属于自己的PCIE总线系统。两个处理器有点不同的是,第一个处理器集成了南桥芯片,而第二个处理器只有本地的PCIE总线。
和SMP系统相比,NUMA系统访问本地内存的带宽更大,延迟更小,但是访问远程的内存成本相对就高多了。因此,我们要充分利用NUMA系统的这个特点,避免远程访问资源。
以下是DPDK在NUMA系统中的一些实例。
1)Per-core memory。一个处理器上有多个核(core),per-core memory是指每个核都有属于自己的内存,即对于经常访问的数据结构,每个核都有自己的备份。这样做一方面是为了本地内存的需要,另外一方面也是因为上文提到的Cache一致性的需要,避免多个核访问同一个Cache行。
2)本地设备本地处理。即用本地的处理器、本地的内存来处理本地的设备上产生的数据。如果有一个PCI设备在node0上,就用node0上的核来处理该设备,处理该设备用到的数据结构和数据缓冲区都从node0上分配。以下是一个分配本地内存的例子:

/ allocate memory for the queue structure /
q = rte_zmalloc_socket("fm10k", sizeof(*q),  RTE_CACHE_LINE_SIZE, socket_id);

该例试图分配一个结构体,通过传递socket_id,即node id获得本地内存,并且以Cache行对齐。

时间: 2024-09-10 12:19:14

《深入浅出DPDK》—第2章2.9节NUMA系统的相关文章

《深入浅出DPDK》—第2章2.2节Cache系统简介

2.2 Cache系统简介随着计算机行业的飞速发展,CPU的速度和内存的大小都发生了翻天覆地的变化.英特尔公司在1982年推出80286芯片的时候,处理器内部含有13.4万个晶体管,时钟频率只有6MHz,内部和外部数据总线只有16位,地址总线24位,可寻址内存大小16MB.而英特尔公司在2014年推出的Haswell处理器的时候,处理器内部仅处理器本身就包含了17亿个晶体管,还不包括Cache和GPU这种复杂部件.时钟频率达到3.8GHz,数据总线和地址总线也都扩展到了64位,可以寻址的内存大小

《Android安全技术揭秘与防范》—第1章1.2节Android系统进化史

1.2 Android系统进化史 Android系统一向以甜品名称为版本代号,而名称首字母是按照ABCEFG排序的.Android 1.5,它的代号是纸杯蛋糕(Cupcake),是Android正式步入市场的第一步.Android 2.3是最经典的Android系统版本,至今仍占有很大份额.Android 4.x是目前占据市场份额最大的版本.Android 5.0发布之后,Android已经向智能穿戴设备迈进了一大步.尤其是Android 5.0版本会强制开启SELinux(Android上又称

《Nmap渗透测试指南》—第2章2.13节使用系统域名解析器

2.13 使用系统域名解析器表2.12所示为本章节所需Nmap命令表,表中加粗命令为本小节所需命令--使用系统域名解析器. --system-dns意为使用系统域名解析器.默认情况下,Nmap通过直接发送查询到您主机上配置的域名服务器来解析域名.为了提高性能,许多请求(一般几十个)并发执行.如果您希望使用系统自带的解析器,就指定该选项(通过getnameinfo()调用一次解析一个IP). root@Wing:~# nmap --system-dns 192.168.126.2 192.168.

《深入浅出DPDK》目录—导读

引 言 动机 2015年4月,第一届DPDK中国峰会在北京成功召开.来自中国移动.中国电信.阿里巴巴.IBM.Intel.华为以及中兴的专家朋友登台演讲,一起分享了以DPDK为中心的技术主题.表1列出了2015 DPDK中国峰会的主题及演讲者. 这次会议吸引了来自各行业.科研单位与高校的200多名开发人员.专家和企业代表参会.会上问答交流非常热烈,会后我们就想,也许是时间写一本介绍DPDK.探讨NFV数据面的技术书籍.现在,很多公司在招聘网络和系统软件人才时,甚至会将DPDK作为一项技能罗列在招

《Google软件测试之道》—第2章2.2节测试认证

本节书摘来自异步社区<Google软件测试之道>一书中的第2章2.2节测试认证,作者[美]James Whittaker , Jason Arbon , Jeff Carollo,更多章节 2.2 测试认证 Patrick Copeland在本书的序中强调了让开发人员参与测试的难度.招聘到技术能力强的测试人员只是刚刚开始的第一步,我们依然需要开发人员参与进来一起做测试.其中我们使用的一个 关键方法就是被称为"测试认证"(译注:Test Certified)的计划.现在回过头

《精通自动化测试框架设计》—第2章 2.6节使用数据库

2.6 使用数据库 如果读者所在的企业正在招聘测试工程师或者读者正在求职,翻开工作说明书,无论是熟悉.掌握还是精通,估计绝大部分都会对于数据库有一定的要求.这说明了数据库在现在软件行业的普遍应用,也说明了这几乎是自动化测试所绕不开的一个技术点.在本小节中,将简要介绍如何通过编写代码与数据库进行交互.当然,这只是浅显的使用层面的介绍.如果牵涉到多套数据库数据配套不同用例集.基础数据导入以及数据清洗等问题,读者可以参考第1章中有关"快速回归测试系统"的介绍,以及下一小节中有关CSV文件的处

《黑客秘笈——渗透测试实用指南》—第1章1.1节搭建渗透测试主机

第1章 赛前准备--安装 黑客秘笈--渗透测试实用指南 本章将直接探讨攻击系统的配置方法.安全测试最为重要的方面就是有一个可重复的流程.所以,您需要有一套标准化的基准系统.测试工具和测试流程.本章将会讲解配置测试平台的方法,以及本书示例所需的额外工具的安装步骤.只要按照本章的步骤配置测试平台,您就能够重现后续章节中我所提供的案例.演示.好!让我们全力以赴.积极备战吧. 1.1 搭建渗透测试主机 黑客秘笈--渗透测试实用指南 在进行渗透测试的时候,我都会配置两套不同的测试主机.其中一台是Windo

Android群英传笔记——第一章:Android体系与系统架构

Android群英传笔记--第一章:Android体系与系统架构 图片都是摘抄自网络 今天确实挺忙的,不过把第一章的笔记做一下还是可以的,嘿嘿 1.1 Google的生态圈 还是得从Android的起源说起,Android是一个以Linux为基础的开源移动设备操作系统,主要用于智能手机和平板电脑,由Google成立的Open Handset Alliance(OHA,开放手持设备联盟)持续领导与开发中.Android已发布的最新版本为Android 6.0.1(M). Android系统最初由安

《JavaScript框架设计》——第 2 章  模块加载系统 2.1AMD规范

第 2 章 模块加载系统 任何语言一到大规模应用阶段,必然要经历拆分模块的过程,以有利于维护与团队协作.与Java走得最近的dojo率先引入了加载器,早期的加载器都是同步的,使用document.write与同步Ajax请求实现.后来dojo开始以JSONP的方法设计它的每个模块的结构,以script节点为主体加载它的模块,这个就是目前主流的加载器方式.不得不提的是,dojo的加载器与AMD规范的发明者都是James Burke,dojo加载器独立出来就是著名的require加载器. 2.1 A