Re: qlog, AckFrame, and ack_delay
Damien Neil <dneil@google.com> Tue, 14 November 2023 16:25 UTC
Return-Path: <dneil@google.com>
X-Original-To: quic@ietfa.amsl.com
Delivered-To: quic@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 94342C15152B for <quic@ietfa.amsl.com>; Tue, 14 Nov 2023 08:25:26 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -17.606
X-Spam-Level:
X-Spam-Status: No, score=-17.606 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIMWL_WL_MED=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, ENV_AND_HDR_SPF_MATCH=-0.5, HTML_MESSAGE=0.001, RCVD_IN_ZEN_BLOCKED_OPENDNS=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01, URIBL_BLOCKED=0.001, URIBL_DBL_BLOCKED_OPENDNS=0.001, URIBL_ZEN_BLOCKED_OPENDNS=0.001, USER_IN_DEF_DKIM_WL=-7.5, USER_IN_DEF_SPF_WL=-7.5] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key) header.d=google.com
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 B2xTeHWMVERx for <quic@ietfa.amsl.com>; Tue, 14 Nov 2023 08:25:22 -0800 (PST)
Received: from mail-ed1-x52b.google.com (mail-ed1-x52b.google.com [IPv6:2a00:1450:4864:20::52b]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 5E451C14CE36 for <quic@ietf.org>; Tue, 14 Nov 2023 08:25:22 -0800 (PST)
Received: by mail-ed1-x52b.google.com with SMTP id 4fb4d7f45d1cf-53e08e439c7so9499914a12.0 for <quic@ietf.org>; Tue, 14 Nov 2023 08:25:22 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1699979121; x=1700583921; darn=ietf.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=/fLdHxtToBmrKiEyZMwhFEvNuk0xbmhMq9SiUC2N300=; b=J20dg+cxJRBkFxN7H/vjhzLiy8xM6Q073Z00uWzAKDgZF+tybj7brMMdyxkk6SPCVz bmKvPQhDsc6+6iq7TQjNBBg5iqtXeVhE6amY2cMTzavLwtcUYeukUAOVmQ6JGQs2S05a 34XsWCOT5DfjIIeE5A/Jsz8fD4n4nJ9YUPN6e0c2FwB/mg2y81AMj/OJs2ry3ZYdJoO0 D3S00OoPJoAAbztAzjjm1k+gjzglAuv8DWQiA8x6YXBnHI1gZThmgqGjjQDkrDRpk3EE evPy2N7oiQY4hZWO3HsnqoSVPyT0h3pODfm8Nc1MmYa/B2zlAr5RaK89fFX+LRN1o+oq X+eQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1699979121; x=1700583921; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=/fLdHxtToBmrKiEyZMwhFEvNuk0xbmhMq9SiUC2N300=; b=M3mVPLTSXfF0ppVHIE4oS/cfRIaNpC14IHagBEmMBaNF+uwz98yVduostf0H3XK2/i t1r0+i19OxOQYnN4FAFLml2qfxM2ZpmevDkqflVIchPfIAR2c0OPmxi75PxqB6rIxIyL gXCc6fS0B/fYH+7LO9SKtVDKyg/0dOrqDOV/1/pxnGgYM8EGooinvOtA3QtfOD7SX1IT X4fJkUWxBhyh5aLdJcGIVgpZ7V6+pS+I5XsmjvyZSHvq3PMi1DS80bltEY6cKnHRbLuH xyUujlxGI1n0Rs+OWPaSmW10oOio1VMXa1JOFNarywpgfcQVEIE+XrpAuuliQpj4gGfx jCUg==
X-Gm-Message-State: AOJu0YwxxUQUwAuPBNzpr+sFhU4chI5wDZNQC7Mbwd6VW9nqElInZoez BIAdfth0LB/Y7OqxaWtvHdf8M3f3ElvTzi4mHzWMsw==
X-Google-Smtp-Source: AGHT+IE7PrI6fOjHqeIak6ocK/o1NpoMe0LX9RcUbSx8CFxwUbFsEkH42JoLVV8LnUix5dZS1mIf5hXulP24q0rvEEA=
X-Received: by 2002:a17:906:1114:b0:9e7:8ad0:a471 with SMTP id h20-20020a170906111400b009e78ad0a471mr7579724eja.12.1699979120606; Tue, 14 Nov 2023 08:25:20 -0800 (PST)
MIME-Version: 1.0
References: <CAGgfL4tDDb7jZ-e-_STZ8SFPESyuPtqfFesQZOjzX_5i0XpAdw@mail.gmail.com> <CAOYVs2p2Z1JMa97uXF0SYYzsw_AOFP0-G9R+PVfeMwRw46Gw-w@mail.gmail.com> <CAGgfL4u=T-f=Uft=0-cLN9Jte4RETwYVq1UsmDVUER5geDnMiw@mail.gmail.com> <CALGR9oZU7ppYX8WDob_NXjy2exn5rNT4zLojKtaqP7b2P3gTag@mail.gmail.com> <CAGgfL4vrkSgCbOtPOFZ0c6XEKSe5JPxApbKh5KkMHP0VZGPAZg@mail.gmail.com> <CAOoMnrg35P2F5qm_5Xqwr0DE4uFQ8OVKSY3atCJ_MTCV_VkhbQ@mail.gmail.com> <CAOYVs2o6Ks5CrrrrHew06szbdSuiDqa=RU5-zVUy4-rkAE6AbQ@mail.gmail.com>
In-Reply-To: <CAOYVs2o6Ks5CrrrrHew06szbdSuiDqa=RU5-zVUy4-rkAE6AbQ@mail.gmail.com>
From: Damien Neil <dneil@google.com>
Date: Tue, 14 Nov 2023 08:25:07 -0800
Message-ID: <CAGgfL4uvsmd7uSfbbQg3zrXgLjXZmEYkXZ0LdZVcaPhCc=778g@mail.gmail.com>
Subject: Re: qlog, AckFrame, and ack_delay
To: Marten Seemann <martenseemann@gmail.com>
Cc: Robin Marx <marx.robin@gmail.com>, Lucas Pardue <lucaspardue.24.7@gmail.com>, QUIC WG <quic@ietf.org>
Content-Type: multipart/alternative; boundary="0000000000009ca4e9060a1f3b44"
Archived-At: <https://mailarchive.ietf.org/arch/msg/quic/EvS0EdnzGcjx0SW89zUl0d1w8Qc>
X-BeenThere: quic@ietf.org
X-Mailman-Version: 2.1.39
Precedence: list
List-Id: Main mailing list of the IETF QUIC working group <quic.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/quic>, <mailto:quic-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/quic/>
List-Post: <mailto:quic@ietf.org>
List-Help: <mailto:quic-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/quic>, <mailto:quic-request@ietf.org?subject=subscribe>
X-List-Received-Date: Tue, 14 Nov 2023 16:25:26 -0000
I agree with Marten that logging the raw frame isn't a great option. You don't want to have to stick a frame parser in every qlog consumer. I'd still like to know how a producer is supposed to log ack_delay prior to knowing the peer's max_ack_delay parameter. Are producers just expected to not log the ACK Delay in that case? That seems unfortunate; the value can't be used, of course, but that's not a reason not to log it for debugging. On Tue, Nov 14, 2023 at 2:19 AM Marten Seemann <martenseemann@gmail.com> wrote: > I had always assumed that RawInfo only applied to the payload of the > STREAM and DATAGRAM frame. Looking at the definition of RawInfo, it looks > like my assumption was likely wrong :) > > While I can see potential value in logging the data sent in STREAM / > DATAGRAM frames, I don't think there's anything useful that can be learned > from logging the wire representation of the frame. The only conceivable > piece of information one could learn from that is how many bytes were used > for encoding the integer values. I don't see how this would be useful. > Logging the entire frame means that a qlog consumer who is interested in > the payload of these frames now needs to implement a QUIC frame parser. > > Instead of adding a RawInfo field to all frames, I'd therefore like to > propose to change the definition of STREAM and DATAGRAM frames, such that > we only enable logging of the payload of these frames. > > On Tue, 14 Nov 2023 at 10:08, Robin Marx <marx.robin@gmail.com> wrote: > >> Hello all, >> >> Sorry for the late reply from my end; I had some troubles posting to the >> list and my original reply got lost in moderation. >> >> I can appreciate both sides of the argument here. >> Originally I tended more towards Damien's suggestion and opened a PR for >> it at https://github.com/quicwg/qlog/pull/337. >> However, I think Marten and Lucas make good arguments for things like >> HTTP/3 header compression and packet number encoding needing "global" >> persistent state to decode. >> I also feel the unscaled ack value isn't really useful in tooling (which >> is the main use case for qlog). >> >> I also follow Lucas' argument that a good fallback option would be to log >> the raw bytes using the "? raw: RawInfo" field. >> However, for this I see that we don't have this explicitly defined for >> all possible frames (including AckFrame) only on some (like StreamFrame or >> UnknownFrame). >> As such, if this option is chosen, we should add the explicit "raw" field >> to all (most?) frames as well imo. >> I'm guessing that would also meet Marten's approval? >> >> With best regards, >> Robin >> >> >> On Fri, Nov 10, 2023 at 6:50 PM Damien Neil <dneil= >> 40google.com@dmarc.ietf.org> wrote: >> >>> I believe the ACK Delay field is unique in the QUIC wire protocol in >>> being a field which can't be interpreted without information from a >>> separate protocol layer. I don't think this change leads to anything else. >>> >>> More precisely: Viewed as an integer, ACK Delay can be interpreted by >>> considering the ACK frame alone. Viewed as a duration, it requires >>> additional information exchanged in the TLS handshake. ACK Delay is the >>> only field I know of which has this duality. >>> >>> I can write a function which takes a QUIC packet payload and outputs a >>> list of qlog $QuicFrames, with the sole exception of the ACK Delay field >>> which requires access to the ack_delay_exponent. And as the >>> ack_delay_exponent is not known early in the handshake, it's currently >>> impossible to fully log early ACK frames. (Probably the right choice under >>> the current design is to not emit the ack_delay field in this case.) >>> >>> On Fri, Nov 10, 2023 at 9:20 AM Lucas Pardue <lucaspardue.24.7@gmail.com> >>> wrote: >>> >>>> These use cases seem like they are more general than just one field in >>>> one frame type. >>>> >>>> I don't want to commit to doing 1 thing if it's the start of a string >>>> of work that updates many other events. >>>> >>>> Would you be willing to survey all current events (modulo qpack, which >>>> we are removing) in order understand the full scope of change? >>>> >>>> Cheers >>>> Lucas >>>> >>>> On Fri, 10 Nov 2023, 17:31 Damien Neil, <dneil= >>>> 40google.com@dmarc.ietf.org> wrote: >>>> >>>>> Consider an endpoint processing an ACK frame in an Initial packet >>>>> received before transport parameters have been received. This can happen >>>>> when, for example, a client's Initial CRYPTO flight is too large to fit in >>>>> a single datagram; the server will send an ACK for the first Initial packet >>>>> before it has the ability to send transport parameters in the Handshake >>>>> flight. Or even in the case where the client Initial CRYPTO flight fits in >>>>> one datagram, the server may respond with an ACK in an Initial packet prior >>>>> to sending a Handshake packet. >>>>> >>>>> In this case, the client is processing an ACK frame that may contain a >>>>> non-zero ACK Delay value, but has no ability to interpret it because it >>>>> doesn't know the peer's ack_delay_exponent. I forget whether it's permitted >>>>> for an endpoint to send a non-zero ACK Delay in an Initial packet, but even >>>>> if it isn't, the recipient may want to log the value. >>>>> >>>>> Or one could imagine a tool which converts a pcap packet capture to a >>>>> qlog file; in this case, the tool may have access to a key log to permit it >>>>> to decrypt packets, but may be processing a section of the log that does >>>>> not include the handshake. >>>>> >>>>> On Fri, Nov 10, 2023 at 12:48 AM Marten Seemann < >>>>> martenseemann@gmail.com> wrote: >>>>> >>>>>> There's a tradeoff here: Giving writers of qlog files more >>>>>> flexibility comes at a cost to consumers of qlog files, who now need to >>>>>> support multiple representations. There's a lot of value in having only a >>>>>> single way to log something. >>>>>> >>>>>> I'm not sure the proposal for unscaled_ack_delay strikes the right >>>>>> balance here. For a consumer of a qlog file, I can't think of a single >>>>>> scenario where the unscaled_ack_delay would provide any advantage over the >>>>>> actual value, so introducing this option would purely to make the writer's >>>>>> life easier. And I'm struggling to see why logging the ack_delay would >>>>>> place a big burden on the writer, since a QUIC stack will need to decode >>>>>> this field at some point anyway. >>>>>> >>>>>> On Thu, 9 Nov 2023 at 22:44, Damien Neil <dneil= >>>>>> 40google.com@dmarc.ietf.org> wrote: >>>>>> >>>>>>> The qlog AckFrame type includes the ack delay as a float32 number of >>>>>>> milliseconds: >>>>>>> >>>>>>> AckFrame = { >>>>>>> frame_type: "ack" >>>>>>> >>>>>>> ; in ms >>>>>>> ? ack_delay: float32 >>>>>>> ; ... >>>>>>> } >>>>>>> >>>>>>> >>>>>>> https://www.ietf.org/archive/id/draft-ietf-quic-qlog-quic-events-06.html#section-8.12.3 >>>>>>> >>>>>>> Given a serialized ack frame, determining the delay as a duration >>>>>>> requires knowing the ack_delay_exponent. In some cases, the logging >>>>>>> endpoint may not have this available (if receiving an ack before transport >>>>>>> parameters have been received). Even when available, it may not be easily >>>>>>> accessible at the point of logging. For example, in my own implementation, >>>>>>> I'd like to be able to convert a packet payload to a series of qlog event >>>>>>> frames without needing to reference persistent connection state. >>>>>>> >>>>>>> I think there should be an alternative to log the raw value of the >>>>>>> ACK Delay field: >>>>>>> >>>>>>> AckFrame = { >>>>>>> frame_type: "ack" >>>>>>> >>>>>>> ; in ms >>>>>>> ? ack_delay: float32 >>>>>>> >>>>>>> ; integer value of the ACK Delay field, not scaled by the >>>>>>> ack_delay_exponent >>>>>>> ? unscaled_ack_delay: uint64 >>>>>>> >>>>>>> ; ... >>>>>>> } >>>>>>> >>>>>>> - Damien >>>>>>> >>>>>> >> >> -- >> Marx Robin >> +32 (0)497 72 86 94 <+32%20497%2072%2086%2094> >> >
- qlog, AckFrame, and ack_delay Damien Neil
- Re: qlog, AckFrame, and ack_delay Marten Seemann
- Re: qlog, AckFrame, and ack_delay Damien Neil
- Re: qlog, AckFrame, and ack_delay Lucas Pardue
- Re: qlog, AckFrame, and ack_delay Damien Neil
- Re: qlog, AckFrame, and ack_delay Lucas Pardue
- Re: qlog, AckFrame, and ack_delay Marten Seemann
- Re: qlog, AckFrame, and ack_delay Robin Marx
- Re: qlog, AckFrame, and ack_delay Lucas Pardue
- Re: qlog, AckFrame, and ack_delay Damien Neil
- Re: qlog, AckFrame, and ack_delay Robin Marx
- Re: qlog, AckFrame, and ack_delay Marten Seemann
- Re: qlog, AckFrame, and ack_delay Damien Neil
- Re: qlog, AckFrame, and ack_delay Lucas Pardue
- Re: qlog, AckFrame, and ack_delay Marten Seemann
- Re: qlog, AckFrame, and ack_delay Lucas Pardue