Re: [Idr] BGP Message level ACKs

Jeffrey Haas <jhaas@pfrc.org> Fri, 10 March 2023 13:39 UTC

Return-Path: <jhaas@pfrc.org>
X-Original-To: idr@ietfa.amsl.com
Delivered-To: idr@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 2B5C3C14CEF9 for <idr@ietfa.amsl.com>; Fri, 10 Mar 2023 05:39:06 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.9
X-Spam-Level:
X-Spam-Status: No, score=-1.9 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, RCVD_IN_ZEN_BLOCKED_OPENDNS=0.001, SPF_PASS=-0.001] autolearn=ham autolearn_force=no
Received: from mail.ietf.org ([50.223.129.194]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 4UsT4CdjRvLC for <idr@ietfa.amsl.com>; Fri, 10 Mar 2023 05:39:00 -0800 (PST)
Received: from slice.pfrc.org (slice.pfrc.org [67.207.130.108]) by ietfa.amsl.com (Postfix) with ESMTP id 8A81AC14F5E0 for <idr@ietf.org>; Fri, 10 Mar 2023 05:39:00 -0800 (PST)
Received: from smtpclient.apple (104-10-90-238.lightspeed.livnmi.sbcglobal.net [104.10.90.238]) by slice.pfrc.org (Postfix) with ESMTPSA id A27891E037; Fri, 10 Mar 2023 08:38:59 -0500 (EST)
Content-Type: text/plain; charset="us-ascii"
Mime-Version: 1.0 (Mac OS X Mail 16.0 \(3696.120.41.1.1\))
From: Jeffrey Haas <jhaas@pfrc.org>
In-Reply-To: <ZAsd4oBk+u0t1S3j@diehard.n-r-g.com>
Date: Fri, 10 Mar 2023 08:38:57 -0500
Cc: Robert Raszuk <robert@raszuk.net>, idr@ietf.org
Content-Transfer-Encoding: quoted-printable
Message-Id: <9399FB05-A648-4F1A-B5D1-149EF3034351@pfrc.org>
References: <CA+wi2hMjjPepoPnqUu0aMH4OtkezrC+sEV7YsmO92NnG-8+Q8Q@mail.gmail.com> <CAOj+MMEjBfdVK_uJ_B4CHr5suG0Zf7CSukqywTofkDMbimFEcA@mail.gmail.com> <CA+wi2hO0e5b7R49j9giz0bxF6d1EWddH+rYG7cSjMM4aSri49g@mail.gmail.com> <CAOj+MMH_3nwoyDE7GxNSa+fLPO2VD+SWCiGxmCem0s74-E17Ww@mail.gmail.com> <ZAoIpXq8Z1vKU0g3@diehard.n-r-g.com> <CAOj+MMFQjc0K9dBji+Y2DSkZsuuEwgRxNYee+0pmKOzD9iL9pQ@mail.gmail.com> <alpine.DEB.2.20.2303101028540.2636@uplift.swm.pp.se> <CAOj+MMH9TjNm98p9k-5afGyQD=mxXVf17P2Jd6azhBq5zmdWDw@mail.gmail.com> <alpine.DEB.2.20.2303101205400.2636@uplift.swm.pp.se> <CAOj+MME5NTFf+FZhkNdwLsqbBqPM98_4dL_+a_JeqOviBCCU8Q@mail.gmail.com> <ZAsd4oBk+u0t1S3j@diehard.n-r-g.com>
To: Claudio Jeker <cjeker@diehard.n-r-g.com>
X-Mailer: Apple Mail (2.3696.120.41.1.1)
Archived-At: <https://mailarchive.ietf.org/arch/msg/idr/5qsg3W4yPXYHMwdQ64bV5y3IyE8>
Subject: Re: [Idr] BGP Message level ACKs
X-BeenThere: idr@ietf.org
X-Mailman-Version: 2.1.39
Precedence: list
List-Id: Inter-Domain Routing <idr.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/idr>, <mailto:idr-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/idr/>
List-Post: <mailto:idr@ietf.org>
List-Help: <mailto:idr-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/idr>, <mailto:idr-request@ietf.org?subject=subscribe>
X-List-Received-Date: Fri, 10 Mar 2023 13:39:06 -0000


> On Mar 10, 2023, at 7:09 AM, Claudio Jeker <cjeker@diehard.n-r-g.com> wrote:
> You realize that the output message queue of a BGP process grows to a
> multiple 1000 messages during a full sync. So your suggestion will not
> work. I don't understand this resistance against a new timer.
> Every BGP implementation has some form of timer API implemented and
> extending it should not be that complicated.
> 
> There is a reason why progress is measured as any byte sent during a
> timeperiod. As I exlained already the goal here is not to have something as
> precise as the HoldTimer which is re-triggered by any message. The goal is
> to have something in place for the uncommon case that a system still sends
> messages but refuses to accept messages. It is extra conservative to not
> trigger too early (since that should happen via HoldTimer) or even worse
> trigger when systems get busy because of larger network changes.

Speaking as an implementor, it's not the new timers I find worrisome.  The general idea is largely fine.

I have some lingering concerns about some people having an expectation that sluggish draining of peers will be caught by this mechanism when it won't.  One of the common pathologies that is seen, especially in the face of unidirectional packet loss, is the peer drains but very slowly.  But it will generally drain to the level of permitting the next PDU to be enqueued before the sendholdtimer is likely to expire.

When troubleshooting such issues, typically we'll look at the following bits of state on both sides of the connection:
1. BGP queue levels.
2. BGP packet sent counters (also able to be monitored via SNMP)

These two, observed over time gives one a reasonable BGP PDU/sec metric.  The first item, if it doesn't shrink as evaluated in the SNMP-sense as a gauge, also tells you that there is sufficient churn in the network whether you'll eventually catch up or not.

One clear desire for the sendholdtimer is to catch sessions that block and linger in that state making no progress.  I think it works fine in that case.

The TCP timeout option is potentially useful tool on top of this, specifically in the case of zero-windowing, to detect issues at the TCP layer that may be causing some of the problems.  It is fairly observed that TCP keepalives can help as well, as long as you're comfortable with the behavior in a lossy network situation.  

I have a concern that some operators may want to use the sendholdtimer to catch sluggish draining peers rather than total blockage.  They'll thus turn the time down enough that normal blocked queue behaviors during large convergence events trigger the feature and drop the session.

-- Jeff