前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >网络设备硬核技术内幕 路由器篇 20 DPDK (五)

网络设备硬核技术内幕 路由器篇 20 DPDK (五)

作者头像
用户8289326
发布2022-07-27 13:29:00
6620
发布2022-07-27 13:29:00
举报
文章被收录于专栏:帅云霓的技术小屋

除了在前面提到的,对于计数器等多个核可能并发访问的数据结构,为每个核分配一个,还需要引入新的机制——大页机制。

说到大页机制,就要从原始的8086时代讲起。

1979年,那是一个春天。有一位青年在加州的实验室按下开关……

英特尔的8086处理器时代,程序员编写的程序,都是直接访问物理地址。什么是物理地址呢?就是在CPU的前端地址总线上加上逻辑分析仪,读出来的地址。如内存0xDEADBEEF,对应的总线A31到A0就是:

11011110 10101101 10111110 11101111。

但是,在80386时代,保护模式出现了。

保护模式将物理地址映射为逻辑地址,如果程序访问了无权限访问的地址,系统就会陷入“异常”,而异常处理程序决定是报错还是其他处理方式。

映射表由CPU中专用硬件实现,这种硬件叫做TLB。CPU通过查找TLB可以立即找到虚拟地址对应的物理地址。如果在TLB中没有查到,则会触发TLB Miss,约付出30个CPU指令周期的代价。

默认的TLB页大小为4KB。这样,如果应用程序需要4MB内存,会触发1024次TLB miss,才能将所需要的内存映射关系全部加载到TLB中。因此,DPDK利用了Linux内核提供的特殊机制,绕开x86架构每页最大4MB的限制,提供了最大1GB的TLB表项。这样,只需要几次TLB Miss就可以实现所需要内存的全部映射。

这种特殊机制叫做hugetlbfs,本质上是把大页内存在Linux下,作为文件系统的一部分挂载。

一般地,服务器上,可以这样操作:

mkdir /mnt/huge

在/etc/fstab里面加上

nodev /mnt/huge_1GB hugetlbfs pagesize=1GB 0 0

这样,就为DPDK预留了1GB的大页了。DPDK启动时会自动加载大页内存。

但是,在实际的服务器中,还需要考虑一个问题——NUMA架构。

NUMA架构是“Non Uniform Memory Access Architecture”的缩写,是对经典的SMP架构的精简。

在SMP架构中,任何一个处理器都可以直接访问任何内存单元,但,顾名思义地,NUMA架构并非如此。

在两个CPU的NUMA架构服务器中,CPU0访问CPU1下挂的RAM,需要经过CPU之间的互联总线。可想而知地,这会对读写效率造成非常大的影响。

因此,在DPDK中,分配内存、为网卡分配收发队列,均需要使用线程所在的socket_id,保证访问路径最优。

与RAM类似地,网卡也受到NUMA的限制。在DPDK的实现中,也尽量保证每个网卡的数据包由对应的CPU进行处理。

DPDK还利用了网卡的一些网络优化功能提升性能,最典型的就是多队列。

下图是intel的82575的网卡逻辑框图。这款网卡自带一个简单的硬件加速单元,能够提取报文的五元组(SIP,DIP,Proto,SPort,DPort),计算hash值,并根据hash值送到4个队列中的一个。然后,各vCPU(硬件线程)从为自己分配的队列中,通过轮询的方式获取数据包并进行业务处理。

那么,如果硬件线程大大多于网卡队列数量的情况应该怎么办呢?

我们可以通过变通的方式进行处理,让几个硬件线程执行流分类业务,将从队列中获取的数据包分发到其他线程。这样,即使多达数百硬件线程的4路甚至8路服务器,也可以充分利用性能。

当然,DPDK除了利用网卡的多队列功能以外,还可以利用网卡其他硬件加速功能,如TCP卸载,VXLAN隧道卸载等,进一步加速网络数据包的处理。

有了DPDK技术,就可以利用x86强大多核并发处理能力进行路由数据包的高速转发了。

由于x86平台的兼容性,还可以利用开源社区的资源,把深度数据包检测等功能集成到路由器中。可以看到,在未来,城域边缘和企业出口路由器必将有x86的一席之地。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-12-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 帅云霓的技术小屋 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档