grpc/tools/codegen/core
Arjun Roy d527c1fbda Pre-compute static metadata index for hpack_encoder.
Originally, hpack_encoder would check if a metadata was static or not by
comparing its pointer to the known static metadata global table and checking if
it was within bounds. This check was performed regardless of if the metadata was
static or not, and is somewhat costly.

Instead, we now pre-compute the static metadata index during code generation
time, and store it with static metadata objects. We read that value only if we
are dealing with a static metadata flag (which we know from the storage type of
the grpc_mdelem).

This yields slightly faster metadata encoding:

BM_HpackEncoderEncodeHeader<EmptyBatch>/0/16384
[framing_bytes/iter:9 header_bytes/iter:0       ]              34.9ns ± 2%
34.2ns ± 1%  -2.04%        (p=0.000 n=20+20)
BM_HpackEncoderEncodeHeader<EmptyBatch>/1/16384
[framing_bytes/iter:9 header_bytes/iter:0       ]              34.9ns ± 2%
34.2ns ± 1%  -2.01%        (p=0.000 n=20+19)
BM_HpackEncoderEncodeHeader<SingleStaticElem>/0/16384
[framing_bytes/iter:9 header_bytes/iter:1       ]              50.6ns ± 0%
49.2ns ± 2%  -2.74%        (p=0.000 n=18+20)
BM_HpackEncoderEncodeHeader<SingleInternedKeyElem>/0/16384
[framing_bytes/iter:9 header_bytes/iter:6       ]              84.7ns ± 1%
83.5ns ± 1%  -1.43%        (p=0.000 n=20+20)
BM_HpackEncoderEncodeHeader<SingleInternedElem>/0/16384
[framing_bytes/iter:9 header_bytes/iter:1       ]              50.4ns ± 0%
47.9ns ± 0%  -4.83%        (p=0.000 n=18+17)
BM_HpackEncoderEncodeHeader<SingleInternedBinaryElem<1, false>>/0/16384
[framing_bytes/iter:9 header_bytes/iter:1       ]              51.1ns ± 2%
48.9ns ± 1%  -4.32%        (p=0.000 n=20+20)
BM_HpackEncoderEncodeHeader<SingleInternedBinaryElem<3, false>>/0/16384
[framing_bytes/iter:9 header_bytes/iter:1       ]              50.8ns ± 2%
48.8ns ± 2%  -3.88%        (p=0.000 n=19+20)
BM_HpackEncoderEncodeHeader<SingleInternedBinaryElem<10, false>>/0/16384
[framing_bytes/iter:9 header_bytes/iter:1       ]              50.2ns ± 1%
47.9ns ± 0%  -4.47%        (p=0.000 n=19+16)
BM_HpackEncoderEncodeHeader<SingleInternedBinaryElem<31, false>>/0/16384
[framing_bytes/iter:9 header_bytes/iter:1       ]              50.2ns ± 0%
47.9ns ± 0%  -4.46%        (p=0.000 n=18+16)
BM_HpackEncoderEncodeHeader<SingleInternedBinaryElem<100, false>>/0/16384
[framing_bytes/iter:9 header_bytes/iter:1       ]              50.2ns ± 0%
47.9ns ± 0%  -4.40%        (p=0.000 n=19+17)
BM_HpackEncoderEncodeHeader<SingleInternedBinaryElem<1, true>>/0/16384
[framing_bytes/iter:9 header_bytes/iter:1       ]              50.7ns ± 2%
48.8ns ± 2%  -3.81%        (p=0.000 n=20+20)
BM_HpackEncoderEncodeHeader<SingleInternedBinaryElem<3, true>>/0/16384
[framing_bytes/iter:9 header_bytes/iter:1       ]              50.9ns ± 2%
48.8ns ± 2%  -4.05%        (p=0.000 n=20+20)
BM_HpackEncoderEncodeHeader<SingleInternedBinaryElem<10, true>>/0/16384
[framing_bytes/iter:9 header_bytes/iter:1       ]              50.1ns ± 0%
48.0ns ± 1%  -4.27%        (p=0.000 n=17+17)
BM_HpackEncoderEncodeHeader<SingleInternedBinaryElem<31, true>>/0/16384
[framing_bytes/iter:9 header_bytes/iter:1       ]              50.1ns ± 0%
48.0ns ± 1%  -4.28%        (p=0.000 n=18+17)
BM_HpackEncoderEncodeHeader<SingleInternedBinaryElem<100, true>>/0/16384
[framing_bytes/iter:9 header_bytes/iter:1       ]              50.1ns ± 0%
48.0ns ± 0%  -4.33%        (p=0.000 n=18+17)
BM_HpackEncoderEncodeHeader<SingleNonInternedElem>/0/16384
[framing_bytes/iter:9 header_bytes/iter:9       ]              91.4ns ± 1%
90.7ns ± 1%  -0.79%        (p=0.000 n=18+20)
BM_HpackEncoderEncodeHeader<SingleNonInternedBinaryElem<1, false>>/0/16384
[framing_bytes/iter:9 header_bytes/iter:12      ]               116ns ± 1%
116ns ± 1%  -0.46%        (p=0.002 n=20+20)
BM_HpackEncoderEncodeHeader<SingleNonInternedBinaryElem<3, false>>/0/16384
[framing_bytes/iter:9 header_bytes/iter:14      ]               122ns ± 0%
121ns ± 0%  -0.69%        (p=0.000 n=20+20)
BM_HpackEncoderEncodeHeader<SingleNonInternedBinaryElem<10, false>>/0/16384
[framing_bytes/iter:9 header_bytes/iter:23      ]               144ns ± 1%
144ns ± 0%  -0.23%        (p=0.009 n=20+20)
BM_HpackEncoderEncodeHeader<SingleNonInternedBinaryElem<31, false>>/0/16384
[framing_bytes/iter:9 header_bytes/iter:46      ]               232ns ± 0%
232ns ± 1%  -0.26%        (p=0.021 n=18+19)
BM_HpackEncoderEncodeHeader<SingleNonInternedBinaryElem<1, true>>/0/16384
[framing_bytes/iter:9 header_bytes/iter:12      ]              92.9ns ± 1%
92.0ns ± 1%  -0.97%        (p=0.000 n=19+19)
BM_HpackEncoderEncodeHeader<SingleNonInternedBinaryElem<3, true>>/0/16384
[framing_bytes/iter:9 header_bytes/iter:14      ]              94.0ns ± 1%
92.6ns ± 1%  -1.45%        (p=0.000 n=20+19)
BM_HpackEncoderEncodeHeader<SingleNonInternedBinaryElem<10, true>>/0/16384
[framing_bytes/iter:9 header_bytes/iter:21      ]              93.9ns ± 2%
92.8ns ± 1%  -1.17%        (p=0.001 n=20+19)
BM_HpackEncoderEncodeHeader<SingleNonInternedBinaryElem<100, true>>/0/16384
[framing_bytes/iter:9 header_bytes/iter:111     ]               106ns ± 0%
105ns ± 3%  -1.15%        (p=0.000 n=18+20)
BM_HpackEncoderEncodeHeader<SingleNonInternedElem>/0/1
[framing_bytes/iter:81 header_bytes/iter:9      ]               355ns ± 1%
354ns ± 0%  -0.35%        (p=0.015 n=19+20)
BM_HpackEncoderEncodeHeader<RepresentativeClientInitialMetadata>/0/16384
[framing_bytes/iter:9 header_bytes/iter:8.00002 ]               139ns ± 1%
133ns ± 1%  -4.46%        (p=0.000 n=19+20)
BM_HpackEncoderEncodeHeader<MoreRepresentativeClientInitialMetadata>/0/16384
[framing_bytes/iter:9 header_bytes/iter:16      ]               236ns ± 1%
231ns ± 1%  -2.24%        (p=0.000 n=20+20)
BM_HpackEncoderEncodeHeader<RepresentativeServerInitialMetadata>/0/16384
[framing_bytes/iter:9 header_bytes/iter:3       ]              73.6ns ± 1%
70.5ns ± 1%  -4.14%        (p=0.000 n=20+20)
BM_HpackEncoderEncodeHeader<RepresentativeServerTrailingMetadata>/1/16384
[framing_bytes/iter:9 header_bytes/iter:1       ]              50.5ns ± 0%
49.2ns ± 2%  -2.60%        (p=0.000 n=16+20)
2019-06-28 14:23:17 -07:00
..
gen_header_frame.py yapf tools/codegen 2017-12-11 16:43:54 -08:00
gen_hpack_tables.cc Fix windows compile 2017-12-13 11:58:54 -08:00
gen_legal_metadata_characters.cc Fix windows compile 2017-12-13 11:58:54 -08:00
gen_nano_proto.sh try fix nanopb generation 2018-08-07 14:28:41 +02:00
gen_percent_encoding_tables.cc Fix windows compile 2017-12-13 11:58:54 -08:00
gen_server_registered_method_bad_client_test_body.py yapf tools/codegen 2017-12-11 16:43:54 -08:00
gen_settings_ids.py Upgrade yapf to 0.20.0 2018-01-02 14:40:00 -08:00
gen_static_metadata.py Pre-compute static metadata index for hpack_encoder. 2019-06-28 14:23:17 -07:00
gen_stats_data.py get rid of premature return in massage_qps_stats 2018-05-18 15:33:25 +02:00
gen_upb_api.sh Add upb generated code and build rule for lrs protocol. 2019-04-09 12:03:21 -07:00