Re: [6tsch] Rank rounding error, churn and hysteresis [was Zero Objective Function discussion]

Xavier Vilajosana Guillen <xvilajosana@eecs.berkeley.edu> Thu, 12 September 2013 13:34 UTC

Return-Path: <xvilajosana@berkeley.edu>
X-Original-To: 6tsch@ietfa.amsl.com
Delivered-To: 6tsch@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id AF7AF11E80EA for <6tsch@ietfa.amsl.com>; Thu, 12 Sep 2013 06:34:17 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.576
X-Spam-Level:
X-Spam-Status: No, score=-1.576 tagged_above=-999 required=5 tests=[AWL=0.400, BAYES_00=-2.599, FM_FORGED_GMAIL=0.622, HTML_MESSAGE=0.001]
Received: from mail.ietf.org ([12.22.58.30]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id J4T9EXTvhV9r for <6tsch@ietfa.amsl.com>; Thu, 12 Sep 2013 06:34:13 -0700 (PDT)
Received: from mail-pd0-f174.google.com (mail-pd0-f174.google.com [209.85.192.174]) by ietfa.amsl.com (Postfix) with ESMTP id 118A011E8166 for <6tsch@ietf.org>; Thu, 12 Sep 2013 06:34:10 -0700 (PDT)
Received: by mail-pd0-f174.google.com with SMTP id y13so10661404pdi.5 for <6tsch@ietf.org>; Thu, 12 Sep 2013 06:34:09 -0700 (PDT)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:reply-to:in-reply-to:references :date:message-id:subject:from:to:cc:content-type; bh=OrLyN/VMApEAYeA41A/chQ4lV4gLe6RH6bXD7EZjCig=; b=g/qhT++WaXPAhqHnKFL7w8q2IF/TqMWAnJ1R0ATenGa7FBz+NuVuFyNxgY5TF1ffc1 xldj//hJsRA1wuhP0VfOAAV896/Llaj1RKMIHn+8l9itt1Tb9LavCUvWMT/D0l9BOYv7 p1mjKt3uQkIHgY0FpuC3mD5EFK+0PnIjt3dXSoi54nrZXEmGzKP+hDtVhtWsU369JOaW KhNrFfp7k67Ks6KSA8T9QBS6eJHXiod64uy4v9WgD7M0/JV9fy6Rbvkm6WE85tJOc6Xt 3ifpz3+Cd7DLMVg656c1my5B+xD60DNOu/zjbv9t7PN2WU6er7Bvi9huKeCNeRPSJ2XO qQcg==
X-Gm-Message-State: ALoCoQkPxhZP6GkFzwR2Ymfaloz1jFoTdc5E++eEXmoTsQfhB+3ez2DYbEBgNvBEn1hXi52dlslU
MIME-Version: 1.0
X-Received: by 10.66.162.136 with SMTP id ya8mr9477313pab.110.1378992849681; Thu, 12 Sep 2013 06:34:09 -0700 (PDT)
Received: by 10.70.34.44 with HTTP; Thu, 12 Sep 2013 06:34:09 -0700 (PDT)
In-Reply-To: <E045AECD98228444A58C61C200AE1BD84147249C@xmb-rcd-x01.cisco.com>
References: <E045AECD98228444A58C61C200AE1BD84147249C@xmb-rcd-x01.cisco.com>
Date: Thu, 12 Sep 2013 06:34:09 -0700
Message-ID: <CALEMV4ZM8287mXedxmECeOXTCFVv1d6gjihR3cB1CF4R37X39Q@mail.gmail.com>
From: Xavier Vilajosana Guillen <xvilajosana@eecs.berkeley.edu>
To: "Pascal Thubert (pthubert)" <pthubert@cisco.com>
Content-Type: multipart/alternative; boundary="047d7b86e424f4133104e62fcadd"
Cc: Thomas Watteyne <watteyne@eecs.berkeley.edu>, 6TSCH <6tsch@ietf.org>, Qin Wang <qinwang@berkeley.edu>
Subject: Re: [6tsch] Rank rounding error, churn and hysteresis [was Zero Objective Function discussion]
X-BeenThere: 6tsch@ietf.org
X-Mailman-Version: 2.1.12
Precedence: list
Reply-To: xvilajosana@eecs.berkeley.edu
List-Id: "Discuss link layer model for Deterministic IPv6 over the TSCH mode of IEEE 802.15.4e, and impacts on RPL and 6LoWPAN such as resource allocation" <6tsch.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/6tsch>, <mailto:6tsch-request@ietf.org?subject=unsubscribe>
List-Archive: <http://www.ietf.org/mail-archive/web/6tsch>
List-Post: <mailto:6tsch@ietf.org>
List-Help: <mailto:6tsch-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/6tsch>, <mailto:6tsch-request@ietf.org?subject=subscribe>
X-List-Received-Date: Thu, 12 Sep 2013 13:34:17 -0000

Hi Pascal,

I agree with you. In OpenWSN we have a stability counter that prevents
changing the parent in case of little sudden variations, (avoiding
hysteresis) and a mechanism to smooth rank increases, in case a node
receives suddenly a very big rank from its parent.

I also agree that little variations won't have an important effect. If you
see here a problem we can try to simulate some scenarios and see what
happens.

cheers!
Xavi




On Thu, Sep 12, 2013 at 2:37 AM, Pascal Thubert (pthubert) <
pthubert@cisco.com> wrote:

>  Hello Qin:****
>
> ** **
>
> In this particular case, a computation of DAGRank(rank) of 7 will prevent
> this node from attaching to other nodes that are also at 7, and will
> encourage more other nodes to attach to this. The end to end Rank
> calculation for children is only slightly affected since the 2 byte rank is
> used for the total rank computation.****
>
> ** **
>
> I think that the rounding errors are part of the errors, just like the
> stats of transmissions may vary.****
>
> Depending on the representation of ETX in memory, you might also have
> system that round to 1 decimal and others to 2 decimals and the same
> calculation may still create a similar effect.****
>
> ** **
>
> Is that a big deal? Well, Considering the variations on the ETX
> computation I do not think that this makes a lot of difference in the run
> time.****
>
> ** **
>
> What is more critical is to use a good hysteresis so as to avoid jumping
> over the integral boundary of DAGRank(rank) all the time.****
>
> ** **
>
> Both RFC 6552 and 6719 recommend you to do that, with RFC 6552
> dereferencing RFC 6719 that recommends to use a value boundary on Rank
> before reparenting.****
>
> http://tools.ietf.org/html/rfc6719#section-3.2.2 :****
>
> ** **
>
>    3.  If the smallest path cost for paths through the candidate****
>
>        neighbors is smaller than cur_min_path_cost by less than****
>
>        PARENT_SWITCH_THRESHOLD, the node MAY continue to use the current**
> **
>
>        preferred parent.  This is the hysteresis component of MRHOF.****
>
> ** **
>
> RFC 6552 recommends by default to follow that guidance in
> http://tools.ietf.org/html/rfc6552#section-4.1 ****
>
> ** **
>
>                                                            it is thus****
>
>    RECOMMENDED to base the computation of the step_of_rank on dynamic****
>
>    link properties such as the expected transmission count (ETX) metric***
> *
>
>    as introduced in [DeCouto03<http://tools.ietf.org/html/rfc6552#ref-DeCouto03>]
> and discussed in [RFC6551 <http://tools.ietf.org/html/rfc6551>].  "Minimum
> ****
>
>    Rank Objective Function with Hysteresis" [HYSTERESIS<http://tools.ietf.org/html/rfc6552#ref-HYSTERESIS>]
> provides****
>
>    guidance on how link cost can be computed and on how hysteresis can****
>
>    improve Rank stability.****
>
> ** **
>
> Additional tuning or methods exist to increase stability. We can start
> some work on that if we find that MRHOF’s method is not sufficient in our
> case.****
>
> ** **
>
> One method (Cisco IPR there) consists in hiding limited variations of the
> Rank to the children (around the last advertised 2 bytes value) until: ***
> *
>
> 1) a delta threshold is reached in the step of rank with parent (one-hop
> hysteresis)****
>
> or ****
>
> 2) Rank has to be recomputed because of the parent (the parent changes or
> the Rank of the parent changes)****
>
> ** **
>
> This method creates a laser effect by which a number of new values of Rank
> a recomputed and advertised as a single wave, whereby every node affected
> by the change re-centers its rank value to its current moving average,
> reducing the chances to hit condition 2) in the near future.****
>
> ** **
>
> What do you think?****
>
> ** **
>
> Pascal****
>
> ** **
>
> *From:* Qin Wang [mailto:qinwang@berkeley.edu]
> *Sent:* mercredi 11 septembre 2013 23:58
> *To:* Pascal Thubert (pthubert)
> *Cc:* xvilajosana@eecs.berkeley.edu; Thomas Watteyne; 6TSCH
> *Subject:* Re: [6tsch] Zero Objective Function discussion****
>
> ** **
>
> Hi Pascal,****
>
> ** **
>
> I agree with your calculation. But, I have a small question.****
>
> ** **
>
> If you calculate with rank_increase=(2*xmit/ack)*256, instead
> of rank_increase=(512*xmit/ack), then, you will get the result as follows.
> ****
>
> ** **
>
> r(1)=r(0)+2.66*256 = 2.66*256               => DAGRank(rank) = 2****
>
> r(2)=r(1)+2.66*256= 5.32*256                 => DAGRank(rank) = 5****
>
> r(3)=r(2)+2.66*256=7.98*256                  => DAGRank(rank) = 7****
>
> r(4)=r(3)+2.66*256=10.64*256                => DAGRank(rank) = 10****
>
> r(5)=r(4)+2.66*256=13.30*256                 => DAGRank(rank) = 13****
>
> You can see r(3) is different from that in your calculation. Obviously,
> the difference comes from different implementation. In another word,
> following same OF, different implementation may lead to different Rank
> value. Then, my question is if it is Ok while the motes from different
> vendors work together in a DAG.****
>
> Please point out if I'm wrong.****
>
> Thanks****
>
> Qin****
>
> ** **
>
> ** **
>
> ** **
>
> ** **
>
>  ****
>
> ** **
>
> On Wed, Sep 11, 2013 at 3:08 AM, Pascal Thubert (pthubert) <
> pthubert@cisco.com> wrote:****
>
> Hello Xavi:****
>
>  ****
>
> Great!****
>
>  ****
>
> I’d add the following:****
>
>  ****
>
> RFC 6550    3.5.1 <http://tools.ietf.org/html/rfc6550#section-3.5.1>. Rank Comparison (DAGRank())has:****
>
> “****
>
> When an Objective Function computes Rank, the Objective Function****
>
>    operates on the entire (i.e., 16-bit) Rank quantity.  When Rank is****
>
>    compared, e.g., for determination of parent relationships or loop****
>
>    detection, the integer portion of the Rank is to be used.  The****
>
>    integer portion of the Rank is computed by the DAGRank() macro as****
>
>    follows, where floor(x) is the function that evaluates to the****
>
>    greatest integer less than or equal to x:****
>
>  ****
>
>               DAGRank(rank) = floor(rank/MinHopRankIncrease)****
>
>  ****
>
>    For example, if a 16-bit Rank quantity is decimal 27, and the****
>
>    MinHopRankIncrease is decimal 16, then DAGRank(27) = floor(1.6875) =****
>
>    1.  The integer part of the Rank is 1 and the fractional part is****
>
>    11/16.****
>
>  ****
>
> “****
>
> DAGRank(rank) is what we expect to place in the Flow label and the join
> priority.****
>
> In our case:****
>
>  ****
>
> r(1)=r(0)+rank_increase = 0+683               => DAGRank(rank) = 2****
>
> r(2)=r(1)+683=1366                                         =>
> DAGRank(rank) = 5****
>
> r(3)=r(2)+683=2049                                         =>
> DAGRank(rank) = 8****
>
> r(4)=r(3)+683=2732                                         =>
> DAGRank(rank) = 10****
>
> r(5)=r(4)+683=3415                                         =>
> DAGRank(rank) = 13****
>
>  ****
>
> We see that the DAGRank() always increases at least by one. This is the
> desired property so as to ensure that we can detect loop with just one
> octet in the flow label.****
>
> Note that the real 2 octets Rank does not lose the rounding info since the
> DIP always passes 2 octets.****
>
>  ****
>
> Cheers,****
>
>  ****
>
> Pascal****
>
>  ****
>
> *From:* Xavier Vilajosana Guillen [mailto:xvilajosana@eecs.berkeley.edu]
> *Sent:* mardi 10 septembre 2013 19:53
> *To:* Pascal Thubert (pthubert)
> *Cc:* Thomas Watteyne; 6TSCH
> *Subject:* Re: [6tsch] Zero Objective Function discussion****
>
>  ****
>
> Hi all,
>
> after some study I agree that we can use the RFC6552 in the minimal 6TiSCH
> configuration. I would like to call for approval or more input from others
> before I consolidate the text in the draft.
>
> I put here an example following Pascal suggestion:
>
> Given
>
> Rf = 1
> Sp = 2* ETX
> Sr = 0
> minHopRankIncrease = 256 (default in RPL)****
>
> ETX=(xmit/ack)****
>
>  ****
>
> r(n) = r(p) + rank_increase
> rank_increase= (Rf*Sp + Sr) * minHopRankIncrease ****
>
> rank_increase=(512*xmit/ack)
>
>
> if we take 5 hops (95 are supported) network and r(0)=0 and xmit=100 and
> ack=75 for all nodes
>
> r(1)=r(0)+rank_increase = 0+683 with f=0
> r(2)=r(1)+683=1366 with f=1
> r(3)=r(2)+683=2049 with f=2
> r(4)=r(3)+683=2732 with f=2
> r(5)=r(4)+683=3415 with f=3
> ...
> etc...
>
> so f is monotonically increasing and the rank function enables more than
> enough hops.****
>
> Please provide feedback.****
>
> cheers!
> Xavi****
>
>  ****
>
>
> _______________________________________________
> 6tsch mailing list
> 6tsch@ietf.org
> https://www.ietf.org/mailman/listinfo/6tsch****
>
> ** **
>