KK程序:

1. 两个线程,第一个从DPDK收包,通过一个ring数据传递给第二个线程。第二个线程将数据写入共享内存。

2. 第二个内存在发现共享内存已满时,会直接丢弃数据。

3. 线程二有个选项debug,用于每一次ring_dequeue之后,都将数据写入内存。

  当这个选项为on时,内存未满,也不会丢包。

现象:当内存已满的时候,可以千兆线速收包。当内存未满时,丢包率为20%。

分别做三次gprof:

1. gmon-empty-off.txt

                0.08    0.42  471955/471955      kk_assemble_pool_packet_process [21]
[23]     1.8    0.08    0.42  471955         tcp_packet_process [23]0.02    0.10  739629/739629      _assemble_session_find [36]0.01    0.08  512494/512494      kk_tcp_session_request_find [43]0.01    0.07  665134/818327      kk_table_entries_timeout_free [39]0.04    0.04  330145/330145      _three_way_handshake_process [45]0.00    0.06  456472/461571      _tcp_data_assemble_process [48]

2. gmon-full-off.txt

                0.08    0.48 3746819/3746819     kk_assemble_pool_packet_process [15]
[16]     2.4    0.08    0.48 3746819         tcp_packet_process [16]                          0.09    0.08 3754332/3782242     kk_table_entries_timeout_free [26]           0.06    0.10 3746592/3746592     _assemble_session_find [27]                  0.01    0.09 3747382/3747382     kk_tcp_session_request_find [32]             0.03    0.01 3702531/3702531     _three_way_handshake_process [45]            0.00    0.00   56275/71247       _tcp_data_assemble_process [4295]

3. gmon-mid-on.txt

                0.10    0.55 3742005/3742005     kk_assemble_pool_packet_process [15]
[16]     2.3    0.10    0.55 3742005         tcp_packet_process [16]0.10    0.11 3745003/3745003     _assemble_session_find [21]0.06    0.09 3753439/3777518     kk_table_entries_timeout_free [25]0.02    0.11 3743276/3743276     kk_tcp_session_request_find [30]0.02    0.04 3689792/3689792     _three_way_handshake_process [45]0.00    0.00   64598/81267       _tcp_data_assemble_process [4295]

根据以上内容,对比一个关键步骤里的函数执行站比。可以发现。1中find查询的占比明确比其他两种情况更高。 而现象上也是情况1会有丢包,情况2,3不丢包。

再次测试,查看这三次的会话数。

1. gmon-empty-off.txt

name: tcp_assemble_task_1, size: 0, free: 1048575, pkts: 559700, session: 11688, hit: 0, drop: 0
name: udp_assemble_task_1, size: 0, free: 1048575, pkts: 0, session: 0, hit: 0, drop: 0
queue: 0, ipacket: 2595943, imissed: 1204057 self_counter: 2595943
queue: 0, total_tsc: 8825007304, tsc/pkt: 3399.538166

2. gmon-full-off.txt

name: tcp_assemble_task_1, size: 0, free: 1048575, pkts: 48176, session: 16740, hit: 0, drop: 33152
name: udp_assemble_task_1, size: 0, free: 1048575, pkts: 0, session: 0, hit: 0, drop: 0
queue: 0, ipacket: 3800000, imissed: 0 self_counter: 3800000
queue: 0, total_tsc: 8785588132, tsc/pkt: 2311.996877

3. gmon-full-on.txt

name: tcp_assemble_task_1, size: 0, free: 1048575, pkts: 50746, session: 16982, hit: 0, drop: 33600
name: udp_assemble_task_1, size: 0, free: 1048575, pkts: 0, session: 0, hit: 0, drop: 0
queue: 0, ipacket: 3800000, imissed: 0 self_counter: 3800000
queue: 0, total_tsc: 8868949684, tsc/pkt: 2333.934127

并未发现规律。

使用新数据再次做次测试:

每15个包1个http会话。共270000个会话,按顺序组装,4050000个包。

1. empty_on

name: tcp_assemble_task_1, size: 0, free: 1048575, pkts: 1754014, session: 270001, hit: 0, drop: 528988
name: udp_assemble_task_1, size: 0, free: 1048575, pkts: 0, session: 0, hit: 0, drop: 0
queue: 0, ipacket: 4050000, imissed: 0 self_counter: 4050000
queue: 0, total_tsc: 17489586080, tsc/pkt: 4318.416316

2. empty_off

name: tcp_assemble_task_1, size: 0, free: 1048575, pkts: 2429992, session: 269999, hit: 0, drop: 0
name: udp_assemble_task_1, size: 0, free: 1048575, pkts: 0, session: 0, hit: 0, drop: 0
queue: 0, ipacket: 4050000, imissed: 0 self_counter: 4050000
queue: 0, total_tsc: 19613438800, tsc/pkt: 4842.824395

与上一组同样的测试数据,但是每5000个作为一组并发。

1. empty_on

name: tcp_assemble_task_1, size: 0, free: 1048575, pkts: 285000, session: 270000, hit: 0, drop: 540000
name: udp_assemble_task_1, size: 0, free: 1048575, pkts: 0, session: 0, hit: 0, drop: 0
queue: 0, ipacket: 4015852, imissed: 34148 self_counter: 4015852
queue: 0, total_tsc: 11696532776, tsc/pkt: 2912.590597

2. empty_off

name: tcp_assemble_task_1, size: 0, free: 1048575, pkts: 2068418, session: 235000, hit: 0, drop: 0
name: udp_assemble_task_1, size: 0, free: 1048575, pkts: 0, session: 0, hit: 0, drop: 0
queue: 0, ipacket: 3756940, imissed: 293060 self_counter: 3756940
queue: 0, total_tsc: 17565322544, tsc/pkt: 4675.433343

