Re: Proposal to replace ACK block count with ACK length

Eric Rescorla <ekr@rtfm.com> Sat, 16 June 2018 20:13 UTC

Return-Path: <ekr@rtfm.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 E18BC130E45 for <quic@ietfa.amsl.com>; Sat, 16 Jun 2018 13:13:21 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.908
X-Spam-Level:
X-Spam-Status: No, score=-1.908 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_NONE=-0.0001, T_DKIMWL_WL_MED=-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=rtfm-com.20150623.gappssmtp.com
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 K_ZyMTgxbqfs for <quic@ietfa.amsl.com>; Sat, 16 Jun 2018 13:13:20 -0700 (PDT)
Received: from mail-ot0-x230.google.com (mail-ot0-x230.google.com [IPv6:2607:f8b0:4003:c0f::230]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 3A30E12785F for <quic@ietf.org>; Sat, 16 Jun 2018 13:13:20 -0700 (PDT)
Received: by mail-ot0-x230.google.com with SMTP id v24-v6so6043418otk.13 for <quic@ietf.org>; Sat, 16 Jun 2018 13:13:20 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rtfm-com.20150623.gappssmtp.com; s=20150623; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc; bh=Y9bfNKvJsC7x6gKyufeFZ4EEiTGN6jQVmI6hRm4tGs4=; b=oUzUGoFAXqNbynz71gKVlDnRS7xl2zXr2glcVUuW7fY4LWXPgpzRokD3IMgOGFPBsh QbNaEcXYRDboUZVFf1VR9jhXgEz+jQ3jWA+O5Fdfp4K09DvOmm5Sm2FPE+1dLQ8lvaxM KTsXK8wZtDjrEgaSTfKcCE1Y/um11JzSgyer4E3yhGA42G4Ab07Ft73RnBN59inxQZc6 NFgp5YbKvuhcVyasRkhGeVDXTWWZhcFoZzVk5SMO+Y+OLRvut4sCoOahiQ463KmGMjLa laoUx5xRfWUEPyJX4zg3w+lwgAY0ObIdfKN7Ezo26dRW5nsgMb73ZgESEXSJkcOYsnxn rKyg==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=Y9bfNKvJsC7x6gKyufeFZ4EEiTGN6jQVmI6hRm4tGs4=; b=Yji41eiyAf9CdOUetonMFbPBXqgfRas0xculf9k6FhqXVCFQ+p+T1miWxyFVmBu632 V2nANrLye6jUxKiEyOXrdgqUPFnB09C8zzeJ2QIer0+X2S/AxB961OwtJ3eDJoEYR8w+ 0haIMBl/sVF04MBqYj6+CdbgCeIqANBt0Q9JxwvjnQJ3hU9xpWyl4xRW7mdJreiB6kHH Q/YaoTtzVLvkP79tBCRXHu8dvo8MVN3/9lkeKd4xpAU1gMShNdRGwrDy0a83v3LOKZsW i980lwndJkoWQ16D5NT6LEAai2JVGjzAucwZ0rGRMe/liEENA/JUbuPP4ZxgRcP0fWo2 2W8w==
X-Gm-Message-State: APt69E0gO4WyMDrWQLB+x1gHvJtH8ALJR8kwZL0xgmbUAeg+hsHovJEe LHJ+0auwBTlPXkXmfMATr60xbYmRXDhkB0Xeu0r94g==
X-Google-Smtp-Source: ADUXVKKgHDNhbUMJrWzQ/EUlA9LblOc4FwTi65qG/Gf3quzQwxQZzZmkIY8hXqXTk3bPhNtCSuU+NuNWwjnFKemoCPE=
X-Received: by 2002:a9d:2f2a:: with SMTP id h39-v6mr3937904otb.214.1529179999579; Sat, 16 Jun 2018 13:13:19 -0700 (PDT)
MIME-Version: 1.0
Received: by 2002:ac9:3a8a:0:0:0:0:0 with HTTP; Sat, 16 Jun 2018 13:12:39 -0700 (PDT)
In-Reply-To: <CAOYVs2qE=Tw_7eax9HwaESaQPMh7k3BSVV112d+pPeSfZ09EjQ@mail.gmail.com>
References: <1F436ED13A22A246A59CA374CBC543998B832414@ORSMSX111.amr.corp.intel.com> <20180611154244.GA27622@ubuntu-dmitri> <CACpbDcdxzRxeiN93kKoj__vo2TERm4QZKqaesL=jr4wQUN1gXA@mail.gmail.com> <1F436ED13A22A246A59CA374CBC543998B833B91@ORSMSX111.amr.corp.intel.com> <CABcZeBOjjRrX+AsXdgcUKpL=ciL8U_U1+WVAhQv-ZjwGxkQxYw@mail.gmail.com> <MWHPR21MB0638068EFA850328793E55F6B67C0@MWHPR21MB0638.namprd21.prod.outlook.com> <CACpbDcdbTKKEh8dcshWM6-7vq2hBFJC1myL1+H6etpMMjth+wg@mail.gmail.com> <CABkgnnV_thWcAi=AdwV+Za5rXywiUvtOYpsNNp1y7=RvL2MvWA@mail.gmail.com> <CAOYVs2qE=Tw_7eax9HwaESaQPMh7k3BSVV112d+pPeSfZ09EjQ@mail.gmail.com>
From: Eric Rescorla <ekr@rtfm.com>
Date: Sat, 16 Jun 2018 13:12:39 -0700
Message-ID: <CABcZeBOCRHAuh44CrMH02UZ3Ar_2sa5M1c3LG_A-RPzXX+H+Yw@mail.gmail.com>
Subject: Re: Proposal to replace ACK block count with ACK length
To: Marten Seemann <martenseemann@gmail.com>
Cc: Martin Thomson <martin.thomson@gmail.com>, Jana Iyengar <jri.ietf@gmail.com>, Praveen Balasubramanian <pravb@microsoft.com>, QUIC WG <quic@ietf.org>, "Deval, Manasi" <manasi.deval@intel.com>
Content-Type: multipart/alternative; boundary="000000000000ac4908056ec7f629"
Archived-At: <https://mailarchive.ietf.org/arch/msg/quic/YELnHwFkaYhfSGlBj8acLVD4-cQ>
X-BeenThere: quic@ietf.org
X-Mailman-Version: 2.1.26
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: Sat, 16 Jun 2018 20:13:22 -0000

On Fri, Jun 15, 2018 at 6:46 PM, Marten Seemann <martenseemann@gmail.com>
wrote:

> This proposal increases the size of the ACK frame by 1 byte in the common
> case (less than 63 ACK ranges), since the ACK length field here always
> consumes 2 bytes, whereas the ACK Block Count is a variable-length integer.
> Considering how much work we put into minimising the size of the frames,
> this feels like a step in the wrong direction.
>
> Regarding the processing cost, I agree with Dmitri. Handling an ACK frame
> requires looping over and making changes to a data structure that keeps
> track of sent packets. This is much more expensive than simply parsing a
> bunch of varints in the ACK frame. It seems unlikely that a multi-threaded
> packet parser would offer any real-world performance benefits.
>

I don't want to overstate the benefit here, but my point isn't that parsing
is expensive but that if you want to have a multithreaded packet processing
system, then it's nice to have a simpler data structure (the unparsed ACK
block) to hand to the ACK processing thread.

