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. JUnit+Mockito结合测试Spring MVC Controller

    [本文出自天外归云的博客园] 概要简述 利用JUnit结合Mockito,再加上spingframework自带的一些方法,就可以组合起来对Spring MVC中的Controller层进行测试. 在 ...

  2. PSR PHP业界规范

    0x0 大型项目的问题 随着项目越来越大,参与的人数越来越多,代码变得越来越不可维护了. 每个人都给项目带来自己的风格,所以这时就需要大家采用一个统一的标准. 0x1 解决办法 于是顶尖的PHPer们 ...

  3. PHP优化——从语言到业务

    经常有人说php速度慢,其实语言层面的速度差异和实际的业务相比,不在一个数量级. 业务的瓶颈往往在于io,而不是CPU. 0x0 语言 语法 单引号和双引号 单引号不解析字符串里的变量,而双引号会解析 ...

  4. CMS 01

    环境搭建 工具 sublime mysql 5.7, 数据库管理 Navicat django 1.10, django shell (可以用来检查错误) 操作系统, windows 7 搭建 dja ...

  5. Java知多少(67)面向字符的输入流

    字符流是针对字符数据的特点进行过优化的,因而提供一些面向字符的有用特性,字符流的源或目标通常是文本文件. Reader和Writer是java.io包中所有字符流的父类.由于它们都是抽象类,所以应使用 ...

  6. Java知多少(89)列表和组合框

    有两种类型的菜单:下拉式菜单和弹出式菜单.本章只讨论下拉式菜单编程方法.菜单与JComboBox和JCheckBox不同,它们在界面中是一直可见的.菜单与JComboBox的相同之处是每次只可选择一个 ...

  7. Fedora 21 安装 Budgie Desktop

    最新文章:Virson's Blog Budgie Desktop 是一款自由开源桌面,是 Evolve OS 的默认桌面,Evolve OS 是一款 OpenSUSE 的衍生系统.Budgie De ...

  8. CentOS安装python-pip

    在使用Python时,需要导入一些第三方工具包,一般情况下,鼓励使用pip来安装管理这些第三方的包,这里我们来看一下如何在CentOS 6.4上安装Python-pip.   第一步,下载python ...

  9. 13组合模式Composite

    一.什么是组合模式 Composite模式也叫组合模式,是构造型的设 计模式之一.通过递归手段来构造树形的对象结 构,并可以通过一个对象来访问整个对象树. 二.组合模式的结构 三.组合模式的角色和职责 ...

  10. PHP在linux读取word文档

    几天帮朋友解决一个技术问题,在Linux下,将word文档中的内容读取,然后使用正则匹配,拼成sql入库 查阅了外文资料和google之后,步骤如下: #wget http://www.winfiel ...