Commit deea51e
Disable Huffman encoding for small headers (netty#9260)
Motivation:
Huffman coding saves only a little space, but has a huge CPU cost
Modification:
Disable huff coding for headers smaller than 512 bytes. Also, add a
configurable limit to the encoder.
Result:
Faster HPACK
BEFORE:
```
Benchmark (duplicates) (limitToAscii) (sensitive) (size) Mode Cnt Score Error Units
HpackEncoderBenchmark.encode true true true SMALL avgt 10 2572.595 ± 16.184 ns/op
HpackEncoderBenchmark.encode true true true MEDIUM avgt 10 19580.815 ± 397.780 ns/op
HpackEncoderBenchmark.encode true true true LARGE avgt 10 379456.381 ± 2059.919 ns/op
HpackEncoderBenchmark.encode true true false SMALL avgt 10 730.579 ± 8.116 ns/op
HpackEncoderBenchmark.encode true true false MEDIUM avgt 10 2087.590 ± 84.644 ns/op
HpackEncoderBenchmark.encode true true false LARGE avgt 10 11725.228 ± 89.298 ns/op
HpackEncoderBenchmark.encode true false true SMALL avgt 10 555.971 ± 5.120 ns/op
HpackEncoderBenchmark.encode true false true MEDIUM avgt 10 2831.874 ± 41.801 ns/op
HpackEncoderBenchmark.encode true false true LARGE avgt 10 36054.025 ± 179.504 ns/op
HpackEncoderBenchmark.encode true false false SMALL avgt 10 340.337 ± 3.313 ns/op
HpackEncoderBenchmark.encode true false false MEDIUM avgt 10 1006.817 ± 8.942 ns/op
HpackEncoderBenchmark.encode true false false LARGE avgt 10 8784.168 ± 164.014 ns/op
HpackEncoderBenchmark.encode false true true SMALL avgt 10 2561.934 ± 27.056 ns/op
HpackEncoderBenchmark.encode false true true MEDIUM avgt 10 22061.105 ± 154.533 ns/op
HpackEncoderBenchmark.encode false true true LARGE avgt 10 435744.897 ± 8853.388 ns/op
HpackEncoderBenchmark.encode false true false SMALL avgt 10 2737.683 ± 47.142 ns/op
HpackEncoderBenchmark.encode false true false MEDIUM avgt 10 22385.146 ± 98.430 ns/op
HpackEncoderBenchmark.encode false true false LARGE avgt 10 408159.698 ± 12044.931 ns/op
HpackEncoderBenchmark.encode false false true SMALL avgt 10 544.213 ± 3.279 ns/op
HpackEncoderBenchmark.encode false false true MEDIUM avgt 10 2908.978 ± 31.026 ns/op
HpackEncoderBenchmark.encode false false true LARGE avgt 10 36471.262 ± 1044.010 ns/op
HpackEncoderBenchmark.encode false false false SMALL avgt 10 609.305 ± 4.371 ns/op
HpackEncoderBenchmark.encode false false false MEDIUM avgt 10 3223.946 ± 23.505 ns/op
HpackEncoderBenchmark.encode false false false LARGE avgt 10 39975.152 ± 655.196 ns/op
```
AFTER:
```
NEW AFTER
Benchmark (duplicates) (limitToAscii) (sensitive) (size) Mode Cnt Score Error Units
HpackEncoderBenchmark.encode true true true SMALL avgt 5 379.473 ± 133.815 ns/op
HpackEncoderBenchmark.encode true true true MEDIUM avgt 5 1118.772 ± 89.258 ns/op
HpackEncoderBenchmark.encode true true true LARGE avgt 5 5366.828 ± 89.746 ns/op
HpackEncoderBenchmark.encode true true false SMALL avgt 5 284.401 ± 2.088 ns/op
HpackEncoderBenchmark.encode true true false MEDIUM avgt 5 922.805 ± 10.796 ns/op
HpackEncoderBenchmark.encode true true false LARGE avgt 5 8727.831 ± 462.138 ns/op
HpackEncoderBenchmark.encode true false true SMALL avgt 5 337.093 ± 22.585 ns/op
HpackEncoderBenchmark.encode true false true MEDIUM avgt 5 693.689 ± 16.351 ns/op
HpackEncoderBenchmark.encode true false true LARGE avgt 5 5616.786 ± 98.647 ns/op
HpackEncoderBenchmark.encode true false false SMALL avgt 5 286.708 ± 13.765 ns/op
HpackEncoderBenchmark.encode true false false MEDIUM avgt 5 906.279 ± 32.338 ns/op
HpackEncoderBenchmark.encode true false false LARGE avgt 5 8304.736 ± 128.584 ns/op
HpackEncoderBenchmark.encode false true true SMALL avgt 5 351.381 ± 15.547 ns/op
HpackEncoderBenchmark.encode false true true MEDIUM avgt 5 1188.166 ± 7.023 ns/op
HpackEncoderBenchmark.encode false true true LARGE avgt 5 6876.009 ± 48.117 ns/op
HpackEncoderBenchmark.encode false true false SMALL avgt 5 434.759 ± 8.619 ns/op
HpackEncoderBenchmark.encode false true false MEDIUM avgt 5 954.588 ± 58.514 ns/op
HpackEncoderBenchmark.encode false true false LARGE avgt 5 8534.017 ± 552.597 ns/op
HpackEncoderBenchmark.encode false false true SMALL avgt 5 223.713 ± 4.823 ns/op
HpackEncoderBenchmark.encode false false true MEDIUM avgt 5 1181.538 ± 11.851 ns/op
HpackEncoderBenchmark.encode false false true LARGE avgt 5 6670.830 ± 267.927 ns/op
HpackEncoderBenchmark.encode false false false SMALL avgt 5 424.609 ± 27.477 ns/op
HpackEncoderBenchmark.encode false false false MEDIUM avgt 5 1003.578 ± 53.991 ns/op
HpackEncoderBenchmark.encode false false false LARGE avgt 5 8428.932 ± 102.838 ns/op
```1 parent 131be58 commit deea51e
File tree
4 files changed
+21
-9
lines changed- codec-http2/src
- main/java/io/netty/handler/codec/http2
- test/java/io/netty/handler/codec/http2
4 files changed
+21
-9
lines changedLines changed: 7 additions & 1 deletion
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
43 | 43 | | |
44 | 44 | | |
45 | 45 | | |
46 | | - | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
47 | 53 | | |
48 | 54 | | |
49 | 55 | | |
| |||
Lines changed: 8 additions & 4 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
54 | 54 | | |
55 | 55 | | |
56 | 56 | | |
| 57 | + | |
57 | 58 | | |
58 | 59 | | |
59 | 60 | | |
60 | 61 | | |
61 | 62 | | |
62 | 63 | | |
63 | 64 | | |
| 65 | + | |
64 | 66 | | |
65 | 67 | | |
66 | 68 | | |
| |||
76 | 78 | | |
77 | 79 | | |
78 | 80 | | |
79 | | - | |
| 81 | + | |
80 | 82 | | |
81 | 83 | | |
82 | 84 | | |
83 | 85 | | |
84 | 86 | | |
85 | | - | |
| 87 | + | |
86 | 88 | | |
87 | 89 | | |
88 | 90 | | |
| |||
91 | 93 | | |
92 | 94 | | |
93 | 95 | | |
| 96 | + | |
94 | 97 | | |
95 | 98 | | |
96 | 99 | | |
| |||
250 | 253 | | |
251 | 254 | | |
252 | 255 | | |
253 | | - | |
254 | | - | |
| 256 | + | |
| 257 | + | |
| 258 | + | |
255 | 259 | | |
256 | 260 | | |
257 | 261 | | |
| |||
Lines changed: 5 additions & 3 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
15 | 15 | | |
16 | 16 | | |
17 | 17 | | |
| 18 | + | |
18 | 19 | | |
19 | 20 | | |
20 | 21 | | |
| |||
65 | 66 | | |
66 | 67 | | |
67 | 68 | | |
| 69 | + | |
| 70 | + | |
68 | 71 | | |
69 | | - | |
| 72 | + | |
| 73 | + | |
70 | 74 | | |
71 | 75 | | |
72 | 76 | | |
73 | 77 | | |
74 | 78 | | |
75 | 79 | | |
76 | 80 | | |
77 | | - | |
78 | | - | |
79 | 81 | | |
80 | 82 | | |
81 | 83 | | |
| |||
Lines changed: 1 addition & 1 deletion
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
119 | 119 | | |
120 | 120 | | |
121 | 121 | | |
122 | | - | |
| 122 | + | |
123 | 123 | | |
124 | 124 | | |
125 | 125 | | |
| |||
0 commit comments