首页 > 代码库 > Tracing 系统

Tracing 系统

1. ns-3是基于C++语言开发的软件,保留了C++中标准的输入输出机制:std::cin<<;std::cout<<;

但是,从长远可用性来看,使用这种方式不是非常令人满意。因为随着自己在代码中增加更多的输出语句,处理大量的输出信息非常复杂。

2. 日志系统Logging也可以用于输出信息。它和C++标准输入输出的不同在于,通过Logging系统可以控制输出等级。

3. 无论是标准C++输出还是Logging系统输出,都仅仅适合非常小的程序。

因为当程序不断增加时,打印语句和控制输出格式将变得非常艰难,即使能够得到想要的输出结果,那么分析这么多条复杂的信息也将变得没有可能。(亲身体验,大部分时间都用与整理分析数据了。)

所以,ns-3需要提供一种机制,这种机制允许用户进入系统内核来获取所需要的信息,前提是不改变内核代码和不用再次编译。更好的方式是,当用户感兴趣的信息发生改变时,系统通知用户对信息进行处理,而不是深入到系统内核。

4. 下面介绍的Tracing系统机制就是ns-3提供的用来解决上述问题的一种方法。

ns-3 Tracing系统大体分为3个部分:Tracing Sources ,Tracing Sinks和将Tracing Sources和Tracing Sinks关联在一起的方法。

Tracing Sources是一个实体,它可以用来标记仿真中发生的时间,也可以提供一个访问底层数据的方法。例如,当一个网络设备或网卡收到一个网络分组时 ,Tracing Source可以指示并提供一个途径将分组的内容传送给对该分组感兴趣的Tracing Sink。还有,Tracing Sources还可以在感兴趣的状态发生变化时给出相应的指示。例如,TCP网络协议模块中的拥塞窗口发生变化时,Tracing Sources会给出指示。

Tracing Sources本身是起不到任何作用的,只有当它和一段有实际功能的代码相关联时才有意义,这段代码就是使用Tracing Sources提供的信息来做相关事务。使用或者说消费Tracing Sources提供信息的实体就称为Tracing Sink。换句话说,Tracing Sources提供信息,而Tracing Sink消费信息,它们2个之间的关系可以比喻为生产者和消费者之间的关系。一个Tracing Sources生产的信息可以没有Tracing Sink消费,也可以一个或多个Tracing Sink消费,它们之间是一对多的关系。所以,单独使用Tracing Sources或者单独使用Tracing Sink是没有任何意义可言的,而针对不同用户给出的Tracing Sink来处理Tracing Sources产生的信息时得出的结果也是不同的,也就是说用户可以根据自己的需求给出不同的Tracing Sink。

Tracing 系统