Re: [babel] RFT: Babel RTT extension in Bird

Toke Høiland-Jørgensen <toke@toke.dk> Sat, 23 April 2022 21:30 UTC

Return-Path: <toke@toke.dk>
X-Original-To: babel@ietfa.amsl.com
Delivered-To: babel@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 00D7B3A1536 for <babel@ietfa.amsl.com>; Sat, 23 Apr 2022 14:30:35 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.109
X-Spam-Level:
X-Spam-Status: No, score=-2.109 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01, URIBL_BLOCKED=0.001] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key) header.d=toke.dk
Received: from mail.ietf.org ([4.31.198.44]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id YQIGLMZKOdL7 for <babel@ietfa.amsl.com>; Sat, 23 Apr 2022 14:30:30 -0700 (PDT)
Received: from mail.toke.dk (mail.toke.dk [IPv6:2a0c:4d80:42:2001::664]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id CED8D3A1532 for <babel@ietf.org>; Sat, 23 Apr 2022 14:30:28 -0700 (PDT)
From: Toke Høiland-Jørgensen <toke@toke.dk>
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=toke.dk; s=20161023; t=1650749424; bh=6rb7xPOuITKg7iurHI+NkBcYKkQ9rIkhAiauUOZZOfA=; h=From:To:Cc:Subject:In-Reply-To:References:Date:From; b=fmVXegR8MXB6JJ/q34IewfEX2thicC8Rl4k87i8CEwl5PEledYYRQRyaF0v8m7IOO vuEkOrc/2PDNltO3BjiONK2wWtZRV7RcGjjRsuu9xfydKhej0AZXkypq+9k67972sO BE1d2ZlkYIGjER6ZHhf5ZrRx5VspzEXvHAMumETPFW6i/tJTnMaHlvbiPaAdxs4k7e lT/rjEbg77KbNqilkhCoWRk6a4iWmZ3efPT3dxTckiEjgZONy4OKBlUYLsyIaxgs24 EMz0xTIFqvbV3eUjJkeGD3GxRlst9URcXPmRhuO8D6fzgYLTc+hKNf8IH1lV4Yq/T7 ViUpS79eBDPMw==
To: Juliusz Chroboczek <jch@irif.fr>, Ondrej Zajicek <santiago@crfreenet.org>
Cc: bird-users@network.cz, babel-users@alioth-lists.debian.net, babel@ietf.org
In-Reply-To: <87tualat7j.wl-jch@irif.fr>
References: <87y1zyf15t.fsf@toke.dk> <YmLLO1sZMpg+SM/N@feanor.crfreenet.org> <87tualat7j.wl-jch@irif.fr>
Date: Sat, 23 Apr 2022 23:30:24 +0200
X-Clacks-Overhead: GNU Terry Pratchett
Message-ID: <871qxncwsv.fsf@toke.dk>
MIME-Version: 1.0
Content-Type: text/plain
Archived-At: <https://mailarchive.ietf.org/arch/msg/babel/tcmiohxm6pFK6VzVJgvTUu7egHQ>
Subject: Re: [babel] RFT: Babel RTT extension in Bird
X-BeenThere: babel@ietf.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: "A list for discussion of the Babel Routing Protocol." <babel.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/babel>, <mailto:babel-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/babel/>
List-Post: <mailto:babel@ietf.org>
List-Help: <mailto:babel-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/babel>, <mailto:babel-request@ietf.org?subject=subscribe>
X-List-Received-Date: Sat, 23 Apr 2022 21:30:35 -0000

Juliusz Chroboczek <jch@irif.fr> writes:

>> That seems like an interesting idea, especially for things like
>> automatically switching between multiple Wireguard tunnel concentrators.
>
> That's exactly the application that it was designed for.  For some
> background, please see
>
>   https://arxiv.org/pdf/1403.3488.pdf
>
> (I never managed to publish this paper, and rightly so -- it's not a very
> good paper, since I don't fully understand why the smoothing+hysteresis
> works as well as it does.)

I'd be delighted to hear the (real?) explanation for that!

>> Did not yet checked the code how smoothing is done here, but seems to me
>> that considering:
>> 
>> 1) There is baseline RTT from distance / speed of propagation
>> 2) There is one-side noise from congestion
>> 3) The metric should be based on 1) and suppress effects of 2)
>> 
>> It would make sense to use something like running minimum instead of
>> running average.
>
> Yes, it would make sense.  The reason why we calculate an exponential
> average is that it is cheaper to compute, and works quite well in
> practice.  The goal here is not to compute an accurate metric, it is to
> reliably choose the best route: the metric only needs to be accurate
> enough to ensure that the right route is being picked.

Juliusz, I also seem to recall you mentioning to me at some point that
the RTT increasing due to congestion actually makes the RTT extension
useful as a way of picking the least-congested route as well (as a kind
of unintentional side effect due to exactly what Ondrej mentioned
above). Or am I misremembering?

> I agree that we should compare with a running average.  I might do so if
> I ever decide to revive that paper.

I assume you meant 'running minimum' here?

>> There is one thing that is IMHO a bit strange, type wired/wireless/tunnel
>> option is just an indirect way of set k-from-j / ETX / RTT-based cost
>> algorithm.

Note that the RTT-based cost algorithm doesn't replace the ETX/k-from-j,
it just adds an additional configurable penalty on top.

>> But RTT-based cost have applications that are unrelated to tunnels.
>
> I'd be very interested if you could give me some examples, in case
> I decide to revive the paper above.
>
>> Seems to me that it would make sense to have a direct option to set the
>> cost algorithm (and just that), while the 'type' option would provide
>> reasonable default for that (and possibly other options).
>
> In babeld (the standalone implementation of Babel, the interface type is
> a macro that sets both the base metric and the metric algorithm; the two
> can be set separately if desired by the user.  However, we have found that
> the "interface type" abstraction is easier to get right for our users.

I implemented the RTT extension the same way in Bird: The 'tunnel'
interface type just sets a default RTT cost or 96 (and is otherwise
identical to 'wired'), and there's a separate config option to
explicitly set the RTT cost. In fact, I just mirrored all the babeld
config options related to RTT, just adapted to Bird syntax :)

However, there is no explicit config option in Bird for the metric
computation algorithm (i.e., ETX/k-from-j). I guess we should add one :)

BTW, I'm also planning to add some infrastructure to Bird to
automatically guess the interface type, and have Babel use that to set a
reasonable default. I believe babeld has something similar (although I
seem to recall something about the wireless detection having bitrotted
slightly? Or was that only the channel information?).

-Toke