-Ekr



> On Sat, Jun 16, 2018 at 6:19 AM Martin Thomson <martin.thomson@gmail.com>
> wrote:
>
>> When we discussed this before, some people observed that this creates
>> a need to encode in two passes.  That's the trade-off here.  (Not
>> expressing an opinion.)
>> On Fri, Jun 15, 2018 at 3:51 PM Jana Iyengar <jri.ietf@gmail.com> wrote:
>> >
>> > I don't have a strong opinion on this. I'm certainly not opposed to it.
>> > Does anyone have a strong opposition?
>> >
>> > On Fri, Jun 15, 2018 at 3:10 PM Praveen Balasubramanian <
>> pravb@microsoft.com> wrote:
>> >>
>> >> I agree as well since this can help reduce per packet processing
>> overhead. ACKs are going to be the second most common frame type so no
>> objections to special casing.
>> >>
>> >>
>> >>
>> >> From: QUIC [mailto:quic-bounces@ietf.org] On Behalf Of Eric Rescorla
>> >> Sent: Friday, June 15, 2018 9:11 AM
>> >> To: Deval, Manasi <manasi.deval@intel.com>
>> >> Cc: Jana Iyengar <jri.ietf@gmail.com>; QUIC WG <quic@ietf.org>
>> >> Subject: Re: Proposal to replace ACK block count with ACK length
>> >>
>> >>
>> >>
>> >> I agree with Manasi here. This change would allow ack frame parsing to
>> be more self-contained, which is an advantage for the parser and also
>> potentially for parallelism (because you can quickly find the frame and
>> then process it in parallel).
>> >>
>> >>
>> >>
>> >> -Ekr
>> >>
>> >>
>> >>
>> >>
>> >>
>> >> On Mon, Jun 11, 2018 at 5:22 PM, Deval, Manasi <manasi.deval@intel.com>
>> wrote:
>> >>
>> >> In general, varints require some specific logic for parsing. To skip
>> over any header, I have to read every single varint. As the code sees
>> Stream and ACK headers most frequently, that is my focus.  The Stream frame
>> has a length in its third field.
>> >>
>> >>
>> >>
>> >> ACK parsing, however, needs 6 + 2*num_blocks reads to identify length.
>> There are two reads each for ‘largest acknowledged’, ‘ACK delay’ and ‘ACK
>> block count’. The pain point is the total number of cycles parse an ACK. If
>> I am processing 10M pps, where 10% - 30% of the packets have a piggybacked
>> ACK, these cycles becomes a significant bottleneck.
>> >>
>> >>
>> >>
>> >> Thanks,
>> >>
>> >> Manasi
>> >>
>> >>
>> >>
>> >>
>> >>
>> >>
>> >>
>> >> From: QUIC [mailto:quic-bounces@ietf.org] On Behalf Of Jana Iyengar
>> >> Sent: Monday, June 11, 2018 3:11 PM
>> >> To: Deval, Manasi <manasi.deval@intel.com>; QUIC WG <quic@ietf.org>
>> >> Subject: Re: Proposal to replace ACK block count with ACK length
>> >>
>> >>
>> >>
>> >> You're right that we no longer have the ability to skip an ACK frame,
>> and this crept in when we moved to varints.
>> >>
>> >> I believe your problem though is generally true of most frames not
>> just ACKs, since ids, packet numbers, and numbers in all frames are now all
>> varints. To skip any frame, you'll need to parse the varint fields in those
>> frames. If you have logic to process and skip varints, then skipping the
>> ack block section is merely repeating this operation (2*num_block+1) times.
>> Do you see specific value in skipping ACK frames over the other control
>> frames?
>> >>
>> >>
>> >>
>> >>
>> >>
>> >> On Mon, Jun 11, 2018 at 8:43 AM Dmitri Tikhonov
>> <dtikhonov@litespeedtech..com> wrote:
>> >>
>> >> On Mon, Jun 11, 2018 at 03:33:35PM +0000, Deval, Manasi wrote:
>> >> > -        Moving the ACK length to the front of the ACK allows the
>> >> >          flexibility of either reading the entire ACK or reading the
>> >> >          first 16 bits and skipping over the length. This is a useful
>> >> >          feature for the case where ACK processing is split into
>> >> >          multiple layers. Depending on the processor this is run on,
>> >> >          there are different advantages -
>> >>
>> >> Just a note.  In my experience, the cost of parsing an ACK frame is
>> >> negligible compared to the cost of processing an ACK frame: that is,
>> >> poking at various memory locations to discard newly ACKed packets.
>> >>
>> >>   - Dmitri.
>> >>
>> >>
>>
>>