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. Android中获取应用程序(包)的信息-----PackageManager的使用

    本节内容是如何获取Android系统中应用程序的信息,主要包括packagename.label.icon.占用大小等.具体分为两个 部分,计划如下: 第一部分: 获取应用程序的packagename ...

  2. linux每日命令(26):Linux文件属性详解

    Linux 文件或目录的属性主要包括:文件或目录的节点.种类.权限模式.链接数量.所归属的用户和用户组.最近访问或修改的时间等内容.具体情况如下: 命令: ls -lih 输出: [root@loca ...

  3. python学习笔记(23)——python压缩bin包

    说明(2017-12-25 10:43:20): 1. CZ写的压缩bin包代码,记下来以后好抄. # coding:utf-8 ''' Created on 2014年8月14日 @author: ...

  4. Extjs4 DateTimeField,日期时间控件完美版

    网上若干类似的控件,要么是有bug,要么是操作体验不合理,这里贡献一个比较科学的版本. 扩展包下载: http://files.cnblogs.com/qidian10/Ext.ux.rar 解压至E ...

  5. android( java) 处理 null 和 预防空指针异常(NullPointerException) 的一些经验。

    概述: 在实际编码中总是会遇到 空指针异常 ,本文总结了一些处理空指针的个人经验. 原则: 尽早的检查,尽早的失败. 比如: 通过intent传参到新的目标 activity,而且一定需要这个参数,那 ...

  6. Java知多少(38)抽象类的概念和使用

    在自上而下的继承层次结构中,位于上层的类更具有通用性,甚至可能更加抽象.从某种角度看,祖先类更加通用,它只包含一些最基本的成员,人们只将它作为派生其他类的基类,而不会用来创建对象.甚至,你可以只给出方 ...

  7. R语言使用RMySQL连接及读写Mysql数据库

    简单说下安装过程,一般不会有问题,重点是RMySQL的使用方式. 系统环境说明 Redhat系统:Linux 460-42.6.32-431.29.2.el6.x86_64 系统编码:LANG=zh_ ...

  8. 性能优化系列七:SQL优化

    一.SQL在数据库中的执行过程 二.执行计划 1. ACID 原子性:一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节.事务在执行过程中发生错误,会 ...

  9. Git -- 忽略特殊文件

    有些时候,你必须把某些文件放到Git工作目录中,但又不能提交它们,比如保存了数据库密码的配置文件啦,等等,每次git status都会显示Untracked files ...,有强迫症的童鞋心里肯定 ...

  10. ZeroMQ总结

    Socket types Thread safety: ZeroMQ的socket是非线程安全的,并且ZeroMQ本身不建议在多个线程中传递同一个Socket,即使保证了线程同步.   Socket ...