[development][profile][dpdk] KK程序性能调优

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
时间: 2024-08-25 03:13:16

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

下载深入Java程序性能调优(阿姆达尔定律、缓存组件、并行开发、线程池、JVM调优)

深入Java程序性能调优(阿姆达尔定律.缓存组件.并行开发.线程池.JVM调优),刚刚入手,转一注册文件,视频的确不错,可以先下载看看:http://pan.baidu.com/s/1cvD3rw 密码:eevh 1.1. 性能概述--两个实战在线项目对比突出性能的重要性1.2. 性能概述--阿姆达尔定律解决性能的关键点2.1. 设计优化--模式在实际开发中运用012.2. 设计优化--模式在实际开发中运用02-延迟加载的核心2.3. 设计优化--模式在实际开发中运用03-基于动态代理的拦截器2

Java性能调优_深入Java程序性能调优(并行开发、JVM调优)

深入Java程序性能调优(阿姆达尔定律.缓存组件.并行开发.线程池.JVM调优)课程讲师:special课程分类:Java核心适合人群:初级课时数量:33课时更新程度:完成用到技术:阿姆达尔定律.缓存组件.并行开发.线程池.JVM调优涉及项目:模式在实际开发中运用深入Java程序性能调优下载: http://pan.baidu.com/s/1ntn0ZTB 密码: ijluJava性能调优:国内关于Java性能调优的课程非常少,如此全面深入介绍Java性能调优,北风算是独家,Special讲师,

程序性能调优的利器

gprof,oprofile,perf的使用 gprof 用户手册 http://sourceware.org/binutils/docs-2.17/gprof/index.html oprofile官方站点 http://oprofile.sourceforge.net/ 使用 GNU profiler 来提高代码运行速度 http://www-128.ibm.com/developerworks/cn/linux/l-gnuprof.html 使用 OProfile for Linux on

Java程序性能调优深入浅出视频下载

国内关于Java性能调优的课程非常少,如此全面深入介绍Java性能调优,北风算是独家,Special讲师,十余年Java方面开发工作经验,资深软件开发系统架构师,本套课程系多年工作经验与心得的总结,课程有着很高的含金量和实用价值,一套拥有,高薪可求!一.本课程是怎么样的一门课程(全面介绍)   1.1.课程的背景    该课程是让大多数java开发者立足于编写高质量的程序,去感受java开发中的大智慧, 让java程序更优美. 1.2.课程内容简介 专注于java应用程序的优化方法,技巧和思想,

Java程序性能调优的基本知识和JDK调优

一 基本知识 1.1 性能是什么 在性能调优之前,我们首先来了解一下性能是什么?关于性能,我想每个学习过Java的人都能列出几点,甚至可以夸夸其谈.在<Java TM Platform Performance>一书中,定义了如下五个方面来作为评判性能的标准: 1) 运算的性能--哪一个算法的执行性能最好? 2) 内存的分配--程序运行时需要耗费多少内存? 3) 启动的时间--程序启动需要多长时间?这在Web项目中的影响不大,但要注意部分程序需要部署或运行在客户端时的情形(比如applet程序)

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

一.程序的性能通过哪几个方面表现 1.执行速度(程序反应反应是否迅速.响应时间是否足够短) 2.分配内存 (分配内存是否合理,是否过多的消耗内存或者内存溢出) 3.启动时间(程序从运行到可以正常处理业务需要花费多长时间) 4.负载承受能力(当系统压力上升时,系统的执行速度.响应时间的上升曲线是否平缓) 二.性能的参考指标 1.执行时间(一段代码从开始运行到运行结束,所使用的时间) 2.CPU时间(函数或者线程占用CPU实际) 3.内存分配(程序在运行时占用的内存空间) 4.磁盘吞吐量(描述I/O

深入Java程序性能调优视频教程

下载:http://pan.baidu.com/s/1bi7Kj8 密码:mujd 课程专注于java应用程序的优化方法,技巧和思想,深入剖析软件设计层面.代码层面.JVM虚拟机层面的优化方法,理论结合实际,使用丰富的示例帮助学员理解理论知识. 第一课(性能概述--两个实战在线项目对比突出性能的重要性) 第二课(性能概述--阿姆达尔定律解决性能的关键点) 第三课(设计优化--模式在实际开发中运用01) 第四课(设计优化--模式在实际开发中运用02--延迟加载的核心) 第五课(设计优化--模式在实

c++程序性能调优

1.尽量减少值传递,多用指针和引用来传递参数 值传递要拷贝对象,引用传递不用 2.++i和i++的效率问题 i++开辟了临时变量,效率低 3.将小粒度函数声明为内联函数 内联函数直接会直接展开,不需要函数调用的开销 4.减少函数调用 函数调用需要两次跳转,外加栈帧的内存操作 5.优先使用迭代而不是递归 理由和上面一样 6.多使用直接初始化,而不是拷贝初始化 转载自:https://www.jb51.net/article/54773.htm 当对一个类对象初始化时,如果“=”右边不是一个类对象时

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

这是"成为Java GC专家"系列的第五篇文章.在第一篇深入浅出Java垃圾回收机制中,我们已经学习了不同的GC算法流程.GC的工作原理.新生代(Young Generation)和老年代(Old Generation)的概念.你应该了解了JDK7中5种GC类型以及各种类型对应用程序的影响. 在第二篇如何监控Java的垃圾回收中,阐述了JVM是怎样实际执行垃圾回收的,我们怎样去监控GC以及哪些工具能让这个过程更高效. 第三篇如何如何优化Java垃圾回收机制中展示了一些基于真实案例的最佳