Re: [quicwg/base-drafts] DATA frame encoding is inefficient for long dynamically generated bodies (#1885)

Dmitri Tikhonov <notifications@github.com> Sat, 20 October 2018 10:35 UTC

Return-Path: <noreply@github.com>
X-Original-To: quic-issues@ietfa.amsl.com
Delivered-To: quic-issues@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 675761294D0 for <quic-issues@ietfa.amsl.com>; Sat, 20 Oct 2018 03:35:01 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -8.064
X-Spam-Level:
X-Spam-Status: No, score=-8.064 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.064, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, HTML_MESSAGE=0.001, MAILING_LIST_MULTI=-1, RCVD_IN_DNSWL_HI=-5, SPF_PASS=-0.001] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (1024-bit key) header.d=github.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 fpnyKZHfYk1j for <quic-issues@ietfa.amsl.com>; Sat, 20 Oct 2018 03:35:00 -0700 (PDT)
Received: from out-3.smtp.github.com (out-3.smtp.github.com [192.30.252.194]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id C26FE128A6E for <quic-issues@ietf.org>; Sat, 20 Oct 2018 03:34:59 -0700 (PDT)
Date: Sat, 20 Oct 2018 03:34:58 -0700
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=github.com; s=pf2014; t=1540031698; bh=WTWYd0RLWZ+tU2s/HY8VT5WgUu5JAB3OPO1I6XNWEi0=; h=Date:From:Reply-To:To:Cc:In-Reply-To:References:Subject:List-ID: List-Archive:List-Post:List-Unsubscribe:From; b=ftMPvo7VW3ZlOH5U8TepePcMEX/rpKECYqu+iTl+X/w1PGeMPQNFM/twG3gNBmBx4 nTqdJg3ingFV1eKcuOHjK3CqUgbOWEtq7Kv83MIRTxMdrTZ2e3Vc3zz0jn9Mq2fKbN k8BCDCz8RbdyNA3adSfLPn+7nUenOoUcl1zRz/bE=
From: Dmitri Tikhonov <notifications@github.com>
Reply-To: quicwg/base-drafts <reply+0166e4abbd2f37a9ac987a2c8a0874ca3f68324365273ee992cf0000000117e2c6d292a169ce16286866@reply.github.com>
To: quicwg/base-drafts <base-drafts@noreply.github.com>
Cc: Subscribed <subscribed@noreply.github.com>
Message-ID: <quicwg/base-drafts/issues/1885/431568943@github.com>
In-Reply-To: <quicwg/base-drafts/issues/1885@github.com>
References: <quicwg/base-drafts/issues/1885@github.com>
Subject: Re: [quicwg/base-drafts] DATA frame encoding is inefficient for long dynamically generated bodies (#1885)
Mime-Version: 1.0
Content-Type: multipart/alternative; boundary="--==_mimepart_5bcb04d251d13_65723ff0b72d45b45198c6"; charset="UTF-8"
Content-Transfer-Encoding: 7bit
Precedence: list
X-GitHub-Sender: dtikhonov
X-GitHub-Recipient: quic-issues
X-GitHub-Reason: subscribed
X-Auto-Response-Suppress: All
X-GitHub-Recipient-Address: quic-issues@ietf.org
Archived-At: <https://mailarchive.ietf.org/arch/msg/quic-issues/HW47Wz1qto5DtDrI9sSRvlyvhKA>
X-BeenThere: quic-issues@ietf.org
X-Mailman-Version: 2.1.29
List-Id: Notification list for GitHub issues related to the QUIC WG <quic-issues.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/quic-issues>, <mailto:quic-issues-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/quic-issues/>
List-Post: <mailto:quic-issues@ietf.org>
List-Help: <mailto:quic-issues-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/quic-issues>, <mailto:quic-issues-request@ietf.org?subject=subscribe>
X-List-Received-Date: Sat, 20 Oct 2018 10:35:01 -0000

In our QPACK implementation, [ls-qpack](https://github.com/litespeedtech/ls-qpack), the decoder consumes header block as a stream.  Hence, having a header block of an unspecified size is no problem -- there is no buffering either way.

For QPACK encoder, it is a profitable optimization to be able to write some header blocks directly to the stream.  I share @RyanAtGoogle's emotions in this regard.

@kazuho writes:
> Having non-DATA frames terminated by EOS means that we need add a different path for the last bullet. I'm sure I can implement that, but my preference goes to avoiding it.

Isn't this as simple as foregoing the initial size check and closing the connection if you do hit the internal limit?  Certainly, if you're willing to buffer 16KB - 1 bytes to process a frame, you should be willing to buffer 16KB -1 bytes and then throw them out and close the connection.

-- 
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/quicwg/base-drafts/issues/1885#issuecomment-431568943