Commit b29cea5
committed
THRIFT-5828: reduce over-allocation in Go binary protocol
Due to a subtle caveat in buffer.Bytes the Go binary protocol method
ReadBinary() always over-allocated.
We now allocate the asked size directly up to 10 MiB, and then
maintain the malformed message protection by using a 10 MiB buffer
for larger asks.
The existing benchmarks show that we reduce allocations for small
payloads, and keep the edge case on a reasonable level at about 10MiB.
Ran the existing benchmarks in lib/go/thrift with and without this
change:
% go test -run X -bench . -benchmem > <file>
% benchcmp -changed old.txt new.txt
[...]
benchmark old allocs new allocs delta
BenchmarkSafeReadBytes/normal-20 5 2 -60.00%
BenchmarkSafeReadBytes/max-askedSize-20 8 3 -62.50%
BenchmarkBinaryBinary_0-20 4 1 -75.00%
BenchmarkBinaryBinary_1-20 4 1 -75.00%
BenchmarkBinaryBinary_2-20 5 2 -60.00%
BenchmarkCompactBinary0-20 4 1 -75.00%
BenchmarkCompactBinary1-20 4 1 -75.00%
BenchmarkCompactBinary2-20 5 2 -60.00%
BenchmarkSerializer/baseline-20 8 5 -37.50%
BenchmarkSerializer/plain-20 20 17 -15.00%
BenchmarkSerializer/pool-20 8 5 -37.50%
benchmark old bytes new bytes delta
BenchmarkSafeReadBytes/normal-20 1656 160 -90.34%
BenchmarkSafeReadBytes/max-askedSize-20 15992 10489910 +65494.73%
BenchmarkBinaryBinary_0-20 1608 160 -90.05%
BenchmarkBinaryBinary_1-20 1608 160 -90.05%
BenchmarkBinaryBinary_2-20 1634 184 -88.74%
BenchmarkCompactBinary0-20 1608 160 -90.05%
BenchmarkCompactBinary1-20 1608 160 -90.05%
BenchmarkCompactBinary2-20 1634 184 -88.74%
BenchmarkSerializer/baseline-20 1000 416 -58.40%
BenchmarkSerializer/plain-20 3640 3056 -16.04%
BenchmarkSerializer/pool-20 1002 417 -58.38%1 parent 7ec4177 commit b29cea5
1 file changed
+24
-3
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
555 | 555 | | |
556 | 556 | | |
557 | 557 | | |
558 | | - | |
559 | | - | |
560 | | - | |
| 558 | + | |
| 559 | + | |
| 560 | + | |
| 561 | + | |
| 562 | + | |
| 563 | + | |
| 564 | + | |
| 565 | + | |
| 566 | + | |
| 567 | + | |
| 568 | + | |
| 569 | + | |
| 570 | + | |
| 571 | + | |
| 572 | + | |
| 573 | + | |
| 574 | + | |
| 575 | + | |
| 576 | + | |
| 577 | + | |
| 578 | + | |
| 579 | + | |
| 580 | + | |
| 581 | + | |
561 | 582 | | |
0 commit comments