From 1526f1942c1c67cb6c1b82750dbb2e3374b4792f Mon Sep 17 00:00:00 2001 From: Willy Tarreau Date: Mon, 10 Dec 2018 13:36:56 +0100 Subject: [PATCH] MINOR: hpack: simplify the len to bytes conversion The len-to-bytes conversion can be slightly simplified and optimized by hardcoding a tree lookup. Just doing this increases by 1% the request rate on H2. It could be made almost branch-free by using fls() but it looks overkill for most situations since most headers are very short. --- src/hpack-enc.c | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/src/hpack-enc.c b/src/hpack-enc.c index 836584ab4..7c6ef6f80 100644 --- a/src/hpack-enc.c +++ b/src/hpack-enc.c @@ -43,13 +43,18 @@ */ static inline int len_to_bytes(size_t len) { - if (len < 127) + ssize_t slen = len; + + slen -= 127; + if (__builtin_expect(slen < 0, 1)) return 1; - if (len < 127 + (1 << 7)) - return 2; - if (len < 127 + (1 << 14)) - return 3; - if (len < 127 + (1 << 21)) + if (slen < (1 << 14)) { + if (__builtin_expect(slen < (1 << 7), 1)) + return 2; + else + return 3; + } + if (slen < (1 << 21)) return 4; return 0; }