KK程序:

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

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

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

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

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

分别做三次gprof:

1. gmon-empty-off.txt

                0.08    0.42  /      kk_assemble_pool_packet_process []
[] 1.8 0.08 0.42 tcp_packet_process []
0.02 0.10 / _assemble_session_find []
0.01 0.08 / kk_tcp_session_request_find []
0.01 0.07 / kk_table_entries_timeout_free []
0.04 0.04 / _three_way_handshake_process []
0.00 0.06 / _tcp_data_assemble_process []

2. gmon-full-off.txt

                0.08    0.48 /     kk_assemble_pool_packet_process []
[] 2.4 0.08 0.48 tcp_packet_process []
0.09 0.08 / kk_table_entries_timeout_free []
0.06 0.10 / _assemble_session_find []
0.01 0.09 / kk_tcp_session_request_find []
0.03 0.01 / _three_way_handshake_process []
0.00 0.00 / _tcp_data_assemble_process []

3. gmon-mid-on.txt

                0.10    0.55 /     kk_assemble_pool_packet_process []
[] 2.3 0.10 0.55 tcp_packet_process []
0.10 0.11 / _assemble_session_find []
0.06 0.09 / kk_table_entries_timeout_free []
0.02 0.11 / kk_tcp_session_request_find []
0.02 0.04 / _three_way_handshake_process []
0.00 0.00 / _tcp_data_assemble_process []

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

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

1. gmon-empty-off.txt

name: tcp_assemble_task_1, size: , free: , pkts: , session: , hit: , drop:
name: udp_assemble_task_1, size: , free: , pkts: , session: , hit: , drop:
queue: , ipacket: , imissed: self_counter:
queue: , total_tsc: , tsc/pkt: 3399.538166

2. gmon-full-off.txt

name: tcp_assemble_task_1, size: , free: , pkts: , session: , hit: , drop:
name: udp_assemble_task_1, size: , free: , pkts: , session: , hit: , drop:
queue: , ipacket: , imissed: self_counter:
queue: , total_tsc: , tsc/pkt: 2311.996877

3. gmon-full-on.txt

name: tcp_assemble_task_1, size: , free: , pkts: , session: , hit: , drop:
name: udp_assemble_task_1, size: , free: , pkts: , session: , hit: , drop:
queue: , ipacket: , imissed: self_counter:
queue: , total_tsc: , tsc/pkt: 2333.934127

并未发现规律。

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

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

1. empty_on

name: tcp_assemble_task_1, size: , free: , pkts: , session: , hit: , drop:
name: udp_assemble_task_1, size: , free: , pkts: , session: , hit: , drop:
queue: , ipacket: , imissed: self_counter:
queue: , total_tsc: , tsc/pkt: 4318.416316

2. empty_off

name: tcp_assemble_task_1, size: , free: , pkts: , session: , hit: , drop:
name: udp_assemble_task_1, size: , free: , pkts: , session: , hit: , drop:
queue: , ipacket: , imissed: self_counter:
queue: , total_tsc: , tsc/pkt: 4842.824395

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

1. empty_on

name: tcp_assemble_task_1, size: , free: , pkts: , session: , hit: , drop:
name: udp_assemble_task_1, size: , free: , pkts: , session: , hit: , drop:
queue: , ipacket: , imissed: self_counter:
queue: , total_tsc: , tsc/pkt: 2912.590597

2. empty_off

name: tcp_assemble_task_1, size: , free: , pkts: , session: , hit: , drop:
name: udp_assemble_task_1, size: , free: , pkts: , session: , hit: , drop:
queue: , ipacket: , imissed: self_counter:
queue: , total_tsc: , tsc/pkt: 4675.433343

最后,是并发数的问题:

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

name: tcp_assemble_task_1, size: , free: , pkts: , session: , hit: , drop:  tcp_session:  max_concurrent:
name: udp_assemble_task_1, size: , free: , pkts: , session: , hit: , drop: tcp_session: max_concurrent:
queue: , max_concurrent:
queue: , ipacket: , imissed: self_counter:
queue: , total_tsc: , tsc/pkt: 4950.616718

[development][profile][dpdk] KK程序性能调优的更多相关文章

  1. java程序性能调优---------------性能概述

    一.程序的性能通过哪几个方面表现 1.执行速度(程序反应反应是否迅速.响应时间是否足够短) 2.分配内存 (分配内存是否合理,是否过多的消耗内存或者内存溢出) 3.启动时间(程序从运行到可以正常处理业 ...

  2. 程序性能调优工具之gprob

    1 简介改进应用程序的性能是一项非常耗时耗力的工作,但是究竟程序中是哪些函数消耗掉了大部分执行时间,这通常都不是非常明显的.GNU 编译器工具包所提供了一种剖析工具 GNU profiler(gpro ...

  3. BS程序性能调优

    首先想到的是优化算法.改进技术.扩展设备去做优化.其实在讨论性能的时候,绕不开对业务的理解,不同的业务系统对性能的要求不同,优化方式也不一样.优化性能的前提是保证业务的正确性.我们平时关注的性能主要是 ...

  4. golang 性能调优分析工具 pprof (上)

    一.golang 程序性能调优 在 golang 程序中,有哪些内容需要调试优化? 一般常规内容: cpu:程序对cpu的使用情况 - 使用时长,占比等 内存:程序对cpu的使用情况 - 使用时长,占 ...

  5. 【Java/Android性能优化1】Android性能调优

    本文参考:http://www.trinea.cn/android/android-performance-demo/ 本文主要分享自己在appstore项目中的性能调优点,包括同步改异步.缓存.La ...

  6. Android性能调优

    本文主要分享自己在appstore项目中的性能调优点,包括同步改异步.缓存.Layout优化.数据库优化.算法优化.延迟执行等.一.性能瓶颈点整个页面主要由6个Page的ViewPager,每个Pag ...

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

    并不是每个程序都需要调优.如果一个程序性能表现和预期一样,你不必付出额外的精力去提高它的性能.然而,在程序调试完成之后,很难马上就满足它的性能需求,于是就有了调优这项工作.无论哪种编程语言,对应用程序 ...

  8. Android性能调优实例

    本文主要分享自己在appstore项目中的性能调优点,包括同步改异步.缓存.Layout优化.数据库优化.算法优化.延迟执行等. 目前性能优化专题已完成以下部分: 性能优化总纲——性能问题及性能调优方 ...

  9. Java程序性能优化读书笔记(一):Java性能调优概述

    程序性能的主要表现点: 执行速度:程序的反映是否迅速,响应时间是否足够短 内存分配:内存分配是否合理,是否过多地消耗内存或者存在内存泄漏 启动时间:程序从运行到可以正常处理业务需要花费多少时间 负载承 ...

随机推荐

  1. 微信小程序场景值

    场景值 基础库 1.1.0 开始支持,低版本需做兼容处理 当前支持的场景值有: 场景值ID 说明 1001 发现栏小程序主入口 1005 顶部搜索框的搜索结果页 1006 发现栏小程序主入口搜索框的搜 ...

  2. TCP/IP协议理解

    TCP/IP协议理解 一.    协议分层 由于ISO标准中的网络模型是个7层模型,但是由于7层模型对于当时的网络厂商来说太过复杂,很多厂家采用了简化的4层模型来实现网络设备,4层模型也就成了事实的网 ...

  3. golang:reflect反射

    因为之前一直以C++为主要开发语言,所以刚接触go语言中的reflect时感觉很懵逼,因此决定找资料彻底学习一下. 到底反射是什么? https://blog.golang.org/laws-of-r ...

  4. 主机使用代理上网,虚拟机centos7如何连外网

    简介  今天任务不多,就想在学一些fastdfs,然后发现公司是通过代理上外网的,这里记录下,主机使用代理上网,虚拟机centos7如何连外网 vi /etc/yum.conf 加上 proxy=ht ...

  5. yarn 常用命令(基于vue框架)

    初始化项目 yarn add init 安装vue yarn add vue 安装webpack,webpack-dev-server(是一个小型的Node.js Express服务器) yarn a ...

  6. hadoop无法停止

    停止hadoop集群,运行命令 $ sh stop-all.sh 出现提示: no resourcemanager to stop host10: no nodemanager to stop hos ...

  7. [微信开发] 微信JSAPI - 获取用户地理位置信息

    参考博客 http://blog.csdn.net/u013142781/article/details/50503299 主要JS 方法 wx.getLocation 获取地理位置信息传递参数 成功 ...

  8. easyradius通讯接口 V4全新升级,显示同步失败原因,方便用户寻找故障

    最近一段时间,我们做了很多的努力,不仅完成了WayOs.BV.ROS.IK.PA接口的重写(主要加入智能判断,能处理的直接处理,不能处理的告诉用户),而且在原有DDNS访问失败的提示下,升级了同步失败 ...

  9. 场景切换 异步加载 loading条做法

    AsyncOperation mAsync; //需要加载的场景    public UISlider LoadingSlider; //NGUI做的    public UILabel GameTi ...

  10. 在springBoot中配置web.xml中配置的servlet

    第一种 web.xml (截取的需要转换的) 当拦截到 /socke t时执行该servlet <servlet> <servlet-name>websocket</se ...