From: Willy Tarreau Date: Mon, 10 Dec 2018 12:36:56 +0000 (+0100) Subject: MINOR: hpack: simplify the len to bytes conversion X-Git-Tag: v1.9-dev11~131 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=1526f1942c1c67cb6c1b82750dbb2e3374b4792f;p=thirdparty%2Fhaproxy.git 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. --- diff --git a/src/hpack-enc.c b/src/hpack-enc.c index 836584ab41..7c6ef6f800 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; }