ODP/DPDK代码级性能优化总结Tips

本文总结了在ARM 64位CPU上使用ODP/DPDK进行代码级性能优化的经验,包括使用Perf性能检测工具、高精度时钟、Eclipse自动化、GDB调试、Git版本控制、assert检查、编译选项优化、Batch处理、Pool优化等技巧。通过对内存访问、函数调用、指针和循环的优化,显著提升了处理小包的性能,达到线速。文中还讨论了CPU利用率统计、DPDK配置及未来展望。
摘要由CSDN通过智能技术生成
ODP/DPDK代码级性能优化总结Tips

以下过程基于ARM 64位CPU, 仅供参考

ODP是Linaro基金下面的开源框架,类似于DPDK。最近用ODP程序DEMO公司SOC性能,性能不理想,优化了一圈又一圈,发现驱动水分很大,包括ODP框架本身。中间不听Architect的建议,自作主张用DPDK+ODP来展示一下我们的多样化驱动, 找到方案,开发中发现DPDK驱动性能也不理想,自己吹的牛,含着泪也要优化完。

前提:
这里主要用64B小包简单反射仪表进来的数据,目的是确认驱动性能最优。进一步读取报文内容会导致加载额外cacheline,性能会下降一些。10G网口小包线速14.88Mpps, 对于2G CPU来说134个时钟周期,平均到每个报文的指令数是关键。

Perf性能检测工具:
如果不能用ubuntu直接安装,比如自己编译的Kernel源码,到tools/perf下make, 生产的perf就是了,复制到usr/bin下面去。
perf list 可以列出你当前cpu支持的性能参数
perf stat -p 'pidof your_app` -e task-clock,...用来检测程序的性能参数
注意-p参数附加到现有进程,可以避免看到程序启动过程的影响。
-e 中要有task-clock这样可以看到更多的%和M/s的统计参数
如果你的cache miss rate大于5%, 输出会有颜色标识
Perf在跟踪cache load miss rate和write miss rate特别有用,没有被cache到的数据访用它能明显看出差别。

高精度时钟:
千万别用系统函数来去时间评估性能,系统开销太大。rte_rdtsc() 是个很好的实现,一条汇编指令。在我的环境下对性能影响微乎其微。用全局变量分别累计batch处理中rx/rd/tx/free时间,每个局部需要统计的代码段的累加时间都除以这个总数,以%显示出来,这样一两个指令的节省都能明显看到%在变化。下面是我用到的几个宏,哪段代码怀疑有问题马上加上去
PERF_VAR xxx; //定义 全局performance counter
PERF_START(); //用在需要统计的代码段开头
PERF_COUNT(xxx); //统计某计数器
PERF_DUMP(xxx, sum); //命令行调用或者exit时打印性能百分比
注意ÿ
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值