Re: [quicwg/base-drafts] Make using static table and Huffman encoding in QPACK opt-in (#3622)

Christian Huitema <> Mon, 04 May 2020 15:00 UTC

Return-Path: <>
Received: from localhost (localhost []) by (Postfix) with ESMTP id C0FE93A0A14 for <>; Mon, 4 May 2020 08:00:17 -0700 (PDT)
X-Virus-Scanned: amavisd-new at
X-Spam-Flag: NO
X-Spam-Score: -1.694
X-Spam-Status: No, score=-1.694 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, HTML_IMAGE_ONLY_28=1.404, HTML_MESSAGE=0.001, MAILING_LIST_MULTI=-1, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001] autolearn=ham autolearn_force=no
Authentication-Results: (amavisd-new); dkim=pass (1024-bit key)
Received: from ([]) by localhost ( []) (amavisd-new, port 10024) with ESMTP id ufORAIGmoZ2g for <>; Mon, 4 May 2020 08:00:15 -0700 (PDT)
Received: from ( []) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by (Postfix) with ESMTPS id 62C2A3A0A11 for <>; Mon, 4 May 2020 08:00:15 -0700 (PDT)
Received: from ( []) by (Postfix) with ESMTP id 4F596E3F10 for <>; Mon, 4 May 2020 08:00:14 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;; s=pf2014; t=1588604414; bh=Ro+QIGlxLGUNV/OJeMKNWUnLfdha0vjMQn3YSOjjULI=; h=Date:From:Reply-To:To:Cc:In-Reply-To:References:Subject:List-ID: List-Archive:List-Post:List-Unsubscribe:From; b=gQ4owV2UIOOt7fcQmRmgRbJ87nn6fs3N3b1kePXlm6O2Ev7I9q6pVN9YXrpP5NEc5 h7pw8Y6itHlBl0FiWuwafiVst46ZKolFcptExvsbjcjZI1mvOO3W97+KOXnvmKpgEx ZNj5XeBigJ8Zz++pLnEkOS4m7qf1uFo0QNDyK45Q=
Date: Mon, 04 May 2020 08:00:14 -0700
From: Christian Huitema <>
Reply-To: quicwg/base-drafts <>
To: quicwg/base-drafts <>
Cc: Subscribed <>
Message-ID: <quicwg/base-drafts/issues/3622/>
In-Reply-To: <quicwg/base-drafts/issues/>
References: <quicwg/base-drafts/issues/>
Subject: Re: [quicwg/base-drafts] Make using static table and Huffman encoding in QPACK opt-in (#3622)
Mime-Version: 1.0
Content-Type: multipart/alternative; boundary="--==_mimepart_5eb02dfe3efec_7503fef0b6cd95c181833"; charset="UTF-8"
Content-Transfer-Encoding: 7bit
Precedence: list
X-GitHub-Sender: huitema
X-GitHub-Recipient: quic-issues
X-GitHub-Reason: subscribed
X-Auto-Response-Suppress: All
Archived-At: <>
X-Mailman-Version: 2.1.29
List-Id: Notification list for GitHub issues related to the QUIC WG <>
List-Unsubscribe: <>, <>
List-Archive: <>
List-Post: <>
List-Help: <>
List-Subscribe: <>, <>
X-List-Received-Date: Mon, 04 May 2020 15:00:18 -0000

To answer the question, I did `#ifdef` the Huffman functionality in h3zero and redid the test. Compiling on an Ubuntu 19 VM with Huffman defined:
$ gcc -Os -c -o h3zero.o h3zero.c && strip h3zero.o && wc -c h3zero.o
13680 h3zero.o
And with Huffman defined out:
$ gcc -Os -c -o h3zero.o h3zero.c && strip h3zero.o && wc -c h3zero.o
8640 h3zero.o
The cost of Huffman decoding support appears to be 5KB of code. The remaining 8.6K include static QPACK and the parsing of minimal H3 frames.

The `picohttp_ct` program is a test program. It links with the test framework, so the 685K size has to be taken with a grain of salt. To give an other data point, the DNS over QUIC program built with the picoquic library is around 300KB. If I take that as a minimum reference, the added cost of Huffman decoding would be less than 1.5% of the total. But of course everything is relative, and 

@lars has experience developing QUIC for tiny devices. Maybe he has an opinion on this.

You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub: