6、ns-3数据跟踪

两类跟踪技术:一类是直接将执行过程显示在命令行中,有助于调试仿真脚本,ns-3用Logging系统。另一类是更为常用的将采集到的数据直接存放在一个文件中,以便后期的处理与分析,ns-3使用的是Tracing系统。

1、Logging系统

v 有7个等级,有低到高,高的包含低的消息:

LOG_ERROR——记录错误信息

LOG_WARN——记录警告信息

LOG_DEBUG——记录一些调试信息

LOG_INFO——记录一些程序相关的信息

LOG_FUNCTION——当有函数被调用时,该调用信息就被记录

LOG_LOGIC——对于整体逻辑的描述

LOG_ALL——包含上述的所有信息

LOG_TYPE和LOG_LEVEL_TYPE功能一样。

v 通过cc文件程序里面添加记录信息

First文件中的两个激活记录信息的语句:

LogComponentEnable ("UdpEchoClientApplication", LOG_LEVEL_INFO);

LogComponentEnable ("UdpEchoServerApplication", LOG_LEVEL_INFO);

所以会有结果:

v 通过环境变量修改记录系统等级

可以在编译脚本前使用export命令修改NS_LOG的值,比如针对first.cc这个例子,就可以这样做:

在终端输入:

export ‘NS_LOG=UdpEchoClientApplication=level_all:UdpEchoServerApplication=level_all‘

注意等号的右边是小写字符,和在程序中改不同。

截图:

然后再在终端运行

#./waf --run first

注意三点:1、要在root用户下,2、run前面是两个杆,3、运行目录在ns-3的源码目录

截图如下:

v 添加函数前缀

只要在脚本的语句中改为:

export ‘NS_LOG=UdpEchoClientApplication=level_all|prefix_func:UdpEchoServerApplication=level_all|prefix_func‘

如果要添加函数调用时间,那么就是添加语句

export ‘NS_LOG=UdpEchoClientApplication=level_all|prefix_func|prefix_time:UdpEchoServerApplication=level_all|prefix_func|prefix_time‘

v 自定义Logging代码

在main函数前面添加语句:

NS_LOG_COMPONENT_DEFINE ("FirstScriptExample");//这个可以自己取

在main函数开始时,注册:

LogComponentEnable ("FirstScriptExample", LOG_LEVEL_INFO);//可以用环境变量来export NS_LOG=FirstScriptExample=level_info

然后在函数里面用类似的语句来输出信息:

NS_LOG_INFO("Create Topology");

文件的语句:

NS_LOG_COMPONENT_DEFINE ("FirstScriptExample");

int

main (int argc, char *argv[])

{

Time::SetResolution (Time::NS);

LogComponentEnable ("UdpEchoClientApplication", LOG_LEVEL_INFO);

LogComponentEnable ("UdpEchoServerApplication", LOG_LEVEL_INFO);

LogComponentEnable ("FirstScriptExample", LOG_LEVEL_INFO);

NS_LOG_INFO("Create Topology");

……

}

结果截图:

v 命令行参数

在main函数里面可以调用函数Parse。

int

main (int argc, char *argv[])

{

……

CommandLine cmd;

cmd.Parse(argc,argv);

……

}

其中CommandLine类写着:

--PrintHelp:打印帮助信息

--PrintGroups:打印住列表

--PrintTypeIds:打印所有TypeIds

--PrintGroup=[group]:打印所有TypeIds of group

--PrintAttributes=[typeid]:打印所有属性

--PrintGlobals:打印全局列表

然后运行

./waf --run "first --PrintAttributes=ns3::PointToPointNetDevice"

可以看到属性的结果:

v 挂钩自己的变量

用户可以添加自己的变量,修改first.cc代码:

int

main (int argc, char *argv[])

{

……

uint32_t nPackets=1;

CommandLine cmd;

cmd.AddValue("nPackets","Number of packet to echo", nPackets);//使得变量nPackets可以在命令行修改的。参数、帮助、值

cmd.Parse(argc,argv);//一定在上面三个函数之后

……

//echoClient.SetAttribute ("MaxPackets", UintegerValue (1));

echoClient.SetAttribute ("MaxPackets", UintegerValue (nPackets));

……

}

输入./waf --run "first --PrintHelp"可以看到用户定义的参数:--nPackets: Number of packet to echo [1]

执行下面命令:./waf --run "first --nPackets=2"

可以看到发送两个包。

2、Tracing系统

该系统用于存储大量信息。包含三个基本概念:Tracing Sources、Tracing Sink以及将前面二者连接在一起的机制。下面两种是封装好的Helper类:

v ASCII Tracing

它是以ASCII格式的信息输出的。在Simulator::Run()代码前添加如下代码就可以:

AsciiTraceHelper ascii;

pointToPoint.EnableAsciiAll(ascii.CreateFileStream("myfirst.tr"));

Simulator::Run ();

v PCAP Tracing

它是以PCAP格式的信息输出的。在Simulator::Run()代码前添加如下代码就可以:

pointToPoint.EnablePcapAll("myfirst");

Simulator::Run ();

6、ns-3数据跟踪

时间: 2024-08-08 03:19:34

