高速采集驱动库的机制及性能研究
Research on Mechanism and Performance of High - speed packet capture Driver Library
1.研究业内实时报文采集的不同机制;
2.设计实验,实测不同用例下不同驱动库的性能;
3.根据研究结果提高现有采集软件性能。
实验:
1、发包程序
pf_ring:zsend
dpdk: pktgen-dpdk (1.8版本不能运行)
2、性能分析
vtune
3、性能测试
单线程run to completion 对比(pf_ring 和 DPDK性能进行对比,基于不同报文长度)
单Rx双worker的pipeline模型线程分布 NUMA (利用最小长度报文进行测试)
改变网卡队列长度对收包速率的影响(微小影响)
单Rx的pipeline模型worker数量变化
单Rx的pipeline模型线程栈分布
双Rx双Worker的pipeline模型线程分布
双接收队列时,网卡RSS结果均衡程度影响速率(有影响)
多线程run to completion 对比 NUMA
DPDK多生产者多消费者(mpmc)的可扩展性分析
xDR线程分布
4、理论基础
Linux内核处理报文的过程(结合内核代码)(附带了解 IRQ、软中断、RPS)
RPS技术:
RPS(Receive Packet Steering)多核CPU单队列网卡条件下,在软件层面模拟实现硬件网卡的多队列。
在网卡驱动函数里对每一条流依据四元组(SIP,SPORT,DIP,DPORT)做Hash,再根据Hash标志将软中断的负载均衡到各个CPU
RFS(Receive Flow Steering)确保应用程序处理的CPU和软中断处理的CPU是同一个,可以充分利用CPU的Cache
Linux报文采集:
Linux报文采集通常采用TCP/IP协议栈的嵌套字实现。嵌套字主要有三种类型
流式嵌套字、数据报嵌套字、原始嵌套字
tcpdump设置钩子函数复制报文,libpcap直接使用原始嵌套字方式。以上两种都是基于内核协议栈,报文获取来自于内核协议栈的复制
PF_Ring:
高速数据包采集库,提供两个层次的库供用户使用。一个层次对传统报文处理方法做了改进,基本处理依然依赖内核态的中断。第二个层次是对报文处理方法进行大量的改进,性能提升显著,不过还未开源。
NUMA相关理论
报文处理中的负载均衡的了解(RSS、RPS、pipeline处理模型)
5、笔记
testpmd
启动testpmd程序 ./app/testpmd -c 0xf -n 4 -- -i
程序启动后你可以执行help命令查看帮助信息;
start 启动数据转发;
stop 停止并统计数据转发结果
程序启动后默认是io转发模式,
set fwd io|mac|rxonly|txonly|csum 设置其他转发模式,如 set fwd mac 设置为mac转发模式;
6、阶段任务
#### **任务描述**
- 1. 了解DPDK,学习DPDK官网文档、电信的DPDK资料、intel ppt
- 2. 在服务器83.11上安装DPDK
- 3. 运行tcpreplay
- 4. 运行l2fwd,l3fwd实验一下报文在设备之间的传输
#### **输出:**
- 每天在issue上记录一下当天完成的内容。
#### **时间:**
- 10月12日前学习DPDK文档
- 10月14日前安装DPDK,运行DPDK的testpmd和tcpreplay,同时继续学习DPDK文档
- 10月15日前安装运行l2fwd和l3fwd例程,同时继续学习DPDK文档
#### **任务描述**
- 1. 使用zsend及其命令行配置
- 2. 使用pktgen-dpdk及其配置脚本
- 3. 学习vtune文档并实验
- 4. 使用perf及其命令行配置
#### **输出:**
- 每天在issue上记录一下当天完成的内容。
#### **时间:**
10月28日前
网友评论