最近在部署服务器上的云应用的时候,需要查看numas上cpu核心与pci网卡插槽的对应关系,总结了一些numa和pci的知识,希望可以帮助到其他人
numa概念
利用NUMA技术,可以把几十个CPU(甚至上百个CPU)组合在一个服务器内。NUMA服务器的基本特征是具有多个CPU模块,每个CPU模块由多个CPU(如4个)组成,并且具有独立的本地内存、I/O槽口等。由于其节点之间可以通过互联模块(如称为Crossbar Switch)进行连接和信息交互,因此每个CPU可以访问整个系统的内存(这是NUMA系统与MPP系统的重要差别)。显然,访问本地内存的速度将远远高于访问远地内存(系统内其它节点的内存)的速度,这也是非一致存储访问NUMA的由来。由于这个特点,为了更好地发挥系统性能,开发应用程序时需要尽量减少不同CPU模块之间的信息交互。利用NUMA技术,可以较好地解决原来SMP系统的扩展问题,在一个物理服务器内可以支持上百个CPU。比较典型的NUMA服务器的例子包括HP的Superdome、SUN15K、IBMp690等。
每个CPU模块之间都是通过互联模块进行连接和信息交互,CPU都是互通互联的,同时,每个CPU模块平均划分为若干个Chip(不多于4个),每个Chip都有自己的内存控制器及内存插槽。
在NUMA中还有三个节点的概念:
1)、本地节点:对于某个节点中的所有CPU,此节点称为本地节点。
2)、邻居节点:与本地节点相邻的节点称为邻居节点。
3)、远端节点:非本地节点或邻居节点的节点,称为远端节点。
4)、邻居节点和远端节点,都称作非本地节点(Off Node)。
CPU访问不同类型节点内存的速度是不相同的,访问本地节点的速度最快,访问远端节点的速度最慢,即访问速度与节点的距离有关,距离越远访问速度越慢,此距离称作Node Distance。应用程序要尽量的减少不通CPU模块之间的交互,如果应用程序能有方法固定在一个CPU模块里,那么应用的性能将会有很大的提升。
PCI概念
PCI总线是目前台式机与服务器所普遍使用的一种南桥与外设连接的总线技术。 PCI总线的地址总线与数据总线是分时复用的。这样的好处是,一方面可以节省接插件的管脚数,另一方面便于实现突发数据传输。在数
据传输时,一个PCI设备作为发起者(主控,Initiator或Master),而另一个PCI设备作为目标(从设备、Target或Slave)。总线上的所有时序 的产生与控制,都由Master来发起。PCI总线在同一时刻只能供一对设备完成传输,这就要求有一个仲裁机构(Arbiter),来决定谁有权力拿到 总线的主控权。
当PCI总线进行操作时,发起者(Master)先置REQ#信号Master用来请求总线使用权的信号),当得到仲裁器(Arbiter)的许可时
(GNT#信号),会将FRAME#信号(传输开始或者结束信号)置低,并在地址总线(也就是数据总线,地址线和数据线是共享的)上放置
Slave地址,同时C/BE#(命令信号)放置命令信号,说明接下来的传输类型。 所有PCI总线上的设备都需对此地址译码,被选中的设备要置DEVSEL#(被选中信号)以声明自己被选中。当IRDY#(Master可以发送数
据)与TRDY#(Slave可以发送数据)都置低时,可以传输数据。当Master数据传输结束前,将FRAME#置高以标明只剩最后一组数据要传 输,并在传完数据后放开IRDY#以释放总线控制权。
linux上numa和pci相关工具命令
numa相关检查命令
检查cpu以及numa核心配置
lscpu #查看cpu信息
可以看到有两个numa节点,numa0的cpu是0-7,16-23,numa1的cpu是8-15,24-31
dmesg | grep -i numa #检查numa内核信息
pci相关检查命令
lspci -vv -nn | grep -i eth #检查网卡pci信息,例如18:00.1就是网卡的pci编号
lspci -s 18:00.1 -vv #检查该编号的设备属于哪个numa node
可以看到该网卡属于numa0
哎 底层硬件真不好玩。。。
标签:虚拟化,NUMA,总线,节点,pci,内存,CPU,numa From: https://blog.51cto.com/u_11555417/6160392