DPDK中的Cache优化

本文介绍了DPDK中用于提高网络数据包处理性能的Cache优化方法,包括Cache预取、Cache一致性、TLB和大页技术以及英特尔的DDIO技术。详细阐述了这些技术的工作原理和在DPDK中的应用,强调了在多核环境下避免Cache一致性问题的重要性,并探讨了NUMA系统中的优化策略。
摘要由CSDN通过智能技术生成

高负载下的网络数据包处理是一种I/O密集型工作负载。CPU,DMA,以及内存(Cache+DRMA)都会频繁访问。DPDK利用了一系列的Cache软件优化方法(cache预取,cache对齐,hugepage ,NUMA感知,DDIO)高效的减少访存开销以提升性能。本文将讲解这些方法的基本原理以及在DPDK中的应用。

1:Cache预取

Cache由于时间以及空间上的局部性能提高相当的性能,所谓的Cache预取,也就是预测数据并取入Cache,根据空间/时间局部性原理,参考当前的执行状态,软件提示等信息,在数据/指令被使用前取入Cache。在之后当数据/指令被使用时,就能快速从Cache中加载到CPU内部运算和执行。Cache预取又分为硬件预取与软件预取,这里将介绍早期的NetBurst构架的硬件预取以及DPDK使用的软件预取及指令。

硬件预取:

在早期Intel的NetBurst架构的处理器上各级cache都有相应的硬件预取单元,,以一级数据Cache的预取单元为例:

1):数据Cache预取单元:也叫基于流的预取单元(Streaming prefetcher)当程序以地址递增的方式访问数据,该单元会被激活,自动预取下一个Cache行的数据。

2)基于指令寄存器(Instruction Pointer,IP)的预取单元:该单元会检测指令寄存器的读取指令(Load),当该单元发现数据块的大小基本是固定的情况下,会自动预取下一块数据。

图片转自:http://linuxperformance.top/index.php/archives/109/

当在预取机制在内存中找到了块A,那么会预取连续的A+1,A+2,A+3,A+4。因为处理器消耗完A+1后会接着消耗A+2的,预取连续的块也叫做顺序预取。

软件预取:

预取指令使软件开发人员在性能关键区域,把即将用到的数据从内存中加载到Cache,使得当前数据处理完毕后,即将用到的数据已经在Cache中,大大减小了从内存直接读取的开销,减少CPU的等待时间,提高性能。

预取指令表:

和缓存预取有关的指令:
指令                                        Description
PREFETCHT0                    预取数据到所有级别的缓存,包括L0。
PREFETCHT1                    预取数据到除L0外所有级别的缓存。
PREFETCHT2                    预取数据到除L0和L1外所有级别的缓存。
PREFETCHNTA                 预取数据到非临时缓冲结构中,可以最小化对缓存的污染。和PREFETCHT0    功能类似,但是数据在使用完一次后,Cache认为数据是可以淘汰出去的
Intel® C++ Compiler的Intrinsic等效方法:
void _mm_prefetch(char *p, int i)

 从地址P处预取尺寸为cache line大小的数据缓存,参数i指示预取方式(_MM_HINT_T0, _MM_HINT_T1, _MM_HINT_T2, _MM_HINT_NTA,分别对应不同的预取指令0,1,2,A)。

DPDK的应用:

首先先看看DPDK的性能测试结果,转载至:http://www.cnblogs.com/hugetong/p/7126790.html

测试结果:

包长(byte) pps Mbps seconds socket数 收包physics core数 队列数 发包数 收包数
500 230000 960
1 1 24 10000000 10000000
400 284000 950
1 1 24 10000000 10000000
300 367000 940
1 1 24 10000000 10000000
200 542000
  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值