Commit ff0045e
Use Table lookup for HPACK decoder (netty#9307)
Motivation:
Table based decoding is fast.
Modification:
Use table based decoding in HPACK decoder, inspired by
https://github.com/python-hyper/hpack/blob/master/hpack/huffman_table.py
This modifies the table to be based on integers, rather than 3-tuples of
bytes. This is for two reasons:
1. It's faster
2. Using bytes makes the static intializer too big, and doesn't
compile.
Result:
Faster Huffman decoding. This only seems to help the ascii case, the
other decoding is about the same.
Benchmarks:
```
Before:
Benchmark (limitToAscii) (sensitive) (size) Mode Cnt Score Error Units
HpackDecoderBenchmark.decode true true SMALL thrpt 20 426293.636 ± 1444.843 ops/s
HpackDecoderBenchmark.decode true true MEDIUM thrpt 20 57843.738 ± 725.704 ops/s
HpackDecoderBenchmark.decode true true LARGE thrpt 20 3002.412 ± 16.998 ops/s
HpackDecoderBenchmark.decode true false SMALL thrpt 20 412339.400 ± 1128.394 ops/s
HpackDecoderBenchmark.decode true false MEDIUM thrpt 20 58226.870 ± 199.591 ops/s
HpackDecoderBenchmark.decode true false LARGE thrpt 20 3044.256 ± 10.675 ops/s
HpackDecoderBenchmark.decode false true SMALL thrpt 20 2082615.030 ± 5929.726 ops/s
HpackDecoderBenchmark.decode false true MEDIUM thrpt 10 571640.454 ± 26499.229 ops/s
HpackDecoderBenchmark.decode false true LARGE thrpt 20 92714.555 ± 2292.222 ops/s
HpackDecoderBenchmark.decode false false SMALL thrpt 20 1745872.421 ± 6788.840 ops/s
HpackDecoderBenchmark.decode false false MEDIUM thrpt 20 490420.323 ± 2455.431 ops/s
HpackDecoderBenchmark.decode false false LARGE thrpt 20 84536.200 ± 398.714 ops/s
After(bytes):
Benchmark (limitToAscii) (sensitive) (size) Mode Cnt Score Error Units
HpackDecoderBenchmark.decode true true SMALL thrpt 20 472649.148 ± 7122.461 ops/s
HpackDecoderBenchmark.decode true true MEDIUM thrpt 20 66739.638 ± 341.607 ops/s
HpackDecoderBenchmark.decode true true LARGE thrpt 20 3139.773 ± 24.491 ops/s
HpackDecoderBenchmark.decode true false SMALL thrpt 20 466933.833 ± 4514.971 ops/s
HpackDecoderBenchmark.decode true false MEDIUM thrpt 20 66111.778 ± 568.326 ops/s
HpackDecoderBenchmark.decode true false LARGE thrpt 20 3143.619 ± 3.332 ops/s
HpackDecoderBenchmark.decode false true SMALL thrpt 20 2109995.177 ± 6203.143 ops/s
HpackDecoderBenchmark.decode false true MEDIUM thrpt 20 586026.055 ± 1578.550 ops/s
HpackDecoderBenchmark.decode false false SMALL thrpt 20 1775723.270 ± 4932.057 ops/s
HpackDecoderBenchmark.decode false false MEDIUM thrpt 20 493316.467 ± 1453.037 ops/s
HpackDecoderBenchmark.decode false false LARGE thrpt 10 85726.219 ± 402.573 ops/s
After(ints):
Benchmark (limitToAscii) (sensitive) (size) Mode Cnt Score Error Units
HpackDecoderBenchmark.decode true true SMALL thrpt 20 615549.006 ± 5282.283 ops/s
HpackDecoderBenchmark.decode true true MEDIUM thrpt 20 86714.630 ± 654.489 ops/s
HpackDecoderBenchmark.decode true true LARGE thrpt 20 3984.439 ± 61.612 ops/s
HpackDecoderBenchmark.decode true false SMALL thrpt 20 602489.337 ± 5397.024 ops/s
HpackDecoderBenchmark.decode true false MEDIUM thrpt 20 88399.109 ± 241.115 ops/s
HpackDecoderBenchmark.decode true false LARGE thrpt 20 3875.729 ± 103.057 ops/s
HpackDecoderBenchmark.decode false true SMALL thrpt 20 2092165.454 ± 11918.859 ops/s
HpackDecoderBenchmark.decode false true MEDIUM thrpt 20 583465.437 ± 5452.115 ops/s
HpackDecoderBenchmark.decode false true LARGE thrpt 20 93290.061 ± 665.904 ops/s
HpackDecoderBenchmark.decode false false SMALL thrpt 20 1758402.495 ± 14677.438 ops/s
HpackDecoderBenchmark.decode false false MEDIUM thrpt 10 491598.099 ± 5029.698 ops/s
HpackDecoderBenchmark.decode false false LARGE thrpt 20 85834.290 ± 554.915 ops/s
```1 parent 18e4121 commit ff0045e
File tree
18 files changed
+4749
-227
lines changed- codec-http2/src
- main/java/io/netty/handler/codec/http2
- test/java/io/netty/handler/codec/http2
- license
- microbench/src/main/java/io/netty/handler/codec/http2
18 files changed
+4749
-227
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
205 | 205 | | |
206 | 206 | | |
207 | 207 | | |
| 208 | + | |
| 209 | + | |
| 210 | + | |
| 211 | + | |
| 212 | + | |
| 213 | + | |
| 214 | + | |
| 215 | + | |
| 216 | + | |
| 217 | + | |
| 218 | + | |
| 219 | + | |
| 220 | + | |
| 221 | + | |
| 222 | + | |
| 223 | + | |
208 | 224 | | |
209 | 225 | | |
210 | 226 | | |
| |||
Lines changed: 5 additions & 9 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
21 | 21 | | |
22 | 22 | | |
23 | 23 | | |
24 | | - | |
25 | 24 | | |
26 | 25 | | |
27 | 26 | | |
| |||
64 | 63 | | |
65 | 64 | | |
66 | 65 | | |
67 | | - | |
68 | 66 | | |
69 | 67 | | |
70 | 68 | | |
| |||
106 | 104 | | |
107 | 105 | | |
108 | 106 | | |
109 | | - | |
110 | 107 | | |
111 | 108 | | |
112 | 109 | | |
| |||
357 | 354 | | |
358 | 355 | | |
359 | 356 | | |
360 | | - | |
361 | | - | |
362 | | - | |
| 357 | + | |
| 358 | + | |
| 359 | + | |
363 | 360 | | |
| 361 | + | |
364 | 362 | | |
365 | | - | |
366 | | - | |
367 | 363 | | |
368 | 364 | | |
369 | 365 | | |
| |||
442 | 438 | | |
443 | 439 | | |
444 | 440 | | |
445 | | - | |
| 441 | + | |
446 | 442 | | |
447 | 443 | | |
448 | 444 | | |
| |||
Lines changed: 4 additions & 5 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
20 | 20 | | |
21 | 21 | | |
22 | 22 | | |
23 | | - | |
24 | 23 | | |
25 | 24 | | |
26 | 25 | | |
| |||
57 | 56 | | |
58 | 57 | | |
59 | 58 | | |
60 | | - | |
| 59 | + | |
61 | 60 | | |
62 | 61 | | |
63 | 62 | | |
| |||
67 | 66 | | |
68 | 67 | | |
69 | 68 | | |
70 | | - | |
| 69 | + | |
71 | 70 | | |
72 | 71 | | |
73 | | - | |
74 | | - | |
| 72 | + | |
| 73 | + | |
75 | 74 | | |
76 | 75 | | |
77 | 76 | | |
| |||
Lines changed: 4 additions & 7 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
90 | 90 | | |
91 | 91 | | |
92 | 92 | | |
93 | | - | |
94 | 93 | | |
95 | 94 | | |
96 | 95 | | |
| |||
102 | 101 | | |
103 | 102 | | |
104 | 103 | | |
105 | | - | |
106 | 104 | | |
107 | | - | |
108 | | - | |
| 105 | + | |
| 106 | + | |
109 | 107 | | |
110 | 108 | | |
111 | 109 | | |
112 | 110 | | |
113 | 111 | | |
114 | 112 | | |
115 | | - | |
| 113 | + | |
116 | 114 | | |
117 | 115 | | |
118 | 116 | | |
119 | 117 | | |
120 | 118 | | |
121 | | - | |
122 | 119 | | |
123 | 120 | | |
124 | 121 | | |
| |||
448 | 445 | | |
449 | 446 | | |
450 | 447 | | |
451 | | - | |
| 448 | + | |
452 | 449 | | |
453 | 450 | | |
454 | 451 | | |
| |||
0 commit comments