DPDK优化技术

DPDK优化技术_第1张图片

DPDK优化技术:
一、内存相关优化点:
Cache和内存——软件预取函数rte_prefetch0。
Cache一致性——DPDK对很多结构体定义会指定对齐;避免多个核访问同一个内存地址或数据结构,采用每个核对应一个数据结构;每个接收和发送ring队列分别对应一个core。
TLB和大页——常规页(4KB),如果程序比较大,可以采用大页(比如2MB),这样只需要一个表项就可以命中。以ubuntu系统为例,通过/etc/default/grub文件配置页大小。
DDIO——使得外部网卡和CPU通过LLC Cache直接交换数据,绕过内存。
NUMA系统——SMP系统多个core通过一条总线访问内存,总线成为瓶颈;NUMA系统每个core分配一定内存,避免跨总线访问。
DPDK优化技术_第2张图片
二、并行计算
亲和性:线程和core绑定;
线程独占:分配几个core单独用来处理线程,内核程序不会跑到被隔离的core里;
指令并发:DPDK优化的比较彻底;
单指令多数据
指令并发与数据并行

三、同步互斥机制
DPDK读写锁实现进行了优化
无锁环形队列:多生产者入对

四、报文转发
传统的Network Processor(专用网络处理器)转发的模型可以分为run to completion(运行至终结简称RTC)模型和pipeline(流水线)模型。

五、数据包收发
PCIe事务传输可能成为报文转发的瓶颈:
PCIe带宽
DPDK优化技术_第3张图片
64B的报文实际开销接近于168字节(96+24+8+8+32)最大转发速率为4000MB/s/168B=23.8Mp/s。已知10G速率为14.88Mpps,23.8/14.88=15.99。因此一块2*10G 82599网卡64B小包最大速率为15.99Gb/s,PCIe为其瓶颈。

六、网卡性能优化
网卡IO性能优化:网卡收发包涉及较多数据访问,尽可能让数据访问都能在处理器缓存中完成(cache hit)。
批处理和时延访问
利用Intel SIMD指令进一步并行化包收发
平台优化及其配置调优
队列长度及各种阈值的设置

七、流分类及多队列

八、硬件加速与功能卸载

九、DPDK在容器中的应用

软件编码总结:
1.结构体声明、内存使用尽量cache对齐
2.减少并发锁机制
3.设置线程亲和性
4.合理封装函数,减少函数调用
5.合理利用burst收发包机制
6.利用收发包多队列
7.处理流程中内存访问尽量物理上连续,合理使用软件预取机制
8.用户态使用大页减少TLB miss
9.合理利用指令并发机制
10.充分利用网卡硬件卸载功能,减少cpu处理开销

参考链接:
https://blog.csdn.net/qq_20817327/article/details/105587309
https://felven.blog.csdn.net/article/details/78408945?spm=1001.2101.3001.6650.2&utm_medium=distribute.pc_relevant.none-task-blog-2~default~CTRLIST~Rate-2.pc_relevant_aa&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2~default~CTRLIST~Rate-2.pc_relevant_aa
DPDK PMD驱动
https://blog.csdn.net/qq_20817327/article/details/106449344

DPDK简介:
https://zhuanlan.zhihu.com/p/397919872
DPDK官网:
http://core.dpdk.org/supported/
Linux平台上DPDK入门指南:
https://dpdk-docs.readthedocs.io/en/latest/linux_gsg/index.html
https://dpdk-docs.readthedocs.io/en/latest/index.html

mempool的理解
https://www.cnblogs.com/rex-2018-cloud/p/10039065.html

DPDK ring
https://www.cnblogs.com/jungle1996/p/12194243.html

你可能感兴趣的:(c,linux,DPDK)