Conor Walsh is a software engineering intern with the Architecture Team of Intel’s Network Platform Group (NPG), based in Intel Shannon (Ireland).
高速包处理是一种资源密集型应用。一种解决方案是将包处理流水线(pipeline)分离到多线程以提高程序性能。
然而,这样做可能增加缓存(Cache)和内存(Memory)访问的压力。
因此,构建高性能应用程序的关键在于尽可能减少数据面流量(data plane traffic)相关的内存占用(memory footprint)。
本文介绍了一种多线程包处理应用程序的内存优化技术,提高访存密集型应用的性能。
即使应用程序没有内存受限的情况,也应该减少内存需求。
本文基于对源自Intel的vCMT系统的研究。
vCMTS是基于DOCSIS3.1标准和DPDK包处理框架实现的MAC层数据面流水线程序。
该程序是为了测试Intel至强平台vCMTS数据平面包处理性能及功耗开发的工具。
可以从0.1org的the Access Network Dataplanes下载vCMTS。
虽然本文测试的vCTMS基于DPDK 18.08版本,但是背后的原理可以应用到早期版本的DPDK或者其他包处理库,比如Cisco的VPP。
本文用到的一些功能在DPDK 16.07.2首次引入。
vCMTS的下行(downstream)部分采用了多线程流水线设计。
流水线分为上/下MAC两部分,分别运行于两个不同的线程。而且这两个线程必须运行于同一个物理核心的2个超线程上,否则会浪费L2 Cache的效率。
参见图1 vCMTS下行包处理流水线
图1 vCMTS下行上