本文整理下The ONE仿真器有关消息传递的Report,包括MessageDeliveryReportDeliveredMessagesReportMessageDelayReportFloatingMessageReport

1. MessageDeliveryReport

MessageDeliveryReport动态记录创建和成功投递的消息数目(当有消息被创建或者被投递时触发),每条记录由时间、消息创建数目、消息传递数目、投递率组成,举例如下:

# time  created  delivered  delivered/created
32.0000  1  0 0.0000
58.0000  2  0 0.0000
84.0000  3  0 0.0000
112.0000 4  0 0.0000
144.0000 5  0 0.0000
170.0000 6  0 0.0000
203.0000 7  0 0.0000
233.0000 8  0 0.0000
265.0000 9  0 0.0000
291.0000 10 0 0.0000
320.0000 11 0 0.0000
345.0000 12 0 0.0000
345.0000 12 1 0.0833
350.0000 12 2 0.1667

可见,在350s12个消息被创建,2个消息被成功投递,此刻的投递率delivery_prob0.1667

2. DeliveredMessagesReport

DeliveredMessagesReport记录所有成功投递消息的详细情况,包括时间、消息ID、消息大小、跳数、被投递的时刻、消息源节点、消息目的节点、剩余的TTL、是否需要response、消息路径。举例如下:

# time  ID  size  hopcount  deliveryTime  fromHost  toHost  remainingTtl  isResponse  path
3241.0000 M57457 1012 4 3241.0000 n19 n17 n/a N n19->n0->n18->n2->n17
3243.0000 M53777 1421 4 3243.0000 n19 n17 n/a N n19->n0->n18->n2->n17
3244.0000 M67390 1774 4 3244.0000 n19 n17 n/a N n19->n0->n18->n2->n17
3246.0000 M57830 1572 4 3246.0000 n19 n17 n/a N n19->n0->n18->n2->n17
3248.0000 M63774 1132 4 3248.0000 n19 n17 n/a N n19->n0->n18->n2->n17
3250.0000 M67895 1103 4 3250.0000 n19 n17 n/a N n19->n0->n18->n2->n17
3251.0000 M39196 1818 4 3251.0000 n19 n17 n/a N n19->n0->n18->n2->n17
3252.0000 M66151 1751 4 3252.0000 n19 n17 n/a N n19->n0->n18->n2->n17
3255.0000 M59355 1771 4 3255.0000 n19 n17 n/a N n19->n0->n18->n2->n17
3256.0000 M56781 1937 4 3256.0000 n19 n17 n/a N n19->n0->n18->n2->n17
3257.0000 M41502 1879 4 3257.0000 n19 n17 n/a N n19->n0->n18->n2->n17
3258.0000 M66034 1311 4 3258.0000 n19 n17 n/a N n19->n0->n18->n2->n17

上例remainingTtln/a是因为msgTtl设成了无限长(即-1)。

3. MessageDelayReport

MessageDelayReport还没有用到,先不折腾了。

Reports delivered messages' delays (one line per delivered message) and cumulative delivery probability sorted by message delays.

# messageDelay  cumulativeProbability
1.0000 0.0001
1.0000 0.0001
1.0000 0.0002
1.0000 0.0003
1.0000 0.0003
1.0000 0.0004
1.0000 0.0005
1.0000 0.0005
1.0000 0.0006
1.0000 0.0007
1.0000 0.0008

MessageDelayReport是在仿真结束再计算的,如下:

public void done() {
    if (delays.size() == 0) {
        write("# no messages delivered in sim time "+format(getSimTime()));
        super.done();
        return;
    }
    double cumProb = 0; // cumulative probability

    java.util.Collections.sort(delays);

    for (int i=0; i < delays.size(); i++) {
        cumProb += 1.0/nrofCreated;
        write(format(delays.get(i)) + " " + format(cumProb));
    }
    super.done();
}

4. FloatingMessageReport

FloatingMessageReport记录所有消息事件的详细信息,包括CREATESTARTREPLICATEDELETEABORT(没包括REMOVE?)。举例如下:

# messages: event-type org-node (loc-x,loc-y) (anchor-x,anchor-y) r=<core> a=<availability> ttl size [node-snd ( loc-x loc-y ) [node-rcv (     loc-x loc-y)]]
32.0000 CREATE      p32 M1 32.0000 null null r=null a=null null 8834 null
58.0000 CREATE      p16 M2 58.0000 null null r=null a=null null 7273 null
58.0000 START       p16 M2 58.0000 null null r=null a=null null 7273 p16 (0.00,1.00) p18 (0.00,1.00) null [1440]
60.0000 REPLICATE   p16 M2 58.0000 null null r=null a=null null 7273 p16 (0.00,1.00) p18 (0.00,1.00) null [1439]
60.0000 START       p16 M2 58.0000 null null r=null a=null null 7273 p18 (0.00,1.00) p71 (0.00,1.00) null [1439]
65.0000 REPLICATE   p16 M2 58.0000 null null r=null a=null null 7273 p18 (0.00,1.00) p71 (0.00,1.00) null [1439]
84.0000 CREATE      p21 M3 84.0000 null null r=null a=null null 8122 null

值得注意的是,FloatingMessageReport生成的文件多半会很大。如果The ONE现有的消息报告无法满足你,那么得到FloatingMessageReport,再写个脚本分析,至少是个办法(当然,也可以自己创建一个Report)。当然修改FloatingMessageReport.java也不失是个办法。

本文系Spark & Shine原创,转载需注明出处本文最近一次修改时间 2022-03-27 13:27

results matching ""

    No results matching ""