numa及DPDK中对Numa的使用

原文:dpdk 对 numa 的使用与多 numa 架构下性能调优的基础_dpdk numa-CSDN博客

另外可以看下这篇:https://zhuanlan.zhihu.com/p/532451717

numa 是什么?

//numa节点就是内存节点,把内存分成了几块而已。

//注意numa和内存个数相关如果配置为2numa内存数就要是2的倍数,8numa就要是8的倍数,为了使后面产品规格容易搭配后面最好采用2numa的配置。

在 SMP 架构中,内存统一寻址(Uniform Memory Architecture),处理器和内存之间通过一条总线连接起来。由于所有处理器都是通过一条总线连接起来的,随着处理器的增加,系统总线成为了系统瓶颈,另外,处理器和内存之间的通信延迟也较大。为了克服以上缺点,NUMA 架构应运而生。

numa 架构全称为非一致性内存架构 (Non Uniform Memory Architecture),与 SMP 中的 UMA 统一寻址内存架构相对。在 numa 系统中有本地内存与远端内存的区别。访问本地内存有更小的延迟和更大的带宽,跨处理器内存访问速度会相对较慢一点,但是整个内存对于所有的处理器都是可见的。

numa 系统的一个示意图如下:

上图中有两个 cpu,CPU0 与 CPU1 都有自己的本地内存,访问这些内存的性能最优,这两个 cpu 也可以通过总线等架构跨处理器访问远端的内存,只不过性能相对会差一些。

dpdk-16.04 中对 numa 的使用

//每个PCI设备会关联一个numa

1. 如何获取 pci 网卡所在的 numa 节点?

linux 系统中 pci 设备会在 /sys/bus/pci/devices/ 中创建独立的子目录,目录名称就是 pci 设备的 pci 号。dpdk eal 初始化时,会扫描此目录来获取当前设备上所有可用的 pci 设备。每个 pci 设备所在的 numa 节点在 /sys/bus/pci/devices/xxx/numa_node 文件中保存,dpdk 通过访问这些文件获取到每个 pci 网卡的 numa_node 信息。

一个示例:

[root] # cat /sys/bus/pci/devices/0000\:80\:00.0/numa_node

dpdk 会为每个扫描到的 pci 设备创建一个 rte_pci_device 结构,并将解析 sys 目录得到的字段写入到此结构中,解析完成后将每个 rte_pci_device 链入到 pci_device_list 链表中。

dpdk 内部会为每个网卡接口分配一个 rte_eth_dev 结构,在网卡 probe 流程中,pci 网卡接口的 rte_eth_dev 结构中的 pci_dev 结构被设置为扫描 pci 时创建的 rte_pci_device 结构地址。

同时每个 pci 接口的 rte_eth_dev 的 data 结构中的 numa_node 字段也用于存储接口所在的 numa_node,这个字段能够在多进程间共享且能够通过每个接口的 rte_eth_dev 直接访问到。其拷贝过程是在驱动初始化函数中调用 rte_eth_copy_pci_info 完成的。

一个示例如下:

static int

eth_i40e_dev_init(struct rte_eth_dev *dev)

{

struct rte_pci_device *pci_dev;

struct i40

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值