6、ns-3数据跟踪的相关文章

SQL Server 之 - 变更数据跟踪 1

某些应用程序(比如数据仓库系统)十分依赖于源系统的变更数据识别功能,它们期望源系统能够提供一种高效低识别变更数据的能力.在SQLServer 2008之前并没有原生态的解决方案,开发人员不得不通过使用触发器.时间戳以及额外的表来实现该功能,在SQL Server2008之后,数据库提供了两种原生态的特性:Change Tracking(变更追踪)及Change Data Capture(变更数据捕获). 功能对比 简单来讲,所谓变更可以简化为两个问题:①变更有没有发生以及变更的类型:②数据从什么

SAP ST05数据跟踪使用

有时我们想知道SAP操作,对数据库中的那些表进行的增删查改. 可以使用ST05跟踪SQL语句. ST05功能界面如下: 1---激活跟踪 2---结束跟踪 3---显示跟踪结果. 如果想跟踪SQL语句,先激活跟踪,然后运行实际业务,运行完后,结束跟踪.在显示跟踪结果.

关于前端mvc或mvvm框架数据跟踪变化实现dom双向绑定的原理

一:最早的框架如backbone,实现对数据的变化监测是通过设置数据模型api. 比如其model对象管理的是数据,而修改这些数据就是通过固定的方法(set)来触发事件从而更新dom, <p id="dom">1</p> var Model={ a:1, b:2 } var trigger=function(value){ document.getElementById('dom').html(value) //更新dom操作 } var set=functio

SQL Server 2008新增的变更数据捕获和更改跟踪

本文主要介绍SQL Server中记录数据变更的四个方法:触发器.Output子句.SQL Server 2008中新增的变更数据捕获(Change Data Capture 即CDC)功能.同步更改跟踪.其中后两个为SQL Server 2008所新增. 一.触发器 在SQL Server的早期版本中,如果要记录某个表或视图的Insert/Update/Delete操作,我们可以借助触发器(Trigger)(http://msdn.microsoft.com/zh-cn/library/ms1

如何通过数据指导产品优化

设计师生来就是要解决问题的.那如何才能更好.更高效地解决问题?首先要求我们能发现问题,数据分析就是一种常用的发现问题的手段.通过数据定位问题,然后用设计方案来尝试解决问题,之后再用量化的数据指标来评估问题是否解决了,解决了多少.通过迭代优化,问题就能够得到较好解决. 本文结合自己在在登录产品的体验优化中积累的一些实战经验,重现过程中的设计点滴,有效果明显的方案,也有效果不明显的优化尝试,最后将总结一些通用的设计思路. 登录失败的原因在哪? 登录框一般是个较简单的界面,它包括:账户名和登录密码.校

大数据时代新闻采编人员职业能力培训

原文  http://datameng.com/info/2014/03/big-data-xinwen-caibian/ 据统计,到2013年,全世界储存的信息如果记录在光盘上,再把这些光盘叠加起来,高度等于从地球到月球的距离.美国互联网数据中心指出,目前世界 上90%以上的数据是近几年才产生的.互联网上的数据每年将增加50%,每两年翻一番.因此有学者认为,人类进入了大数据时代.一般意义上,大数据是指无 法在可容忍的时间内用传统IT技术和软硬件工具对其进行感知.获取.管理.处理和服务的数据集合

跟踪Android客户端中文(偶然性)乱码

软件运行环境: 服务端: ubuntu 14.04.2 server 客户端: Android pad 数据跟踪工具: 无线网卡 + Wireshark + notepad ++ --------------------------------------- 当客户端和服务器进行数据交互的过程中,测试过程中发现数据异常,但是在彼此程序猿的通过打印输出数据方式跟踪数据的异常,而且在彼此都肯定数据没问题的时候,是非常蛋疼的,到底是谁的错?那么我们就从数据的传输介质中接受端或者发送端入口处截取数据分析

Dapper,大规模分布式系统的跟踪系统--转

原文地址:http://bigbully.github.io/Dapper-translation/ 概述 当代的互联网的服务,通常都是用复杂的.大规模分布式集群来实现的.互联网应用构建在不同的软件模块集上,这些软件模块,有可能是由不同的团队开发.可能使用不同的编程语言来实现.有可能布在了几千台服务器,横跨多个不同的数据中心.因此,就需要一些可以帮助理解系统行为.用于分析性能问题的工具. Dapper--Google生产环境下的分布式跟踪系统,应运而生.那么我们就来介绍一个大规模集群的跟踪系统,

记录一次误删数据库指定数据----------&gt;血的教训

本来要进行select的查询,结果不小心误执行了delete的命令,导致unitID=100004的数据全部被删除 这下尴尬了 这可是线上的数据库啊 , 赶紧去查看binlog日志 期望能恢复 万幸公司数据库用的是阿里云的RDS数据库 自带数据跟踪然后输入任务名称 当时误操作的时间段 切记: 必须在60分钟以内进行操作 搜索日志时可以指定字段 然后 选择查看详情 查看所有被误删操作的详情后 以下图表中 变更语句 是误操作执行过的命令, 然后最下面会有回滚语句,如果有多个被删的详情列表 需要全部将