主流包处理硬件平台
支撑包理的主流硬件平台大致可分为三个方向。
·硬件加速器 (ASIC, FPGA)
·网络处理器 (NPU)
·多核处理器 (IA multi-core Xeon 等)
初识DPDK
传统处理流程和优化
以Linux为例,传统网络设备驱动包处理的动作可以概括如下:
·数据包到达网卡设备。
·网卡设备依据配置进行DMA操作。
·网卡发送中断,唤醒处理器。
·驱动软件填充读写缓冲区数据结构。
·数据报文达到内核协议栈,进行高层处理。
·如果最终应用在用户态,数据从内核搬移到用户态。
·如果最终应用在内核态,在内核继续进行。
优化方式
- NAPI机制:系统被中断唤醒后,尽量使用轮询的方式一次处理多个据包,直到网络再次空闲重新转入中断等待。
- netmap:采用共享数据包池的方式,减少内核到用户空间的包复制。
DPDK最佳实践
- 轮询,这一点很直接,可避免中断上下文切换的开销。Linux也采用该方法改进对大吞吐数据的处理,效果很好。
- 用户态驱动,在这种工作方式下,既规避了不必要的内存拷贝又避免了系统调用。一个间接的影响在于,用户态驱动不受限于内核现有的数据格式和行为定义。对mbuf头格式的重定义、对网卡DMA操作的重新优化可以获得更好的性能。
- 亲和性与独占,DPDK工作在用户态,线程的调度仍然依赖内核。利用线程的CPU亲和绑定的方式,特定任务可以被指定只在某个核上工作。好处是可避免线程在不同核间频繁切换,核间线程切换容易导致因cache miss和cache write back造成的大量性能损失。如果更进一步地限定某些核不参与Linux系统调度,就可能使线程独占该核,保证更多cache hit的同时,也避免了同一个核内的多任务切换开销。
- 降低访存开销,网络数据包处

最低0.47元/天 解锁文章
3623

被折叠的 条评论
为什么被折叠?



