当前位置:网站首页>网络设备硬核技术内幕 路由器篇 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的一席之地。
边栏推荐
- Finally, someone finished all the dynamic planning, linked list, binary tree and string required for the interview
- JS epidemic at home, learning can't stop, 7000 word long text to help you thoroughly understand the prototype and prototype chain
- Is it safe for Guosen Securities to open a mobile account? Is Zhongshan securities reliable
- Tencent two sides: @bean and @component are used in the same class, what will happen?
- Stock trading 4
- Nefu117 number of prime numbers [prime number theorem]
- 巨形象的图解 SQL
- 网络设备硬核技术内幕 路由器篇 17 DPDK及其前传(二)
- JS 疫情宅在家,学习不能停,七千字长文助你彻底弄懂原型与原型链
- 对话框管理器第三章:创建控件
猜你喜欢

面试官问:如何判断一个元素是否在可视区域?

Thread knowledge summary

【STM32】EXTI

Interprocess communication

Graphical SQL is too vivid
![[popular science] the difference and connection between accuracy and resolution](/img/12/efcce1f6b8801d8d8b08b79818632c.png)
[popular science] the difference and connection between accuracy and resolution

进程间通信

telnet远程登录aaa模式详解【华为eNSP】

Finally, someone finished all the dynamic planning, linked list, binary tree and string required for the interview

巨形象的图解 SQL
随机推荐
Dynamic programming - stock trading 5
OBS advanced DXGI acquisition screen process, and how to modify it to its own cursor
Interprocess communication
Lecture 4: Longest ascending substring
电子制造行业的数字化转型突破点在哪?精益制造是关键
DVWA full level customs clearance tutorial
Printf function buffer problem
Disk troubleshooting of kubernetes node
How to help enterprises optimize office management
Document translation__ Salt and pepper image denoising based on adaptive total variation L1 regularization
MySQL save data prompt: out of range value for column error
UnityUI方面处理(归纳与积累)
一篇文章看懂JS执行上下文
Tencent two sides: @bean and @component are used in the same class, what will happen?
[medical industry] DICOM converter tools
User question understanding and answer content organization for epidemic disease Science Popularization
@What happens when bean and @component are used on the same class?
NEFU117 素数个数的位数【素数定理】
Understand the evolution of redis architecture in one article
【云享读书会第13期】多媒体处理工具 FFmpeg 工具集