最后,是并发数的问题:

KK程序的最大并发数,只能处理到4000.

name: tcp_assemble_task_1, size: 0, free: 1048575, pkts: 2430000, session: 270000, hit: 0, drop: 0 tcp_session: 1 max_concurrent: 5000
name: udp_assemble_task_1, size: 0, free: 1048575, pkts: 0, session: 0, hit: 0, drop: 0 tcp_session: 1 max_concurrent: 5000
queue: 0, max_concurrent: 5000
queue: 0, ipacket: 4020940, imissed: 29060 self_counter: 4020940
queue: 0, total_tsc: 19906132788, tsc/pkt: 4950.616718

转载于:https://www.cnblogs.com/hugetong/p/7251733.html

[development][profile][dpdk] KK程序性能调优相关推荐

  1. CUDA程序性能调优

    目录 1.kernel function parameters 2. local variables 3.shared memory with __syncthreads__ call 4.devic ...

  2. java多线程程序性能调优 优化过程

    我, 一多年c++开发,由于项目原因需要对一个性能底下的多线程java程序进行调优,百度google了几把,妈蛋,没有发现指导如何java线程调优的文章啊,都是一些java使用规范,我去,那我大jav ...

  3. profile matlab,使用profile功能对Matlab性能调优

    做PCANet的时候,Matlab抽风,加不了断点,无奈之下只好把所有的function都写到了一个m文件里.结果发现所有function写在同一个m文件下时,程序运行速度快很多. 后来师兄告诉我,用 ...

  4. 性能测试实践|PerfDog助力微信小游戏/小程序性能调优

    概述 随着近年来微信生态圈的发展,小游戏,小程序也随之爆火,同样伴随着的便是对于小游戏/小程序的用户体验的严格要求:微信团队也在自家的微信平台推荐使用PerfDog测试小游戏/小程序的性能. 1.评测 ...

  5. 【程序性能调优】分析gprof 结果含义

    1.gprof gprof-test gmon.out -p 得到每个函数占用的执行时间 % time                       :此函数使用的程序总运行时间的百分比. cumula ...

  6. 成为Java GC专家(5)—Java性能调优原则

    2019独角兽企业重金招聘Python工程师标准>>> 这是"成为Java GC专家"系列的第五篇文章.在第一篇深入浅出Java垃圾回收机制中,我们已经学习了不同 ...

  7. java jvm调优_(第1部分,共3部分):有关性能调优,Java中的JVM,GC,Mechanical Sympathy等的文章和视频的摘要...

    java jvm调优 我已经花了几个月的时间考虑审查有关性能调优,JVM,Java中的GC,Mechanical Sympathy等主题的文章和视频的缓存,并最终花了点时间–也许这就是重点我什么时候才 ...

  8. (第1部分,共3部分):有关性能调优,Java中的JVM,GC,Mechanical Sympathy等的文章和视频的摘要...

    我已经花了几个月的时间考虑审查有关性能调优,JVM,Java中的GC,Mechanical Sympathy等主题的文章和视频的缓存,并最终花了点时间–也许这就是重点我什么时候需要做我的智力进步! 感 ...

  9. aix系统java堆_浅谈AIX环境下的Java性能调优

    1.什么是Java Java 是一种面向对象的编程语言.它以 C++ 为模型,被设计成小的.简单的.在源和二进制级别跨平台的可移植的语言,Java 程序(applets 和应用程序)可以运行于任何已经 ...

最新文章

  1. AI一分钟 | 小米MIX 2S将于3月27号发布,搭载骁龙845;张朝阳:在研究区块链 但相信AI的力量
  2. 讲你肯定能懂的机器学习多维极值求解
  3. mysql远程连接授权
  4. HTML DOM简介
  5. 【B站视频教程笔记】基于VSCode和CMake实现C/C++开发 | Linux篇(gcc/g++)(安装、配置、使用详细教程)(VSCode教程)(CMake教程)(精!)
  6. JS 中迭代数组的三种方法
  7. WebRTC 系列之视频辅流
  8. sql语句练习(三):LeetCode
  9. 2021年专接本计算机院校,2021年专接本各类招生院校汇总
  10. vue better-scroll 下拉上拉,加载刷新
  11. ir2104s的自举电容_IR2104s半桥驱动芯片使用经验及注意事项
  12. oracle latch chain,ORACLE latch AND mutex 深入讲解
  13. 解密-大象跳转如何实现微信中点击链接直接跳到默认浏览器(不是在微信内置浏览器打开)
  14. Vue中的vm和VueComponent的实例对象
  15. Android USB 串口通信
  16. 北京华虹正式加入CPChain行业节点
  17. jsp 简单的登陆界面(不连数据库)
  18. 工业机器人码垛教学实施_工业机器人码垛方案设计
  19. 小心,你的账号密码可能在 GitHub 上裸奔!
  20. 剑指offer答案 c语言,剑指offer 题目整理

热门文章

  1. node --- 后端使用body-parse解析Post请求,前端使用axios发送Post请求
  2. 【重要】ES6-23 JavaScript模块化
  3. leetcode 643 Maximum Average Subarray I
  4. Elementary OS安装Chrome
  5. C# .net core 使用自定义的WebProxy
  6. 使用GPUImage实现视频滤镜
  7. 设置UILabel可变高度(根据文本内容自动适应高度)
  8. 阴雨连绵潮湿加剧 车辆防潮提升保值
  9. WinCE切换GPRS
  10. cocos2d的常用动作及效果总结之五:Animation