当前位置:网站首页>网络设备硬核技术内幕 路由器篇 20 DPDK (五)
网络设备硬核技术内幕 路由器篇 20 DPDK (五)
2022-07-27 14:05:00 【用户8289326】
除了在前面提到的,对于计数器等多个核可能并发访问的数据结构,为每个核分配一个,还需要引入新的机制——大页机制。
说到大页机制,就要从原始的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的一席之地。
边栏推荐
- [Yunxiang book club issue 13] multimedia processing tool ffmpeg tool set
- 关于印发《深圳市工业和信息化局绿色制造试点示范管理暂行办法》的通知
- STM32——电容触摸按键实验
- OBS 进阶之 DXGI 采集屏幕流程,并如何修改为自己的光标
- UnityUI方面处理(归纳与积累)
- What is the execution method of the stand-alone parallel query of PostgreSQL?
- 关于 CMS 垃圾回收器,你真的懂了吗?
- What if win11 wallpaper turns black? The solution of win11 wallpaper blackening
- 进程间通信
- lc marathon 7.26
猜你喜欢

FPGA timing constraint sharing 04_ Output delay constraint

FPGA时序约束分享04_output delay 约束

代码覆盖率统计神器-jacoco工具实战

Chinese character style transfer --- antagonistic discriminative domain adaptation (L1)

关于 CMS 垃圾回收器,你真的懂了吗?

STM32 - capacitive touch button experiment

Tencent two sides: @bean and @component are used in the same class, what will happen?

Understand the evolution of redis architecture in one article

DVWA full level customs clearance tutorial

@What happens when bean and @component are used on the same class?
随机推荐
【WORK】关于技术架构
JS什么是声明提前?函数与变量声明提前的先后顺序(执行上下文铺垫篇)
Printf function buffer problem
Nefu119 combinatorial prime [basic theorem of arithmetic]
如何帮助企业优化Office管理
Is it safe for Guosen Securities to open a mobile account? Is Zhongshan securities reliable
Automatically configure SSH password free login and cancel SSH password free configuration script
软件产品第三方测试费用为什么没有统一的报价?
Idea makes jar packages and introduces jar packages
Detailed explanation of Telnet remote login AAA mode [Huawei ENSP]
@Detailed explanation of repository
@Bean 与 @Component 用在同一个类上,会发生什么?
Is the security of online brokerage app account opening guaranteed?
如何做好企业系统漏洞评估
DXGI acquisition process
关于 CMS 垃圾回收器,你真的懂了吗?
Failed to connect to ResourceManager
lc marathon 7.26
C language layered understanding (C language array)
Finally, someone finished all the dynamic planning, linked list, binary tree and string required for the interview