[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

 

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/268786.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

求二进制数中1的个数

要求:对于一个字节(8bit)的变量,求其二进制表示中“1”的个数,要求算法的执行效率尽可能地高。 大多数的读者都会有这样的反应:这个题目也太简单了吧,解法似乎也相当地单一,不会有太…

CentOS安装glibc-2.14

到http://ftp.gnu.org/gnu/glibc/下载glibc-2.14.tar.xz tar glibc-2.14.tar.gz cd glibc-2.14 mkdir build cd build ../configure --prefix/usr/local/glibc-2.14 make -j4 su xxxx make install 看看现在libc.so.6在哪个位置,然后修改软链接 ln -s /usr/local/gl…

cesium米转换经纬度_cesium 常见坐标系及坐标转换(工具篇)

/** Description: 坐标转换工具,下面的坐标转换默认都是基于WGS84 椭球体*/class Degrees {constructor(longitude, latitude, height 0) {this.longitude longitude;this.latitude latitude;this.height height;}}Cesium.Degrees Degrees;//不建议这样直接修改…

sql 2005 try catch

--删除卡的记录 delete from ObjTransportCard where CardIdCardId --删除交易的记录 delete from ObjTransaction where CardIdCardId 在Sql 2000中,为了成功执行这个存储过程,我需要在每一条语句后面去判断ERROR,如果有错,则执行回滚.上例只是我举的一个简单的例子,如果在一个…

selenium拖动元素java_【自动化测试】Java+Selenium操作页面元素(合集)

本文基于Java语言,依托于Eclipse工具,使用Selenium框架,主要介绍在Selenium中,如何操作Web页面中的各种元素。Eclipse 搭建1.1、Eclipse 配置1.2、引入依赖包修改pom.xml文件在dependencys节点下,添加如下内容&#xf…

面试题 锁消除是什么

锁消除是在编译器级别的事情。 在即时编译器时,如果发现不可能被共享的对象,则可以消除这些对象的锁操作。 也许你会觉得奇怪,既然有些对象不可能被多线程访问,那为什么要加锁呢?写代码时直接不加锁不就好了。 但是…

通过日志恢复SQL Server的历史数据

园子里前段时间发过一篇通过日志恢复MSSQL数据例子 ,我总结一下 通过日志还原,最重要的是: 1.必须有一个完整的备份,且这个备份必须是在修改、删除数据之前做的。 2.在更新、删除数据之后,做日志备份,该log…

JavaScript面向对象编程指南(五) 原型

第5章 原型 5.1 原型属性 function f(a,b){return a*b;};// length 属性f.length; //2// constructor 构造属性f.constructor; // function Function() { [native code] }// prototype 属性 初始值是空对象typeof f.prototype; //"object" 5.1.1 利用原型添加方法和…

java communal_平台用英语怎么说

平台通常指高于附近区域的平面;楼房的阳台。也指指计算机硬件或软件的操作环境。而在网络上所说的平台一般是指网站。那么你知道平台用英语怎么说吗?下面来学习一下吧。平台英语说法1:platform平台英语说法2:terrace平台英语说法3:flat roof…

面试题-- 什么是偏向锁

所谓的偏向,就是偏心,即锁会偏向于当前已经占有锁的线程 。 大部分情况是没有竞争的(某个同步块大多数情况都不会出现多线程同时竞争锁),所以可以通过偏向来提高性能。即在无竞争时,之前获得锁的线程再次获…

Ping, IPConfig, Format, Netstat, etc. Not Recognized as Commands

Can you use them when you point directly to them..> C:\Windows\System32\ping.exe 127.0.0.1? If so, you probably have a messed up PATH variable.> echo %PATH%Should have "C:\Windows\System32" in it, does it? 以上为google的结果,我…

Collections.min()和Collections.max()的使用

取集合中的最小值 Collections.min(); 取集合中的最大值 Collections.max(); public class TestCollectionMinMax {public static void main(String[] args) {List<Integer> list new ArrayList<>();list.add(3);list.add(7);list.add(9);list.add(1);list.add(…

java date 过时_过时date.toLocaleString()的解决方法

过时date.toLocaleString()的解决方法 Java代码 收藏代码 System.out.println(new java.util.Date()); 输出&#xff1a;Thu Jan 27 14:43:28 CST 2011 Java代码 收藏代码 System.out.println(new java.util.Date().toLocaleString()); 输出&#xff1a;2011-1-27 14:45:…

linux下查看隐藏的文件

在linux下以点开头命名的文件在系统中视为隐藏文件&#xff0c;例如 “.123 ”。用ls、ls -l或者ll是无法查看的。那么如何才能查看linux系统下的隐藏文件呢&#xff1f;下面介绍一下简单的查看方式。1、#在命令行下使用ls -a2、#在XWindow的KDE桌面中在"查看(View)"…

python学习之路(九)

这一节主要讲的是装饰器。装饰器是一个非常好用的&#xff0c;用于装饰已有函数的函数功能。 其优点是不用修改调用方式&#xff0c;还不用修改源代码。 他的思想是&#xff1a;函数既变量&#xff1b;高阶函数&#xff1b;嵌套函数。 现在来尝试写装饰器 有两个函数 各自实现自…

java http请求实现_java工程实现http请求接口

java工程实现http请求接口java工程实现http请求接口1.实现代码package com.home;import com.alibaba.fastjson.JSON;import com.alibaba.fastjson.JSONObject;import com.sun.net.httpserver.HttpExchange;import com.sun.net.httpserver.HttpHandler;import com.sun.net.https…

Java集合中removeIf的使用

使用removeIf方法从List中删除元素 在JDK1.8中&#xff0c;Collection以及其子类新加入了removeIf方法&#xff0c;作用是按照一定规则过滤集合中的元素。这里展示removeIf的用法。 需求是过滤掉学生中分数为为18以下的&#xff0c; 一个学生实体类 Data public class Studen…

Java中lombok @Builder注解使用详解

简介 Lombok大家都知道&#xff0c;在使用POJO过程中&#xff0c;它给我们带来了很多便利&#xff0c;省下大量写get、set方法、构造器、equal、toString方法的时间。除此之外&#xff0c;通过Builder注解&#xff0c;lombok还可以方便的实现建造者模式&#xff0c;创建对象 …

鼠标控制

一&#xff09;客户端 using System;using System.Net;using System.Net.Sockets;using System.Text;using System.IO;using System.Threading; namespace 鼠标控制_客户端{ //我们定义一个保存鼠标坐标的结构 public struct MousePosition { private int x; …