本文对消息创建报告CreatedMessagesReport进行统计,给出创建消息的分布图。
目录
1. CreatedMessagesReport
CreatedMessagesReport用于记录每个新创建消息的详细信息,其格式如下:
# time ID size fromHost toHost TTL isResponse
32.0000 M1 1834 n32 n9 2 N
58.0000 M2 1273 n16 n52 2 N
84.0000 M3 1122 n21 n9 2 N
112.0000 M4 1257 n40 n52 2 N
144.0000 M5 1671 n58 n38 2 N
2. 新创建消息分布
关于消息事件产生器原理性东西,请参考之前博文《The ONE使用笔记:消息事件产生器MessageEventGenerator》。
2.1 配置文件
配置文件相关条目如下:
Scenario.endTime = 432000 Events2.class = [MessageEventGenerator; OneToEachMessageGenerator; OneFromEachMessageGenerator; MessageBurstGenerator] Events2.interval = 25,35 Events2.size = 1k,2k Events2.hosts = 0, 79 Events2.tohosts = 0, 79 Events2.prefix = M
2.2 MessageEventGenerator
共创建了14636个消息。新创建消息的分布如下图,比如,在所有新创建的消息中,节点0产生193个消息(图中绿色叉叉表示),消息的目标节点为0的205个(图中红色加号表示)。蓝线表示均值,可见消息分布并没有集中在均值,这大概是The ONE产生消息时加入了一些限制,如源节点和目的节点不能一样。
2.3 OneToEachMessageGenerator
从字面上理解,OneToEachMessageGenerator似乎是每个interval,随机选取一个源节点,分别产生新消息给tohosts。看了源代码,才发现不是,仿真结果更验证了这点。本例tohosts为[0,79),只有51个源节点产生消息,目的节点只有74个(最多一个消息到达某个目的节点)。注:下图的x轴不完整。
2.4 OneFromEachMessageGenerator
同理,从字面上理解,OneFromEachMessageGenerator似乎是在每个interval,随机从tohosts选择一个目的节点,每个源节点hosts产生一消息给他。看了源代码,才发现不是,仿真结果更验证了这点。本例tohosts为[0,79),74个源节点产生消息(最多产生一个消息),目的节点只有51个。注:下图的x轴不完整。
2.5 MessageBurstGenerator
MessageBurstGenerator跟字面上理解的一样,产生大量消息,每个间隔interval,每个源节点hosts为每个tohosts产生一个消息。产生的CreatedMessagesReport有3+G,太大了,就没绘图。
3551072899 infocom06_432000_MessageBurstGenerator_CreatedMessagesReport.txt 522946 infocom06_432000_MessageEventGenerator_CreatedMessagesReport.txt 2359 infocom06_432000_OneFromEachMessageGenerator_CreatedMessagesReport.txt 2359 infocom06_432000_OneToEachMessageGenerator_CreatedMessagesReport.txt
产生的CreatedMessagesReport部分内容如下,共产生90205518个消息(参考这个等式:432000/30 * 79*78 = 88732800)。
# time ID size fromHost toHost TTL isResponse
32.0000 M1 1514 n0 n1 2 N
...
32.0000 M78 1631 n0 n78 2 N
32.0000 M79 1543 n1 n0 2 N
....
32.0000 M156 1125 n1 n78 2 N
...
431971.0000 M90205516 1146 n78 n75 2 N
431971.0000 M90205517 1862 n78 n76 2 N
431971.0000 M90205518 1678 n78 n77 2 N
3. 脚本文件
写一个简单shell脚本分析CreatedMessagesReport(主要用到命令有:cut, sed, uniq, wc),用gnuplot绘图。
源代码将会在https://github.com/SparkandShine挂出。
赞赏微信赞赏
支付宝赞赏
Spark你好,DTN中,可能存在多个SINK节点的情况,哪一个消息产生事件是源节点不断产生消息,而遇到目的节点集里面某一个消息就算投递成功的呢?简单说目的节点有10个,消息被任意一个节点收到都算成功。
To my best of knowledge, there is not available events generator to meet your requirements in the ONE simulator. You should implement one and router as well.
Good luck.
An alternative solution comes to my mind just now. You generate events with MessageEeventGenerator but yield the detailed report of delivered messages with DeliveredMessagesReport. Your desired result can be obtained by analyzing DeliveredMessagesReport. In such a case, for instance, a node transmits a message to 10 different sinks, notice that there are 10 totally different messages in the network instead of one.
你好,请问shell脚本分析CreatedMessagesReport,在你的github里面的哪个项目下?
抱歉,一直没放上去。刚才才提交到GitHub,如下:
https://github.com/sparkandshine/the_one_simulator/tree/master/reportanalysis/messages_distribution
PS: 代码1年前写的,比较粗糙。
我是初学者,真心谢谢博主的教程!
您好,我想请教一个有关于toHosts和fromHosts的问题。
1. 请问toHosts和fromHosts的值在哪里设置?
2. 另外,当我刚开始使用ONE的时候,运行,图上的众多节点只有两个节点t120和t121,它们的transmitRange用绿色的圈标出来,有一条黑线连住它们两个。 有什么特殊含义? 而当我设置总节点数为40的时候,却没有这么两个节点了。
3.reports目录下,default_scenario_MessageStatsReport中的created, started, relayed, aborted, dropped, removed, delivered是对网络中所有message而言的吗?
(我刚安装并运行ONE的时候,以为是要测标出来的那两个节点之间通信的情况…所以那些结果是指两个节点之间的message)
A1: hosts即你所说的fromHosts,和toHosts参考如下:
Events1.class = MessageEventGenerator
Events1.hosts = 0,126
Events1.toHosts = 0,126
A2: 节点的标识从0开始,节点数40,自然不会有120和121。
A3: 这些指标是针对整个仿真期间统计的。
Pingback: The ONE使用笔记:创建自已的消息事件产生器 | Spark & Shine
Pingback: The ONE使用笔记:目录 | Spark & Shine