Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

improve tracestate performance #4722

Merged
merged 13 commits into from Dec 2, 2023
Merged

Conversation

xiehuc
Copy link
Contributor

@xiehuc xiehuc commented Nov 16, 2023

Tracestate is essential logic that cannot be skipped in some scenarios that use tracestate. In the past, the implementation of tracestate did not prioritize performance, using complex regular expressions, causing its efficiency to be low. In some scenarios, too much CPU was wasted.

For example, even if it doesn't hit sampling, startServerSpan consumes 25% of the entire request CPU.
image

Typical server span tracestate:
image

Typical client span Propagation
image

It can be seen that the poor performance of tracestate is mainly due to regular expressions and member.String.

This CR can significantly improve Propagation by optimizing it in the following ways:

Use string.Builder to directly construct the result
Reduce the redundant copying during Insert
Avoid using regex
All unit tests pass. Benchmarks:

goos: linux
goarch: amd64
pkg: go.opentelemetry.io/otel/trace
cpu: Intel(R) Xeon(R) Platinum 8255C CPU @ 2.50GHz
                                                                   │  old-ts.txt   │           65bd30b-ts.txt            │
                                                                   │    sec/op     │   sec/op     vs base                │
TraceStateParse/duplicate_with_the_same_value-16                      2072.0n ± 1%   469.8n ± 0%  -77.33% (p=0.000 n=10)
TraceStateParse/duplicate_with_different_values-16                    2084.0n ± 1%   470.2n ± 1%  -77.44% (p=0.000 n=10)
TraceStateParse/improperly_formatted_key/value_pair-16                1109.0n ± 1%   629.2n ± 0%  -43.26% (p=0.000 n=10)
TraceStateParse/upper_case_key-16                                      832.4n ± 2%   621.9n ± 0%  -25.29% (p=0.000 n=10)
TraceStateParse/key_with_invalid_character-16                         1100.0n ± 0%   629.8n ± 0%  -42.74% (p=0.000 n=10)
TraceStateParse/multiple_keys,_one_with_empty_tenant_key-16           1149.0n ± 1%   631.7n ± 1%  -45.02% (p=0.000 n=10)
TraceStateParse/multiple_keys,_one_with_only_tenant-16                 861.9n ± 1%   621.9n ± 0%  -27.85% (p=0.000 n=10)
TraceStateParse/multiple_keys,_one_with_double_tenant_separator-16    1148.0n ± 1%   634.1n ± 1%  -44.76% (p=0.000 n=10)
TraceStateParse/multiple_keys,_one_with_multiple_tenants-16           1268.0n ± 1%   642.5n ± 0%  -49.33% (p=0.000 n=10)
TraceStateParse/key_too_long-16                                       7196.0n ± 1%   906.4n ± 0%  -87.40% (p=0.000 n=10)
TraceStateParse/key_too_long,_with_tenant-16                         28267.0n ± 1%   902.7n ± 0%  -96.81% (p=0.000 n=10)
TraceStateParse/tenant_too_long-16                                    3297.5n ± 3%   784.5n ± 0%  -76.21% (p=0.000 n=10)
TraceStateParse/multiple_values_for_a_single_key-16                   1352.0n ± 1%   634.5n ± 0%  -53.07% (p=0.000 n=10)
TraceStateParse/no_value-16                                           1144.5n ± 1%   618.4n ± 0%  -45.96% (p=0.000 n=10)
TraceStateParse/too_many_members-16                                   37.155µ ± 2%   7.718µ ± 0%  -79.23% (p=0.000 n=10)
TraceStateParse/valid_key/value_list-16                               5547.5n ± 1%   265.9n ± 0%  -95.21% (p=0.000 n=10)
TraceStateParse/valid_key/value_list_with_tenant-16                   8599.0n ± 1%   285.8n ± 0%  -96.68% (p=0.000 n=10)
TraceStateParse/empty_input-16                                         2.289n ± 1%   2.322n ± 1%   +1.42% (p=0.001 n=10)
TraceStateParse/single_key_and_value-16                                944.5n ± 0%   139.3n ± 0%  -85.25% (p=0.000 n=10)
TraceStateParse/single_key_and_value_with_empty_separator-16           973.8n ± 0%   138.2n ± 0%  -85.80% (p=0.000 n=10)
TraceStateParse/multiple_keys_and_values-16                           1888.5n ± 1%   297.2n ± 0%  -84.26% (p=0.000 n=10)
TraceStateParse/with_a_key_at_maximum_length-16                      12882.5n ± 1%   588.9n ± 0%  -95.43% (p=0.000 n=10)
TraceStateParse/with_a_key_and_tenant_at_maximum_length-16           27831.5n ± 1%   598.8n ± 1%  -97.85% (p=0.000 n=10)
TraceStateParse/with_maximum_members-16                               34.634µ ± 1%   6.717µ ± 0%  -80.61% (p=0.000 n=10)
TraceStateParse/with_several_members-16                               4938.5n ± 1%   766.4n ± 0%  -84.48% (p=0.000 n=10)
TraceStateParse/with_tabs_between_members-16                          2954.5n ± 0%   491.6n ± 0%  -83.36% (p=0.000 n=10)
TraceStateParse/with_multiple_tabs_between_members-16                 2950.5n ± 2%   491.3n ± 0%  -83.35% (p=0.000 n=10)
TraceStateParse/with_space_at_the_end_of_the_member-16                 963.4n ± 1%   138.8n ± 0%  -85.60% (p=0.000 n=10)
TraceStateParse/with_tab_at_the_end_of_the_member-16                   935.5n ± 1%   138.1n ± 1%  -85.24% (p=0.000 n=10)
TraceStateParse/with_tab_and_space_at_the_end_of_the_member-16         974.9n ± 1%   139.1n ± 0%  -85.73% (p=0.000 n=10)
TraceStateString/valid_key/value_list-16                              280.10n ± 1%   69.69n ± 0%  -75.12% (p=0.000 n=10)
TraceStateString/valid_key/value_list_with_tenant-16                  283.35n ± 1%   72.46n ± 0%  -74.43% (p=0.000 n=10)
TraceStateString/single_key_and_value-16                              246.45n ± 1%   29.57n ± 0%  -88.00% (p=0.000 n=10)
TraceStateString/single_key_and_value_with_empty_separator-16         244.60n ± 1%   29.61n ± 0%  -87.90% (p=0.000 n=10)
TraceStateString/multiple_keys_and_values-16                          536.55n ± 1%   48.22n ± 0%  -91.01% (p=0.000 n=10)
TraceStateString/with_a_key_at_maximum_length-16                       667.9n ± 1%   109.9n ± 1%  -83.54% (p=0.000 n=10)
TraceStateString/with_a_key_and_tenant_at_maximum_length-16            666.9n ± 1%   109.9n ± 1%  -83.52% (p=0.000 n=10)
TraceStateString/with_maximum_members-16                              7215.0n ± 1%   439.2n ± 0%  -93.91% (p=0.000 n=10)
TraceStateString/with_several_members-16                             1196.00n ± 1%   88.43n ± 0%  -92.61% (p=0.000 n=10)
TraceStateString/with_tabs_between_members-16                         745.65n ± 1%   63.42n ± 2%  -91.49% (p=0.000 n=10)
TraceStateString/with_multiple_tabs_between_members-16                747.85n ± 1%   63.45n ± 0%  -91.52% (p=0.000 n=10)
TraceStateString/with_space_at_the_end_of_the_member-16               245.25n ± 1%   29.66n ± 0%  -87.91% (p=0.000 n=10)
TraceStateString/with_tab_at_the_end_of_the_member-16                 244.75n ± 2%   29.56n ± 0%  -87.92% (p=0.000 n=10)
TraceStateString/with_tab_and_space_at_the_end_of_the_member-16       242.75n ± 1%   29.67n ± 1%  -87.78% (p=0.000 n=10)
TraceStateInsert/add_new-16                                            916.2n ± 1%   122.3n ± 1%  -86.66% (p=0.000 n=10)
TraceStateInsert/replace-16                                            491.4n ± 1%   123.6n ± 0%  -74.85% (p=0.000 n=10)
TraceStateInsert/invalid_key-16                                       584.40n ± 1%   20.07n ± 1%  -96.56% (p=0.000 n=10)
TraceStateInsert/invalid_value-16                                     627.70n ± 0%   20.14n ± 0%  -96.79% (p=0.000 n=10)
TraceStateInsert/invalid_key/value-16                                 587.20n ± 2%   20.18n ± 1%  -96.56% (p=0.000 n=10)
TraceStateInsert/drop_the_right-most_member(oldest)_in_queue-16        778.4n ± 1%   383.2n ± 1%  -50.77% (p=0.000 n=10)
geomean                                                                1.266µ        199.5n       -84.24%

                                                                   │   old-ts.txt    │              65bd30b-ts.txt               │
                                                                   │      B/op       │     B/op      vs base                     │
TraceStateParse/duplicate_with_the_same_value-16                        387.0 ± 0%       128.0 ± 0%   -66.93% (p=0.000 n=10)
TraceStateParse/duplicate_with_different_values-16                      387.0 ± 0%       128.0 ± 0%   -66.93% (p=0.000 n=10)
TraceStateParse/improperly_formatted_key/value_pair-16                  226.0 ± 0%       208.0 ± 0%    -7.96% (p=0.000 n=10)
TraceStateParse/upper_case_key-16                                       226.0 ± 0%       208.0 ± 0%    -7.96% (p=0.000 n=10)
TraceStateParse/key_with_invalid_character-16                           226.0 ± 0%       208.0 ± 0%    -7.96% (p=0.000 n=10)
TraceStateParse/multiple_keys,_one_with_empty_tenant_key-16             242.0 ± 0%       208.0 ± 0%   -14.05% (p=0.000 n=10)
TraceStateParse/multiple_keys,_one_with_only_tenant-16                  243.0 ± 0%       208.0 ± 0%   -14.40% (p=0.000 n=10)
TraceStateParse/multiple_keys,_one_with_double_tenant_separator-16      242.0 ± 0%       208.0 ± 0%   -14.05% (p=0.000 n=10)
TraceStateParse/multiple_keys,_one_with_multiple_tenants-16             242.0 ± 0%       208.0 ± 0%   -14.05% (p=0.000 n=10)
TraceStateParse/key_too_long-16                                        1358.0 ± 0%       752.0 ± 0%   -44.62% (p=0.000 n=10)
TraceStateParse/key_too_long,_with_tenant-16                           1325.0 ± 0%       720.0 ± 0%   -45.66% (p=0.000 n=10)
TraceStateParse/tenant_too_long-16                                      614.0 ± 0%       256.0 ± 0%   -58.31% (p=0.000 n=10)
TraceStateParse/multiple_values_for_a_single_key-16                     226.0 ± 0%       208.0 ± 0%    -7.96% (p=0.000 n=10)
TraceStateParse/no_value-16                                             226.0 ± 0%       192.0 ± 0%   -15.04% (p=0.000 n=10)
TraceStateParse/too_many_members-16                                  10.471Ki ± 0%     6.193Ki ± 0%   -40.85% (p=0.000 n=10)
TraceStateParse/valid_key/value_list-16                                161.00 ± 0%       32.00 ± 0%   -80.12% (p=0.000 n=10)
TraceStateParse/valid_key/value_list_with_tenant-16                    161.00 ± 1%       32.00 ± 0%   -80.12% (p=0.000 n=10)
TraceStateParse/empty_input-16                                          0.000 ± 0%       0.000 ± 0%         ~ (p=1.000 n=10) ¹
TraceStateParse/single_key_and_value-16                                161.00 ± 0%       32.00 ± 0%   -80.12% (p=0.000 n=10)
TraceStateParse/single_key_and_value_with_empty_separator-16           177.00 ± 0%       32.00 ± 0%   -81.92% (p=0.000 n=10)
TraceStateParse/multiple_keys_and_values-16                            355.00 ± 0%       96.00 ± 0%   -72.96% (p=0.000 n=10)
TraceStateParse/with_a_key_at_maximum_length-16                        355.00 ± 0%       96.00 ± 0%   -72.96% (p=0.000 n=10)
TraceStateParse/with_a_key_and_tenant_at_maximum_length-16             355.00 ± 0%       96.00 ± 0%   -72.96% (p=0.000 n=10)
TraceStateParse/with_maximum_members-16                               8.170Ki ± 0%     4.092Ki ± 0%   -49.92% (p=0.000 n=10)
TraceStateParse/with_several_members-16                                1129.5 ± 0%       480.0 ± 0%   -57.50% (p=0.000 n=10)
TraceStateParse/with_tabs_between_members-16                            613.0 ± 0%       224.0 ± 0%   -63.46% (p=0.000 n=10)
TraceStateParse/with_multiple_tabs_between_members-16                   613.0 ± 0%       224.0 ± 0%   -63.46% (p=0.000 n=10)
TraceStateParse/with_space_at_the_end_of_the_member-16                 161.00 ± 0%       32.00 ± 0%   -80.12% (p=0.000 n=10)
TraceStateParse/with_tab_at_the_end_of_the_member-16                   161.00 ± 0%       32.00 ± 0%   -80.12% (p=0.000 n=10)
TraceStateParse/with_tab_and_space_at_the_end_of_the_member-16         161.00 ± 0%       32.00 ± 0%   -80.12% (p=0.000 n=10)
TraceStateString/valid_key/value_list-16                                192.0 ± 0%       144.0 ± 0%   -25.00% (p=0.000 n=10)
TraceStateString/valid_key/value_list_with_tenant-16                    208.0 ± 0%       160.0 ± 0%   -23.08% (p=0.000 n=10)
TraceStateString/single_key_and_value-16                               53.000 ± 0%       5.000 ± 0%   -90.57% (p=0.000 n=10)
TraceStateString/single_key_and_value_with_empty_separator-16          53.000 ± 0%       5.000 ± 0%   -90.57% (p=0.000 n=10)
TraceStateString/multiple_keys_and_values-16                           120.00 ± 0%       16.00 ± 0%   -86.67% (p=0.000 n=10)
TraceStateString/with_a_key_at_maximum_length-16                        677.0 ± 0%       288.0 ± 0%   -57.46% (p=0.000 n=10)
TraceStateString/with_a_key_and_tenant_at_maximum_length-16             677.0 ± 0%       288.0 ± 0%   -57.46% (p=0.000 n=10)
TraceStateString/with_maximum_members-16                               2081.0 ± 0%       288.0 ± 0%   -86.16% (p=0.000 n=10)
TraceStateString/with_several_members-16                               304.00 ± 0%       32.00 ± 0%   -89.47% (p=0.000 n=10)
TraceStateString/with_tabs_between_members-16                          184.00 ± 0%       24.00 ± 0%   -86.96% (p=0.000 n=10)
TraceStateString/with_multiple_tabs_between_members-16                 184.00 ± 0%       24.00 ± 0%   -86.96% (p=0.000 n=10)
TraceStateString/with_space_at_the_end_of_the_member-16                53.000 ± 0%       5.000 ± 0%   -90.57% (p=0.000 n=10)
TraceStateString/with_tab_at_the_end_of_the_member-16                  53.000 ± 0%       5.000 ± 0%   -90.57% (p=0.000 n=10)
TraceStateString/with_tab_and_space_at_the_end_of_the_member-16        53.000 ± 0%       5.000 ± 0%   -90.57% (p=0.000 n=10)
TraceStateInsert/add_new-16                                             291.0 ± 0%       128.0 ± 0%   -56.01% (p=0.000 n=10)
TraceStateInsert/replace-16                                             96.00 ± 1%       96.00 ± 0%         ~ (p=0.211 n=10)
TraceStateInsert/invalid_key-16                                         80.00 ± 0%        0.00 ± 0%  -100.00% (p=0.000 n=10)
TraceStateInsert/invalid_value-16                                       80.00 ± 0%        0.00 ± 0%  -100.00% (p=0.000 n=10)
TraceStateInsert/invalid_key/value-16                                   80.00 ± 0%        0.00 ± 0%  -100.00% (p=0.000 n=10)
TraceStateInsert/drop_the_right-most_member(oldest)_in_queue-16       1.012Ki ± 0%     1.000Ki ± 0%    -1.16% (p=0.000 n=10)
geomean                                                                            ²                 ?                       ² ³
¹ all samples are equal
² summaries must be >0 to compute geomean
³ ratios must be >0 to compute geomean

                                                                   │  old-ts.txt   │             65bd30b-ts.txt              │
                                                                   │   allocs/op   │ allocs/op   vs base                     │
TraceStateParse/duplicate_with_the_same_value-16                      8.000 ± 0%     3.000 ± 0%   -62.50% (p=0.000 n=10)
TraceStateParse/duplicate_with_different_values-16                    8.000 ± 0%     3.000 ± 0%   -62.50% (p=0.000 n=10)
TraceStateParse/improperly_formatted_key/value_pair-16                6.000 ± 0%     5.000 ± 0%   -16.67% (p=0.000 n=10)
TraceStateParse/upper_case_key-16                                     6.000 ± 0%     5.000 ± 0%   -16.67% (p=0.000 n=10)
TraceStateParse/key_with_invalid_character-16                         6.000 ± 0%     5.000 ± 0%   -16.67% (p=0.000 n=10)
TraceStateParse/multiple_keys,_one_with_empty_tenant_key-16           6.000 ± 0%     5.000 ± 0%   -16.67% (p=0.000 n=10)
TraceStateParse/multiple_keys,_one_with_only_tenant-16                6.000 ± 0%     5.000 ± 0%   -16.67% (p=0.000 n=10)
TraceStateParse/multiple_keys,_one_with_double_tenant_separator-16    6.000 ± 0%     5.000 ± 0%   -16.67% (p=0.000 n=10)
TraceStateParse/multiple_keys,_one_with_multiple_tenants-16           6.000 ± 0%     5.000 ± 0%   -16.67% (p=0.000 n=10)
TraceStateParse/key_too_long-16                                      14.000 ± 0%     6.000 ± 0%   -57.14% (p=0.000 n=10)
TraceStateParse/key_too_long,_with_tenant-16                         14.000 ± 0%     6.000 ± 0%   -57.14% (p=0.000 n=10)
TraceStateParse/tenant_too_long-16                                   14.000 ± 0%     6.000 ± 0%   -57.14% (p=0.000 n=10)
TraceStateParse/multiple_values_for_a_single_key-16                   6.000 ± 0%     5.000 ± 0%   -16.67% (p=0.000 n=10)
TraceStateParse/no_value-16                                           6.000 ± 0%     5.000 ± 0%   -16.67% (p=0.000 n=10)
TraceStateParse/too_many_members-16                                   80.00 ± 0%     13.00 ± 0%   -83.75% (p=0.000 n=10)
TraceStateParse/valid_key/value_list-16                               4.000 ± 0%     1.000 ± 0%   -75.00% (p=0.000 n=10)
TraceStateParse/valid_key/value_list_with_tenant-16                   4.000 ± 0%     1.000 ± 0%   -75.00% (p=0.000 n=10)
TraceStateParse/empty_input-16                                        0.000 ± 0%     0.000 ± 0%         ~ (p=1.000 n=10) ¹
TraceStateParse/single_key_and_value-16                               4.000 ± 0%     1.000 ± 0%   -75.00% (p=0.000 n=10)
TraceStateParse/single_key_and_value_with_empty_separator-16          4.000 ± 0%     1.000 ± 0%   -75.00% (p=0.000 n=10)
TraceStateParse/multiple_keys_and_values-16                           7.000 ± 0%     2.000 ± 0%   -71.43% (p=0.000 n=10)
TraceStateParse/with_a_key_at_maximum_length-16                       7.000 ± 0%     2.000 ± 0%   -71.43% (p=0.000 n=10)
TraceStateParse/with_a_key_and_tenant_at_maximum_length-16            7.000 ± 0%     2.000 ± 0%   -71.43% (p=0.000 n=10)
TraceStateParse/with_maximum_members-16                               75.00 ± 0%     10.00 ± 0%   -86.67% (p=0.000 n=10)
TraceStateParse/with_several_members-16                              15.000 ± 0%     4.000 ± 0%   -73.33% (p=0.000 n=10)
TraceStateParse/with_tabs_between_members-16                         10.000 ± 0%     3.000 ± 0%   -70.00% (p=0.000 n=10)
TraceStateParse/with_multiple_tabs_between_members-16                10.000 ± 0%     3.000 ± 0%   -70.00% (p=0.000 n=10)
TraceStateParse/with_space_at_the_end_of_the_member-16                4.000 ± 0%     1.000 ± 0%   -75.00% (p=0.000 n=10)
TraceStateParse/with_tab_at_the_end_of_the_member-16                  4.000 ± 0%     1.000 ± 0%   -75.00% (p=0.000 n=10)
TraceStateParse/with_tab_and_space_at_the_end_of_the_member-16        4.000 ± 0%     1.000 ± 0%   -75.00% (p=0.000 n=10)
TraceStateString/valid_key/value_list-16                              4.000 ± 0%     1.000 ± 0%   -75.00% (p=0.000 n=10)
TraceStateString/valid_key/value_list_with_tenant-16                  4.000 ± 0%     1.000 ± 0%   -75.00% (p=0.000 n=10)
TraceStateString/single_key_and_value-16                              4.000 ± 0%     1.000 ± 0%   -75.00% (p=0.000 n=10)
TraceStateString/single_key_and_value_with_empty_separator-16         4.000 ± 0%     1.000 ± 0%   -75.00% (p=0.000 n=10)
TraceStateString/multiple_keys_and_values-16                          8.000 ± 0%     1.000 ± 0%   -87.50% (p=0.000 n=10)
TraceStateString/with_a_key_at_maximum_length-16                      8.000 ± 0%     1.000 ± 0%   -87.50% (p=0.000 n=10)
TraceStateString/with_a_key_and_tenant_at_maximum_length-16           8.000 ± 0%     1.000 ± 0%   -87.50% (p=0.000 n=10)
TraceStateString/with_maximum_members-16                             98.000 ± 0%     1.000 ± 0%   -98.98% (p=0.000 n=10)
TraceStateString/with_several_members-16                             17.000 ± 0%     1.000 ± 0%   -94.12% (p=0.000 n=10)
TraceStateString/with_tabs_between_members-16                        11.000 ± 0%     1.000 ± 0%   -90.91% (p=0.000 n=10)
TraceStateString/with_multiple_tabs_between_members-16               11.000 ± 0%     1.000 ± 0%   -90.91% (p=0.000 n=10)
TraceStateString/with_space_at_the_end_of_the_member-16               4.000 ± 0%     1.000 ± 0%   -75.00% (p=0.000 n=10)
TraceStateString/with_tab_at_the_end_of_the_member-16                 4.000 ± 0%     1.000 ± 0%   -75.00% (p=0.000 n=10)
TraceStateString/with_tab_and_space_at_the_end_of_the_member-16       4.000 ± 0%     1.000 ± 0%   -75.00% (p=0.000 n=10)
TraceStateInsert/add_new-16                                           2.000 ± 0%     1.000 ± 0%   -50.00% (p=0.000 n=10)
TraceStateInsert/replace-16                                           1.000 ± 0%     1.000 ± 0%         ~ (p=1.000 n=10) ¹
TraceStateInsert/invalid_key-16                                       3.000 ± 0%     0.000 ± 0%  -100.00% (p=0.000 n=10)
TraceStateInsert/invalid_value-16                                     3.000 ± 0%     0.000 ± 0%  -100.00% (p=0.000 n=10)
TraceStateInsert/invalid_key/value-16                                 3.000 ± 0%     0.000 ± 0%  -100.00% (p=0.000 n=10)
TraceStateInsert/drop_the_right-most_member(oldest)_in_queue-16       1.000 ± 0%     1.000 ± 0%         ~ (p=1.000 n=10) ¹
geomean                                                                          ²               ?                       ² ³
¹ all samples are equal
² summaries must be >0 to compute geomean
³ ratios must be >0 to compute geomean

It can be seen that the performance has improved by about 2-3 times.

* use string.Builder to directly construct the result

* reduce the redundant copying during Insert

* avoid using regex
Copy link

codecov bot commented Nov 16, 2023

Codecov Report

Merging #4722 (f633b60) into main (6027c1a) will increase coverage by 0.0%.
The diff coverage is 98.0%.

Additional details and impacted files

Impacted file tree graph

@@          Coverage Diff          @@
##            main   #4722   +/-   ##
=====================================
  Coverage   81.9%   81.9%           
=====================================
  Files        224     224           
  Lines      18136   18208   +72     
=====================================
+ Hits       14865   14930   +65     
- Misses      2984    2989    +5     
- Partials     287     289    +2     
Files Coverage Δ
trace/tracestate.go 95.7% <98.0%> (-4.3%) ⬇️

@dashpole dashpole added enhancement New feature or request area:trace Part of OpenTelemetry tracing labels Nov 16, 2023
Copy link
Contributor

@MrAlias MrAlias left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please use benchstat to make comparisons between benchmarks in your description.

CHANGELOG.md Outdated Show resolved Hide resolved
CHANGELOG.md Outdated Show resolved Hide resolved
trace/tracestate.go Show resolved Hide resolved
trace/tracestate.go Show resolved Hide resolved
@MrAlias
Copy link
Contributor

MrAlias commented Nov 16, 2023

The increases in allocations is concerning. The impact on GC is not captured in the benchmarks but will be when it is run on real systems.

@xiehuc
Copy link
Contributor Author

xiehuc commented Nov 17, 2023

goos: linux
goarch: amd64
pkg: go.opentelemetry.io/otel/trace
cpu: Intel(R) Xeon(R) Platinum 8255C CPU @ 2.50GHz
                                                                   │ /tmp/old-ts.txt │           /tmp/new-ts.txt           │
                                                                   │     sec/op      │   sec/op     vs base                │
TraceStateParse/duplicate_with_the_same_value-16                        2072.0n ± 1%   481.0n ± 1%  -76.79% (p=0.000 n=10)
TraceStateParse/duplicate_with_different_values-16                      2084.0n ± 1%   479.8n ± 1%  -76.98% (p=0.000 n=10)
TraceStateParse/improperly_formatted_key/value_pair-16                  1109.0n ± 1%   933.1n ± 1%  -15.87% (p=0.000 n=10)
TraceStateParse/upper_case_key-16                                        832.4n ± 2%   933.8n ± 1%  +12.18% (p=0.000 n=10)
TraceStateParse/key_with_invalid_character-16                           1100.0n ± 0%   937.5n ± 1%  -14.77% (p=0.000 n=10)
TraceStateParse/multiple_keys,_one_with_empty_tenant_key-16             1149.0n ± 1%   942.6n ± 0%  -17.96% (p=0.000 n=10)
TraceStateParse/multiple_keys,_one_with_only_tenant-16                   861.9n ± 1%   930.3n ± 1%   +7.94% (p=0.000 n=10)
TraceStateParse/multiple_keys,_one_with_double_tenant_separator-16      1148.0n ± 1%   949.7n ± 2%  -17.27% (p=0.000 n=10)
TraceStateParse/multiple_keys,_one_with_multiple_tenants-16             1268.0n ± 1%   943.9n ± 1%  -25.56% (p=0.000 n=10)
TraceStateParse/key_too_long-16                                          7.196µ ± 1%   1.267µ ± 1%  -82.40% (p=0.000 n=10)
TraceStateParse/key_too_long,_with_tenant-16                            28.267µ ± 1%   1.241µ ± 2%  -95.61% (p=0.000 n=10)
TraceStateParse/tenant_too_long-16                                       3.298µ ± 3%   1.076µ ± 1%  -67.38% (p=0.000 n=10)
TraceStateParse/multiple_values_for_a_single_key-16                     1352.0n ± 1%   948.2n ± 2%  -29.87% (p=0.000 n=10)
TraceStateParse/no_value-16                                             1144.5n ± 1%   871.3n ± 1%  -23.88% (p=0.000 n=10)
TraceStateParse/too_many_members-16                                     37.155µ ± 2%   7.883µ ± 1%  -78.78% (p=0.000 n=10)
TraceStateParse/valid_key/value_list-16                                 5547.5n ± 1%   296.1n ± 0%  -94.66% (p=0.000 n=10)
TraceStateParse/valid_key/value_list_with_tenant-16                     8599.0n ± 1%   323.5n ± 1%  -96.24% (p=0.000 n=10)
TraceStateParse/empty_input-16                                           2.289n ± 1%   2.630n ± 1%  +14.87% (p=0.000 n=10)
TraceStateParse/single_key_and_value-16                                  944.5n ± 0%   139.3n ± 2%  -85.25% (p=0.000 n=10)
TraceStateParse/single_key_and_value_with_empty_separator-16             973.8n ± 0%   138.2n ± 1%  -85.81% (p=0.000 n=10)
TraceStateParse/multiple_keys_and_values-16                             1888.5n ± 1%   299.0n ± 1%  -84.17% (p=0.000 n=10)
TraceStateParse/with_a_key_at_maximum_length-16                        12882.5n ± 1%   601.0n ± 1%  -95.34% (p=0.000 n=10)
TraceStateParse/with_a_key_and_tenant_at_maximum_length-16             27831.5n ± 1%   620.4n ± 1%  -97.77% (p=0.000 n=10)
TraceStateParse/with_maximum_members-16                                 34.634µ ± 1%   6.920µ ± 1%  -80.02% (p=0.000 n=10)
TraceStateParse/with_several_members-16                                 4938.5n ± 1%   776.6n ± 1%  -84.27% (p=0.000 n=10)
TraceStateParse/with_tabs_between_members-16                            2954.5n ± 0%   494.0n ± 1%  -83.28% (p=0.000 n=10)
TraceStateParse/with_multiple_tabs_between_members-16                   2950.5n ± 2%   498.2n ± 1%  -83.12% (p=0.000 n=10)
TraceStateParse/with_space_at_the_end_of_the_member-16                   963.4n ± 1%   138.6n ± 1%  -85.61% (p=0.000 n=10)
TraceStateParse/with_tab_at_the_end_of_the_member-16                     935.5n ± 1%   138.8n ± 1%  -85.16% (p=0.000 n=10)
TraceStateParse/with_tab_and_space_at_the_end_of_the_member-16           974.9n ± 1%   140.2n ± 3%  -85.62% (p=0.000 n=10)
TraceStateString/valid_key/value_list-16                                 280.1n ± 1%   107.3n ± 1%  -61.67% (p=0.000 n=10)
TraceStateString/valid_key/value_list_with_tenant-16                     283.3n ± 1%   113.3n ± 1%  -60.00% (p=0.000 n=10)
TraceStateString/single_key_and_value-16                                246.45n ± 1%   34.65n ± 1%  -85.94% (p=0.000 n=10)
TraceStateString/single_key_and_value_with_empty_separator-16           244.60n ± 1%   34.84n ± 2%  -85.76% (p=0.000 n=10)
TraceStateString/multiple_keys_and_values-16                            536.55n ± 1%   81.77n ± 1%  -84.76% (p=0.000 n=10)
TraceStateString/with_a_key_at_maximum_length-16                         667.9n ± 1%   136.8n ± 1%  -79.51% (p=0.000 n=10)
TraceStateString/with_a_key_and_tenant_at_maximum_length-16              666.9n ± 1%   135.8n ± 1%  -79.64% (p=0.000 n=10)
TraceStateString/with_maximum_members-16                                7215.0n ± 1%   797.6n ± 0%  -88.95% (p=0.000 n=10)
TraceStateString/with_several_members-16                                1196.0n ± 1%   161.4n ± 1%  -86.50% (p=0.000 n=10)
TraceStateString/with_tabs_between_members-16                            745.6n ± 1%   137.7n ± 1%  -81.54% (p=0.000 n=10)
TraceStateString/with_multiple_tabs_between_members-16                   747.9n ± 1%   137.1n ± 1%  -81.66% (p=0.000 n=10)
TraceStateString/with_space_at_the_end_of_the_member-16                 245.25n ± 1%   35.27n ± 2%  -85.62% (p=0.000 n=10)
TraceStateString/with_tab_at_the_end_of_the_member-16                   244.75n ± 2%   35.28n ± 1%  -85.58% (p=0.000 n=10)
TraceStateString/with_tab_and_space_at_the_end_of_the_member-16         242.75n ± 1%   35.23n ± 1%  -85.49% (p=0.000 n=10)
TraceStateInsert/add_new-16                                              916.2n ± 1%   129.2n ± 1%  -85.90% (p=0.000 n=10)
TraceStateInsert/replace-16                                              491.4n ± 1%   133.7n ± 1%  -72.78% (p=0.000 n=10)
TraceStateInsert/invalid_key-16                                          584.4n ± 1%   320.7n ± 1%  -45.13% (p=0.000 n=10)
TraceStateInsert/invalid_value-16                                        627.7n ± 0%   322.8n ± 1%  -48.57% (p=0.000 n=10)
TraceStateInsert/invalid_key/value-16                                    587.2n ± 2%   319.9n ± 1%  -45.52% (p=0.000 n=10)
TraceStateInsert/drop_the_right-most_member(oldest)_in_queue-16          778.4n ± 1%   402.8n ± 0%  -48.25% (p=0.000 n=10)
geomean                                                                  1.266µ        291.6n       -76.97%

                                                                   │ /tmp/old-ts.txt │            /tmp/new-ts.txt             │
                                                                   │      B/op       │     B/op      vs base                  │
TraceStateParse/duplicate_with_the_same_value-16                        387.0 ± 0%       128.0 ± 0%  -66.93% (p=0.000 n=10)
TraceStateParse/duplicate_with_different_values-16                      387.0 ± 0%       128.0 ± 0%  -66.93% (p=0.000 n=10)
TraceStateParse/improperly_formatted_key/value_pair-16                  226.0 ± 0%       288.0 ± 0%  +27.43% (p=0.000 n=10)
TraceStateParse/upper_case_key-16                                       226.0 ± 0%       288.0 ± 0%  +27.43% (p=0.000 n=10)
TraceStateParse/key_with_invalid_character-16                           226.0 ± 0%       288.0 ± 0%  +27.43% (p=0.000 n=10)
TraceStateParse/multiple_keys,_one_with_empty_tenant_key-16             242.0 ± 0%       288.0 ± 0%  +19.01% (p=0.000 n=10)
TraceStateParse/multiple_keys,_one_with_only_tenant-16                  243.0 ± 0%       288.0 ± 0%  +18.52% (p=0.000 n=10)
TraceStateParse/multiple_keys,_one_with_double_tenant_separator-16      242.0 ± 0%       288.0 ± 0%  +19.01% (p=0.000 n=10)
TraceStateParse/multiple_keys,_one_with_multiple_tenants-16             242.0 ± 0%       304.0 ± 0%  +25.62% (p=0.000 n=10)
TraceStateParse/key_too_long-16                                       1.326Ki ± 0%     1.062Ki ± 0%  -19.88% (p=0.000 n=10)
TraceStateParse/key_too_long,_with_tenant-16                          1.294Ki ± 0%     1.031Ki ± 0%  -20.30% (p=0.000 n=10)
TraceStateParse/tenant_too_long-16                                      614.0 ± 0%       352.0 ± 0%  -42.67% (p=0.000 n=10)
TraceStateParse/multiple_values_for_a_single_key-16                     226.0 ± 0%       304.0 ± 0%  +34.51% (p=0.000 n=10)
TraceStateParse/no_value-16                                             226.0 ± 0%       256.0 ± 0%  +13.27% (p=0.000 n=10)
TraceStateParse/too_many_members-16                                  10.471Ki ± 0%     6.193Ki ± 0%  -40.85% (p=0.000 n=10)
TraceStateParse/valid_key/value_list-16                                161.00 ± 0%       32.00 ± 0%  -80.12% (p=0.000 n=10)
TraceStateParse/valid_key/value_list_with_tenant-16                    161.00 ± 1%       32.00 ± 0%  -80.12% (p=0.000 n=10)
TraceStateParse/empty_input-16                                          0.000 ± 0%       0.000 ± 0%        ~ (p=1.000 n=10) ¹
TraceStateParse/single_key_and_value-16                                161.00 ± 0%       32.00 ± 0%  -80.12% (p=0.000 n=10)
TraceStateParse/single_key_and_value_with_empty_separator-16           177.00 ± 0%       32.00 ± 0%  -81.92% (p=0.000 n=10)
TraceStateParse/multiple_keys_and_values-16                            355.00 ± 0%       96.00 ± 0%  -72.96% (p=0.000 n=10)
TraceStateParse/with_a_key_at_maximum_length-16                        355.00 ± 0%       96.00 ± 0%  -72.96% (p=0.000 n=10)
TraceStateParse/with_a_key_and_tenant_at_maximum_length-16             355.00 ± 0%       96.00 ± 0%  -72.96% (p=0.000 n=10)
TraceStateParse/with_maximum_members-16                               8.170Ki ± 0%     4.092Ki ± 0%  -49.92% (p=0.000 n=10)
TraceStateParse/with_several_members-16                                1129.5 ± 0%       480.0 ± 0%  -57.50% (p=0.000 n=10)
TraceStateParse/with_tabs_between_members-16                            613.0 ± 0%       224.0 ± 0%  -63.46% (p=0.000 n=10)
TraceStateParse/with_multiple_tabs_between_members-16                   613.0 ± 0%       224.0 ± 0%  -63.46% (p=0.000 n=10)
TraceStateParse/with_space_at_the_end_of_the_member-16                 161.00 ± 0%       32.00 ± 0%  -80.12% (p=0.000 n=10)
TraceStateParse/with_tab_at_the_end_of_the_member-16                   161.00 ± 0%       32.00 ± 0%  -80.12% (p=0.000 n=10)
TraceStateParse/with_tab_and_space_at_the_end_of_the_member-16         161.00 ± 0%       32.00 ± 0%  -80.12% (p=0.000 n=10)
TraceStateString/valid_key/value_list-16                                192.0 ± 0%       192.0 ± 0%        ~ (p=1.000 n=10) ¹
TraceStateString/valid_key/value_list_with_tenant-16                    208.0 ± 0%       224.0 ± 0%   +7.69% (p=0.000 n=10)
TraceStateString/single_key_and_value-16                               53.000 ± 0%       8.000 ± 0%  -84.91% (p=0.000 n=10)
TraceStateString/single_key_and_value_with_empty_separator-16          53.000 ± 0%       8.000 ± 0%  -84.91% (p=0.000 n=10)
TraceStateString/multiple_keys_and_values-16                           120.00 ± 0%       24.00 ± 0%  -80.00% (p=0.000 n=10)
TraceStateString/with_a_key_at_maximum_length-16                        677.0 ± 0%       296.0 ± 0%  -56.28% (p=0.000 n=10)
TraceStateString/with_a_key_and_tenant_at_maximum_length-16             677.0 ± 0%       296.0 ± 0%  -56.28% (p=0.000 n=10)
TraceStateString/with_maximum_members-16                               2081.0 ± 0%      1016.0 ± 0%  -51.18% (p=0.000 n=10)
TraceStateString/with_several_members-16                               304.00 ± 0%       56.00 ± 0%  -81.58% (p=0.000 n=10)
TraceStateString/with_tabs_between_members-16                          184.00 ± 0%       56.00 ± 0%  -69.57% (p=0.000 n=10)
TraceStateString/with_multiple_tabs_between_members-16                 184.00 ± 0%       56.00 ± 0%  -69.57% (p=0.000 n=10)
TraceStateString/with_space_at_the_end_of_the_member-16                53.000 ± 0%       8.000 ± 0%  -84.91% (p=0.000 n=10)
TraceStateString/with_tab_at_the_end_of_the_member-16                  53.000 ± 0%       8.000 ± 0%  -84.91% (p=0.000 n=10)
TraceStateString/with_tab_and_space_at_the_end_of_the_member-16        53.000 ± 0%       8.000 ± 0%  -84.91% (p=0.000 n=10)
TraceStateInsert/add_new-16                                             291.0 ± 0%       128.0 ± 0%  -56.01% (p=0.000 n=10)
TraceStateInsert/replace-16                                             96.00 ± 1%       96.00 ± 0%        ~ (p=0.211 n=10)
TraceStateInsert/invalid_key-16                                         80.00 ± 0%       80.00 ± 0%        ~ (p=1.000 n=10) ¹
TraceStateInsert/invalid_value-16                                       80.00 ± 0%       80.00 ± 0%        ~ (p=1.000 n=10)
TraceStateInsert/invalid_key/value-16                                   80.00 ± 0%       80.00 ± 0%        ~ (p=1.000 n=10) ¹
TraceStateInsert/drop_the_right-most_member(oldest)_in_queue-16       1.012Ki ± 0%     1.000Ki ± 0%   -1.16% (p=0.000 n=10)
geomean                                                                            ²                 -54.16%                ²
¹ all samples are equal
² summaries must be >0 to compute geomean

                                                                   │ /tmp/old-ts.txt │           /tmp/new-ts.txt            │
                                                                   │    allocs/op    │ allocs/op   vs base                  │
TraceStateParse/duplicate_with_the_same_value-16                        8.000 ± 0%     3.000 ± 0%  -62.50% (p=0.000 n=10)
TraceStateParse/duplicate_with_different_values-16                      8.000 ± 0%     3.000 ± 0%  -62.50% (p=0.000 n=10)
TraceStateParse/improperly_formatted_key/value_pair-16                  6.000 ± 0%     8.000 ± 0%  +33.33% (p=0.000 n=10)
TraceStateParse/upper_case_key-16                                       6.000 ± 0%     8.000 ± 0%  +33.33% (p=0.000 n=10)
TraceStateParse/key_with_invalid_character-16                           6.000 ± 0%     8.000 ± 0%  +33.33% (p=0.000 n=10)
TraceStateParse/multiple_keys,_one_with_empty_tenant_key-16             6.000 ± 0%     8.000 ± 0%  +33.33% (p=0.000 n=10)
TraceStateParse/multiple_keys,_one_with_only_tenant-16                  6.000 ± 0%     8.000 ± 0%  +33.33% (p=0.000 n=10)
TraceStateParse/multiple_keys,_one_with_double_tenant_separator-16      6.000 ± 0%     8.000 ± 0%  +33.33% (p=0.000 n=10)
TraceStateParse/multiple_keys,_one_with_multiple_tenants-16             6.000 ± 0%     8.000 ± 0%  +33.33% (p=0.000 n=10)
TraceStateParse/key_too_long-16                                        14.000 ± 0%     9.000 ± 0%  -35.71% (p=0.000 n=10)
TraceStateParse/key_too_long,_with_tenant-16                           14.000 ± 0%     9.000 ± 0%  -35.71% (p=0.000 n=10)
TraceStateParse/tenant_too_long-16                                     14.000 ± 0%     9.000 ± 0%  -35.71% (p=0.000 n=10)
TraceStateParse/multiple_values_for_a_single_key-16                     6.000 ± 0%     8.000 ± 0%  +33.33% (p=0.000 n=10)
TraceStateParse/no_value-16                                             6.000 ± 0%     7.000 ± 0%  +16.67% (p=0.000 n=10)
TraceStateParse/too_many_members-16                                     80.00 ± 0%     13.00 ± 0%  -83.75% (p=0.000 n=10)
TraceStateParse/valid_key/value_list-16                                 4.000 ± 0%     1.000 ± 0%  -75.00% (p=0.000 n=10)
TraceStateParse/valid_key/value_list_with_tenant-16                     4.000 ± 0%     1.000 ± 0%  -75.00% (p=0.000 n=10)
TraceStateParse/empty_input-16                                          0.000 ± 0%     0.000 ± 0%        ~ (p=1.000 n=10) ¹
TraceStateParse/single_key_and_value-16                                 4.000 ± 0%     1.000 ± 0%  -75.00% (p=0.000 n=10)
TraceStateParse/single_key_and_value_with_empty_separator-16            4.000 ± 0%     1.000 ± 0%  -75.00% (p=0.000 n=10)
TraceStateParse/multiple_keys_and_values-16                             7.000 ± 0%     2.000 ± 0%  -71.43% (p=0.000 n=10)
TraceStateParse/with_a_key_at_maximum_length-16                         7.000 ± 0%     2.000 ± 0%  -71.43% (p=0.000 n=10)
TraceStateParse/with_a_key_and_tenant_at_maximum_length-16              7.000 ± 0%     2.000 ± 0%  -71.43% (p=0.000 n=10)
TraceStateParse/with_maximum_members-16                                 75.00 ± 0%     10.00 ± 0%  -86.67% (p=0.000 n=10)
TraceStateParse/with_several_members-16                                15.000 ± 0%     4.000 ± 0%  -73.33% (p=0.000 n=10)
TraceStateParse/with_tabs_between_members-16                           10.000 ± 0%     3.000 ± 0%  -70.00% (p=0.000 n=10)
TraceStateParse/with_multiple_tabs_between_members-16                  10.000 ± 0%     3.000 ± 0%  -70.00% (p=0.000 n=10)
TraceStateParse/with_space_at_the_end_of_the_member-16                  4.000 ± 0%     1.000 ± 0%  -75.00% (p=0.000 n=10)
TraceStateParse/with_tab_at_the_end_of_the_member-16                    4.000 ± 0%     1.000 ± 0%  -75.00% (p=0.000 n=10)
TraceStateParse/with_tab_and_space_at_the_end_of_the_member-16          4.000 ± 0%     1.000 ± 0%  -75.00% (p=0.000 n=10)
TraceStateString/valid_key/value_list-16                                4.000 ± 0%     2.000 ± 0%  -50.00% (p=0.000 n=10)
TraceStateString/valid_key/value_list_with_tenant-16                    4.000 ± 0%     2.000 ± 0%  -50.00% (p=0.000 n=10)
TraceStateString/single_key_and_value-16                                4.000 ± 0%     1.000 ± 0%  -75.00% (p=0.000 n=10)
TraceStateString/single_key_and_value_with_empty_separator-16           4.000 ± 0%     1.000 ± 0%  -75.00% (p=0.000 n=10)
TraceStateString/multiple_keys_and_values-16                            8.000 ± 0%     2.000 ± 0%  -75.00% (p=0.000 n=10)
TraceStateString/with_a_key_at_maximum_length-16                        8.000 ± 0%     2.000 ± 0%  -75.00% (p=0.000 n=10)
TraceStateString/with_a_key_and_tenant_at_maximum_length-16             8.000 ± 0%     2.000 ± 0%  -75.00% (p=0.000 n=10)
TraceStateString/with_maximum_members-16                               98.000 ± 0%     7.000 ± 0%  -92.86% (p=0.000 n=10)
TraceStateString/with_several_members-16                               17.000 ± 0%     3.000 ± 0%  -82.35% (p=0.000 n=10)
TraceStateString/with_tabs_between_members-16                          11.000 ± 0%     3.000 ± 0%  -72.73% (p=0.000 n=10)
TraceStateString/with_multiple_tabs_between_members-16                 11.000 ± 0%     3.000 ± 0%  -72.73% (p=0.000 n=10)
TraceStateString/with_space_at_the_end_of_the_member-16                 4.000 ± 0%     1.000 ± 0%  -75.00% (p=0.000 n=10)
TraceStateString/with_tab_at_the_end_of_the_member-16                   4.000 ± 0%     1.000 ± 0%  -75.00% (p=0.000 n=10)
TraceStateString/with_tab_and_space_at_the_end_of_the_member-16         4.000 ± 0%     1.000 ± 0%  -75.00% (p=0.000 n=10)
TraceStateInsert/add_new-16                                             2.000 ± 0%     1.000 ± 0%  -50.00% (p=0.000 n=10)
TraceStateInsert/replace-16                                             1.000 ± 0%     1.000 ± 0%        ~ (p=1.000 n=10) ¹
TraceStateInsert/invalid_key-16                                         3.000 ± 0%     3.000 ± 0%        ~ (p=1.000 n=10) ¹
TraceStateInsert/invalid_value-16                                       3.000 ± 0%     3.000 ± 0%        ~ (p=1.000 n=10) ¹
TraceStateInsert/invalid_key/value-16                                   3.000 ± 0%     3.000 ± 0%        ~ (p=1.000 n=10) ¹
TraceStateInsert/drop_the_right-most_member(oldest)_in_queue-16         1.000 ± 0%     1.000 ± 0%        ~ (p=1.000 n=10) ¹
geomean                                                                            ²               -56.83%                ²
¹ all samples are equal
² summaries must be >0 to compute geomean

@xiehuc
Copy link
Contributor Author

xiehuc commented Nov 17, 2023

original benchmark result

new-ts.txt
old-ts.txt

trace/tracestate.go Outdated Show resolved Hide resolved
trace/tracestate.go Outdated Show resolved Hide resolved
@MrAlias
Copy link
Contributor

MrAlias commented Nov 28, 2023

Please address the latest CI failures. Also, please provided updated benchmark results for the applied changes.

@xiehuc
Copy link
Contributor Author

xiehuc commented Nov 29, 2023

sorry forgot upload benchmark result. here it is

╰─❯ benchstat /tmp/old-ts.txt /tmp/new2-ts.txt                                                                                                                                                                                                               ─╯
goos: linux
goarch: amd64
pkg: go.opentelemetry.io/otel/trace
cpu: Intel(R) Xeon(R) Platinum 8255C CPU @ 2.50GHz
                                                                   │ /tmp/old-ts.txt │          /tmp/new2-ts.txt           │
                                                                   │     sec/op      │   sec/op     vs base                │
TraceStateParse/duplicate_with_the_same_value-16                        2072.0n ± 1%   478.3n ± 1%  -76.92% (p=0.000 n=10)
TraceStateParse/duplicate_with_different_values-16                      2084.0n ± 1%   480.8n ± 1%  -76.93% (p=0.000 n=10)
TraceStateParse/improperly_formatted_key/value_pair-16                  1109.0n ± 1%   642.4n ± 1%  -42.07% (p=0.000 n=10)
TraceStateParse/upper_case_key-16                                        832.4n ± 2%   632.4n ± 1%  -24.02% (p=0.000 n=10)
TraceStateParse/key_with_invalid_character-16                           1100.0n ± 0%   637.5n ± 1%  -42.05% (p=0.000 n=10)
TraceStateParse/multiple_keys,_one_with_empty_tenant_key-16             1149.0n ± 1%   636.8n ± 0%  -44.57% (p=0.000 n=10)
TraceStateParse/multiple_keys,_one_with_only_tenant-16                   861.9n ± 1%   627.8n ± 0%  -27.17% (p=0.000 n=10)
TraceStateParse/multiple_keys,_one_with_double_tenant_separator-16      1148.0n ± 1%   637.5n ± 0%  -44.47% (p=0.000 n=10)
TraceStateParse/multiple_keys,_one_with_multiple_tenants-16             1268.0n ± 1%   644.4n ± 0%  -49.18% (p=0.000 n=10)
TraceStateParse/key_too_long-16                                         7196.0n ± 1%   911.1n ± 0%  -87.34% (p=0.000 n=10)
TraceStateParse/key_too_long,_with_tenant-16                           28267.0n ± 1%   904.9n ± 0%  -96.80% (p=0.000 n=10)
TraceStateParse/tenant_too_long-16                                      3297.5n ± 3%   789.6n ± 0%  -76.05% (p=0.000 n=10)
TraceStateParse/multiple_values_for_a_single_key-16                     1352.0n ± 1%   640.2n ± 1%  -52.64% (p=0.000 n=10)
TraceStateParse/no_value-16                                             1144.5n ± 1%   623.4n ± 1%  -45.53% (p=0.000 n=10)
TraceStateParse/too_many_members-16                                     37.155µ ± 2%   7.835µ ± 2%  -78.91% (p=0.000 n=10)
TraceStateParse/valid_key/value_list-16                                 5547.5n ± 1%   272.4n ± 0%  -95.09% (p=0.000 n=10)
TraceStateParse/valid_key/value_list_with_tenant-16                     8599.0n ± 1%   292.3n ± 0%  -96.60% (p=0.000 n=10)
TraceStateParse/empty_input-16                                           2.289n ± 1%   2.285n ± 0%        ~ (p=0.402 n=10)
TraceStateParse/single_key_and_value-16                                  944.5n ± 0%   142.1n ± 1%  -84.95% (p=0.000 n=10)
TraceStateParse/single_key_and_value_with_empty_separator-16             973.8n ± 0%   141.1n ± 1%  -85.51% (p=0.000 n=10)
TraceStateParse/multiple_keys_and_values-16                             1888.5n ± 1%   303.2n ± 0%  -83.94% (p=0.000 n=10)
TraceStateParse/with_a_key_at_maximum_length-16                        12882.5n ± 1%   593.9n ± 0%  -95.39% (p=0.000 n=10)
TraceStateParse/with_a_key_and_tenant_at_maximum_length-16             27831.5n ± 1%   605.2n ± 0%  -97.83% (p=0.000 n=10)
TraceStateParse/with_maximum_members-16                                 34.634µ ± 1%   6.802µ ± 1%  -80.36% (p=0.000 n=10)
TraceStateParse/with_several_members-16                                 4938.5n ± 1%   773.0n ± 0%  -84.35% (p=0.000 n=10)
TraceStateParse/with_tabs_between_members-16                            2954.5n ± 0%   496.8n ± 1%  -83.19% (p=0.000 n=10)
TraceStateParse/with_multiple_tabs_between_members-16                   2950.5n ± 2%   494.6n ± 0%  -83.24% (p=0.000 n=10)
TraceStateParse/with_space_at_the_end_of_the_member-16                   963.4n ± 1%   139.9n ± 0%  -85.48% (p=0.000 n=10)
TraceStateParse/with_tab_at_the_end_of_the_member-16                     935.5n ± 1%   139.7n ± 1%  -85.07% (p=0.000 n=10)
TraceStateParse/with_tab_and_space_at_the_end_of_the_member-16           974.9n ± 1%   140.7n ± 1%  -85.57% (p=0.000 n=10)
TraceStateString/valid_key/value_list-16                                 280.1n ± 1%   104.0n ± 0%  -62.87% (p=0.000 n=10)
TraceStateString/valid_key/value_list_with_tenant-16                     283.3n ± 1%   109.9n ± 1%  -61.21% (p=0.000 n=10)
TraceStateString/single_key_and_value-16                                246.45n ± 1%   33.55n ± 0%  -86.39% (p=0.000 n=10)
TraceStateString/single_key_and_value_with_empty_separator-16           244.60n ± 1%   33.55n ± 0%  -86.29% (p=0.000 n=10)
TraceStateString/multiple_keys_and_values-16                            536.55n ± 1%   78.38n ± 0%  -85.39% (p=0.000 n=10)
TraceStateString/with_a_key_at_maximum_length-16                         667.9n ± 1%   131.9n ± 1%  -80.25% (p=0.000 n=10)
TraceStateString/with_a_key_and_tenant_at_maximum_length-16              666.9n ± 1%   131.5n ± 0%  -80.28% (p=0.000 n=10)
TraceStateString/with_maximum_members-16                                7215.0n ± 1%   781.8n ± 1%  -89.16% (p=0.000 n=10)
TraceStateString/with_several_members-16                                1196.0n ± 1%   157.2n ± 0%  -86.86% (p=0.000 n=10)
TraceStateString/with_tabs_between_members-16                            745.6n ± 1%   132.9n ± 1%  -82.17% (p=0.000 n=10)
TraceStateString/with_multiple_tabs_between_members-16                   747.9n ± 1%   132.5n ± 0%  -82.28% (p=0.000 n=10)
TraceStateString/with_space_at_the_end_of_the_member-16                 245.25n ± 1%   33.56n ± 0%  -86.31% (p=0.000 n=10)
TraceStateString/with_tab_at_the_end_of_the_member-16                   244.75n ± 2%   33.51n ± 1%  -86.31% (p=0.000 n=10)
TraceStateString/with_tab_and_space_at_the_end_of_the_member-16         242.75n ± 1%   33.49n ± 0%  -86.20% (p=0.000 n=10)
TraceStateInsert/add_new-16                                              916.2n ± 1%   122.4n ± 0%  -86.64% (p=0.000 n=10)
TraceStateInsert/replace-16                                              491.4n ± 1%   126.8n ± 0%  -74.20% (p=0.000 n=10)
TraceStateInsert/invalid_key-16                                         584.40n ± 1%   20.14n ± 0%  -96.55% (p=0.000 n=10)
TraceStateInsert/invalid_value-16                                       627.70n ± 0%   19.86n ± 1%  -96.84% (p=0.000 n=10)
TraceStateInsert/invalid_key/value-16                                   587.20n ± 2%   20.16n ± 1%  -96.57% (p=0.000 n=10)
TraceStateInsert/drop_the_right-most_member(oldest)_in_queue-16          778.4n ± 1%   387.8n ± 1%  -50.18% (p=0.000 n=10)
geomean                                                                  1.266µ        221.7n       -82.49%

                                                                   │ /tmp/old-ts.txt │             /tmp/new2-ts.txt              │
                                                                   │      B/op       │     B/op      vs base                     │
TraceStateParse/duplicate_with_the_same_value-16                        387.0 ± 0%       128.0 ± 0%   -66.93% (p=0.000 n=10)
TraceStateParse/duplicate_with_different_values-16                      387.0 ± 0%       128.0 ± 0%   -66.93% (p=0.000 n=10)
TraceStateParse/improperly_formatted_key/value_pair-16                  226.0 ± 0%       208.0 ± 0%    -7.96% (p=0.000 n=10)
TraceStateParse/upper_case_key-16                                       226.0 ± 0%       208.0 ± 0%    -7.96% (p=0.000 n=10)
TraceStateParse/key_with_invalid_character-16                           226.0 ± 0%       208.0 ± 0%    -7.96% (p=0.000 n=10)
TraceStateParse/multiple_keys,_one_with_empty_tenant_key-16             242.0 ± 0%       208.0 ± 0%   -14.05% (p=0.000 n=10)
TraceStateParse/multiple_keys,_one_with_only_tenant-16                  243.0 ± 0%       208.0 ± 0%   -14.40% (p=0.000 n=10)
TraceStateParse/multiple_keys,_one_with_double_tenant_separator-16      242.0 ± 0%       208.0 ± 0%   -14.05% (p=0.000 n=10)
TraceStateParse/multiple_keys,_one_with_multiple_tenants-16             242.0 ± 0%       208.0 ± 0%   -14.05% (p=0.000 n=10)
TraceStateParse/key_too_long-16                                        1358.0 ± 0%       752.0 ± 0%   -44.62% (p=0.000 n=10)
TraceStateParse/key_too_long,_with_tenant-16                           1325.0 ± 0%       720.0 ± 0%   -45.66% (p=0.000 n=10)
TraceStateParse/tenant_too_long-16                                      614.0 ± 0%       256.0 ± 0%   -58.31% (p=0.000 n=10)
TraceStateParse/multiple_values_for_a_single_key-16                     226.0 ± 0%       208.0 ± 0%    -7.96% (p=0.000 n=10)
TraceStateParse/no_value-16                                             226.0 ± 0%       192.0 ± 0%   -15.04% (p=0.000 n=10)
TraceStateParse/too_many_members-16                                  10.471Ki ± 0%     6.193Ki ± 0%   -40.85% (p=0.000 n=10)
TraceStateParse/valid_key/value_list-16                                161.00 ± 0%       32.00 ± 0%   -80.12% (p=0.000 n=10)
TraceStateParse/valid_key/value_list_with_tenant-16                    161.00 ± 1%       32.00 ± 0%   -80.12% (p=0.000 n=10)
TraceStateParse/empty_input-16                                          0.000 ± 0%       0.000 ± 0%         ~ (p=1.000 n=10) ¹
TraceStateParse/single_key_and_value-16                                161.00 ± 0%       32.00 ± 0%   -80.12% (p=0.000 n=10)
TraceStateParse/single_key_and_value_with_empty_separator-16           177.00 ± 0%       32.00 ± 0%   -81.92% (p=0.000 n=10)
TraceStateParse/multiple_keys_and_values-16                            355.00 ± 0%       96.00 ± 0%   -72.96% (p=0.000 n=10)
TraceStateParse/with_a_key_at_maximum_length-16                        355.00 ± 0%       96.00 ± 0%   -72.96% (p=0.000 n=10)
TraceStateParse/with_a_key_and_tenant_at_maximum_length-16             355.00 ± 0%       96.00 ± 0%   -72.96% (p=0.000 n=10)
TraceStateParse/with_maximum_members-16                               8.170Ki ± 0%     4.092Ki ± 0%   -49.92% (p=0.000 n=10)
TraceStateParse/with_several_members-16                                1129.5 ± 0%       480.0 ± 0%   -57.50% (p=0.000 n=10)
TraceStateParse/with_tabs_between_members-16                            613.0 ± 0%       224.0 ± 0%   -63.46% (p=0.000 n=10)
TraceStateParse/with_multiple_tabs_between_members-16                   613.0 ± 0%       224.0 ± 0%   -63.46% (p=0.000 n=10)
TraceStateParse/with_space_at_the_end_of_the_member-16                 161.00 ± 0%       32.00 ± 0%   -80.12% (p=0.000 n=10)
TraceStateParse/with_tab_at_the_end_of_the_member-16                   161.00 ± 0%       32.00 ± 0%   -80.12% (p=0.000 n=10)
TraceStateParse/with_tab_and_space_at_the_end_of_the_member-16         161.00 ± 0%       32.00 ± 0%   -80.12% (p=0.000 n=10)
TraceStateString/valid_key/value_list-16                                192.0 ± 0%       192.0 ± 0%         ~ (p=1.000 n=10) ¹
TraceStateString/valid_key/value_list_with_tenant-16                    208.0 ± 0%       224.0 ± 0%    +7.69% (p=0.000 n=10)
TraceStateString/single_key_and_value-16                               53.000 ± 0%       8.000 ± 0%   -84.91% (p=0.000 n=10)
TraceStateString/single_key_and_value_with_empty_separator-16          53.000 ± 0%       8.000 ± 0%   -84.91% (p=0.000 n=10)
TraceStateString/multiple_keys_and_values-16                           120.00 ± 0%       24.00 ± 0%   -80.00% (p=0.000 n=10)
TraceStateString/with_a_key_at_maximum_length-16                        677.0 ± 0%       296.0 ± 0%   -56.28% (p=0.000 n=10)
TraceStateString/with_a_key_and_tenant_at_maximum_length-16             677.0 ± 0%       296.0 ± 0%   -56.28% (p=0.000 n=10)
TraceStateString/with_maximum_members-16                               2081.0 ± 0%      1016.0 ± 0%   -51.18% (p=0.000 n=10)
TraceStateString/with_several_members-16                               304.00 ± 0%       56.00 ± 0%   -81.58% (p=0.000 n=10)
TraceStateString/with_tabs_between_members-16                          184.00 ± 0%       56.00 ± 0%   -69.57% (p=0.000 n=10)
TraceStateString/with_multiple_tabs_between_members-16                 184.00 ± 0%       56.00 ± 0%   -69.57% (p=0.000 n=10)
TraceStateString/with_space_at_the_end_of_the_member-16                53.000 ± 0%       8.000 ± 0%   -84.91% (p=0.000 n=10)
TraceStateString/with_tab_at_the_end_of_the_member-16                  53.000 ± 0%       8.000 ± 0%   -84.91% (p=0.000 n=10)
TraceStateString/with_tab_and_space_at_the_end_of_the_member-16        53.000 ± 0%       8.000 ± 0%   -84.91% (p=0.000 n=10)
TraceStateInsert/add_new-16                                             291.0 ± 0%       128.0 ± 0%   -56.01% (p=0.000 n=10)
TraceStateInsert/replace-16                                             96.00 ± 1%       96.00 ± 0%         ~ (p=0.211 n=10)
TraceStateInsert/invalid_key-16                                         80.00 ± 0%        0.00 ± 0%  -100.00% (p=0.000 n=10)
TraceStateInsert/invalid_value-16                                       80.00 ± 0%        0.00 ± 0%  -100.00% (p=0.000 n=10)
TraceStateInsert/invalid_key/value-16                                   80.00 ± 0%        0.00 ± 0%  -100.00% (p=0.000 n=10)
TraceStateInsert/drop_the_right-most_member(oldest)_in_queue-16       1.012Ki ± 0%     1.000Ki ± 0%    -1.16% (p=0.000 n=10)
geomean                                                                            ²                 ?                       ² ³
¹ all samples are equal
² summaries must be >0 to compute geomean
³ ratios must be >0 to compute geomean

                                                                   │ /tmp/old-ts.txt │            /tmp/new2-ts.txt             │
                                                                   │    allocs/op    │ allocs/op   vs base                     │
TraceStateParse/duplicate_with_the_same_value-16                        8.000 ± 0%     3.000 ± 0%   -62.50% (p=0.000 n=10)
TraceStateParse/duplicate_with_different_values-16                      8.000 ± 0%     3.000 ± 0%   -62.50% (p=0.000 n=10)
TraceStateParse/improperly_formatted_key/value_pair-16                  6.000 ± 0%     5.000 ± 0%   -16.67% (p=0.000 n=10)
TraceStateParse/upper_case_key-16                                       6.000 ± 0%     5.000 ± 0%   -16.67% (p=0.000 n=10)
TraceStateParse/key_with_invalid_character-16                           6.000 ± 0%     5.000 ± 0%   -16.67% (p=0.000 n=10)
TraceStateParse/multiple_keys,_one_with_empty_tenant_key-16             6.000 ± 0%     5.000 ± 0%   -16.67% (p=0.000 n=10)
TraceStateParse/multiple_keys,_one_with_only_tenant-16                  6.000 ± 0%     5.000 ± 0%   -16.67% (p=0.000 n=10)
TraceStateParse/multiple_keys,_one_with_double_tenant_separator-16      6.000 ± 0%     5.000 ± 0%   -16.67% (p=0.000 n=10)
TraceStateParse/multiple_keys,_one_with_multiple_tenants-16             6.000 ± 0%     5.000 ± 0%   -16.67% (p=0.000 n=10)
TraceStateParse/key_too_long-16                                        14.000 ± 0%     6.000 ± 0%   -57.14% (p=0.000 n=10)
TraceStateParse/key_too_long,_with_tenant-16                           14.000 ± 0%     6.000 ± 0%   -57.14% (p=0.000 n=10)
TraceStateParse/tenant_too_long-16                                     14.000 ± 0%     6.000 ± 0%   -57.14% (p=0.000 n=10)
TraceStateParse/multiple_values_for_a_single_key-16                     6.000 ± 0%     5.000 ± 0%   -16.67% (p=0.000 n=10)
TraceStateParse/no_value-16                                             6.000 ± 0%     5.000 ± 0%   -16.67% (p=0.000 n=10)
TraceStateParse/too_many_members-16                                     80.00 ± 0%     13.00 ± 0%   -83.75% (p=0.000 n=10)
TraceStateParse/valid_key/value_list-16                                 4.000 ± 0%     1.000 ± 0%   -75.00% (p=0.000 n=10)
TraceStateParse/valid_key/value_list_with_tenant-16                     4.000 ± 0%     1.000 ± 0%   -75.00% (p=0.000 n=10)
TraceStateParse/empty_input-16                                          0.000 ± 0%     0.000 ± 0%         ~ (p=1.000 n=10) ¹
TraceStateParse/single_key_and_value-16                                 4.000 ± 0%     1.000 ± 0%   -75.00% (p=0.000 n=10)
TraceStateParse/single_key_and_value_with_empty_separator-16            4.000 ± 0%     1.000 ± 0%   -75.00% (p=0.000 n=10)
TraceStateParse/multiple_keys_and_values-16                             7.000 ± 0%     2.000 ± 0%   -71.43% (p=0.000 n=10)
TraceStateParse/with_a_key_at_maximum_length-16                         7.000 ± 0%     2.000 ± 0%   -71.43% (p=0.000 n=10)
TraceStateParse/with_a_key_and_tenant_at_maximum_length-16              7.000 ± 0%     2.000 ± 0%   -71.43% (p=0.000 n=10)
TraceStateParse/with_maximum_members-16                                 75.00 ± 0%     10.00 ± 0%   -86.67% (p=0.000 n=10)
TraceStateParse/with_several_members-16                                15.000 ± 0%     4.000 ± 0%   -73.33% (p=0.000 n=10)
TraceStateParse/with_tabs_between_members-16                           10.000 ± 0%     3.000 ± 0%   -70.00% (p=0.000 n=10)
TraceStateParse/with_multiple_tabs_between_members-16                  10.000 ± 0%     3.000 ± 0%   -70.00% (p=0.000 n=10)
TraceStateParse/with_space_at_the_end_of_the_member-16                  4.000 ± 0%     1.000 ± 0%   -75.00% (p=0.000 n=10)
TraceStateParse/with_tab_at_the_end_of_the_member-16                    4.000 ± 0%     1.000 ± 0%   -75.00% (p=0.000 n=10)
TraceStateParse/with_tab_and_space_at_the_end_of_the_member-16          4.000 ± 0%     1.000 ± 0%   -75.00% (p=0.000 n=10)
TraceStateString/valid_key/value_list-16                                4.000 ± 0%     2.000 ± 0%   -50.00% (p=0.000 n=10)
TraceStateString/valid_key/value_list_with_tenant-16                    4.000 ± 0%     2.000 ± 0%   -50.00% (p=0.000 n=10)
TraceStateString/single_key_and_value-16                                4.000 ± 0%     1.000 ± 0%   -75.00% (p=0.000 n=10)
TraceStateString/single_key_and_value_with_empty_separator-16           4.000 ± 0%     1.000 ± 0%   -75.00% (p=0.000 n=10)
TraceStateString/multiple_keys_and_values-16                            8.000 ± 0%     2.000 ± 0%   -75.00% (p=0.000 n=10)
TraceStateString/with_a_key_at_maximum_length-16                        8.000 ± 0%     2.000 ± 0%   -75.00% (p=0.000 n=10)
TraceStateString/with_a_key_and_tenant_at_maximum_length-16             8.000 ± 0%     2.000 ± 0%   -75.00% (p=0.000 n=10)
TraceStateString/with_maximum_members-16                               98.000 ± 0%     7.000 ± 0%   -92.86% (p=0.000 n=10)
TraceStateString/with_several_members-16                               17.000 ± 0%     3.000 ± 0%   -82.35% (p=0.000 n=10)
TraceStateString/with_tabs_between_members-16                          11.000 ± 0%     3.000 ± 0%   -72.73% (p=0.000 n=10)
TraceStateString/with_multiple_tabs_between_members-16                 11.000 ± 0%     3.000 ± 0%   -72.73% (p=0.000 n=10)
TraceStateString/with_space_at_the_end_of_the_member-16                 4.000 ± 0%     1.000 ± 0%   -75.00% (p=0.000 n=10)
TraceStateString/with_tab_at_the_end_of_the_member-16                   4.000 ± 0%     1.000 ± 0%   -75.00% (p=0.000 n=10)
TraceStateString/with_tab_and_space_at_the_end_of_the_member-16         4.000 ± 0%     1.000 ± 0%   -75.00% (p=0.000 n=10)
TraceStateInsert/add_new-16                                             2.000 ± 0%     1.000 ± 0%   -50.00% (p=0.000 n=10)
TraceStateInsert/replace-16                                             1.000 ± 0%     1.000 ± 0%         ~ (p=1.000 n=10) ¹
TraceStateInsert/invalid_key-16                                         3.000 ± 0%     0.000 ± 0%  -100.00% (p=0.000 n=10)
TraceStateInsert/invalid_value-16                                       3.000 ± 0%     0.000 ± 0%  -100.00% (p=0.000 n=10)
TraceStateInsert/invalid_key/value-16                                   3.000 ± 0%     0.000 ± 0%  -100.00% (p=0.000 n=10)
TraceStateInsert/drop_the_right-most_member(oldest)_in_queue-16         1.000 ± 0%     1.000 ± 0%         ~ (p=1.000 n=10) ¹
geomean                                                                            ²               ?                       ² ³
¹ all samples are equal
² summaries must be >0 to compute geomean
³ ratios must be >0 to compute geomean

all case are better except only TraceStateString/valid_key/value_list_with_tenant-16

@xiehuc
Copy link
Contributor Author

xiehuc commented Nov 29, 2023

new2-ts.txt

@xiehuc
Copy link
Contributor Author

xiehuc commented Nov 29, 2023

@MrAlias all comment fixed, please check again, thanks

Co-authored-by: Tyler Yahn <MrAlias@users.noreply.github.com>
@xiehuc
Copy link
Contributor Author

xiehuc commented Nov 30, 2023

@MrAlias Yes,Committed the code

@MrAlias
Copy link
Contributor

MrAlias commented Nov 30, 2023

@MrAlias Yes,Committed the code

@xiehuc can you update the description with the latest benchmark results?

@xiehuc
Copy link
Contributor Author

xiehuc commented Nov 30, 2023

@MrAlias Here it is

goos: linux
goarch: amd64
pkg: go.opentelemetry.io/otel/trace
cpu: Intel(R) Xeon(R) Platinum 8255C CPU @ 2.50GHz
                                                                   │ /tmp/43a42e4-ts.txt │         /tmp/65bd30b-ts.txt         │
                                                                   │       sec/op        │   sec/op     vs base                │
TraceStateParse/duplicate_with_the_same_value-16                             470.1n ± 0%   469.8n ± 0%        ~ (p=0.985 n=10)
TraceStateParse/duplicate_with_different_values-16                           470.9n ± 0%   470.2n ± 1%        ~ (p=0.810 n=10)
TraceStateParse/improperly_formatted_key/value_pair-16                       631.8n ± 1%   629.2n ± 0%   -0.40% (p=0.009 n=10)
TraceStateParse/upper_case_key-16                                            622.0n ± 1%   621.9n ± 0%        ~ (p=0.670 n=10)
TraceStateParse/key_with_invalid_character-16                                631.4n ± 1%   629.8n ± 0%        ~ (p=0.089 n=10)
TraceStateParse/multiple_keys,_one_with_empty_tenant_key-16                  632.9n ± 0%   631.7n ± 1%        ~ (p=0.159 n=10)
TraceStateParse/multiple_keys,_one_with_only_tenant-16                       622.4n ± 0%   621.9n ± 0%        ~ (p=0.382 n=10)
TraceStateParse/multiple_keys,_one_with_double_tenant_separator-16           634.8n ± 0%   634.1n ± 1%        ~ (p=0.644 n=10)
TraceStateParse/multiple_keys,_one_with_multiple_tenants-16                  644.3n ± 1%   642.5n ± 0%   -0.28% (p=0.045 n=10)
TraceStateParse/key_too_long-16                                              908.0n ± 0%   906.4n ± 0%        ~ (p=0.060 n=10)
TraceStateParse/key_too_long,_with_tenant-16                                 902.2n ± 0%   902.7n ± 0%        ~ (p=0.725 n=10)
TraceStateParse/tenant_too_long-16                                           785.3n ± 0%   784.5n ± 0%        ~ (p=0.197 n=10)
TraceStateParse/multiple_values_for_a_single_key-16                          637.4n ± 0%   634.5n ± 0%   -0.45% (p=0.001 n=10)
TraceStateParse/no_value-16                                                  618.9n ± 0%   618.4n ± 0%        ~ (p=0.159 n=10)
TraceStateParse/too_many_members-16                                          7.725µ ± 0%   7.718µ ± 0%        ~ (p=0.541 n=10)
TraceStateParse/valid_key/value_list-16                                      268.2n ± 0%   265.9n ± 0%   -0.84% (p=0.000 n=10)
TraceStateParse/valid_key/value_list_with_tenant-16                          287.9n ± 0%   285.8n ± 0%   -0.69% (p=0.000 n=10)
TraceStateParse/empty_input-16                                               2.280n ± 0%   2.322n ± 1%   +1.82% (p=0.000 n=10)
TraceStateParse/single_key_and_value-16                                      140.8n ± 0%   139.3n ± 0%   -0.99% (p=0.000 n=10)
TraceStateParse/single_key_and_value_with_empty_separator-16                 139.2n ± 0%   138.2n ± 0%   -0.68% (p=0.001 n=10)
TraceStateParse/multiple_keys_and_values-16                                  299.7n ± 0%   297.2n ± 0%   -0.82% (p=0.000 n=10)
TraceStateParse/with_a_key_at_maximum_length-16                              588.7n ± 0%   588.9n ± 0%        ~ (p=0.912 n=10)
TraceStateParse/with_a_key_and_tenant_at_maximum_length-16                   598.7n ± 0%   598.8n ± 1%        ~ (p=0.697 n=10)
TraceStateParse/with_maximum_members-16                                      6.711µ ± 0%   6.717µ ± 0%        ~ (p=0.352 n=10)
TraceStateParse/with_several_members-16                                      768.0n ± 0%   766.4n ± 0%        ~ (p=0.093 n=10)
TraceStateParse/with_tabs_between_members-16                                 493.4n ± 0%   491.6n ± 0%   -0.36% (p=0.024 n=10)
TraceStateParse/with_multiple_tabs_between_members-16                        492.1n ± 0%   491.3n ± 0%   -0.16% (p=0.037 n=10)
TraceStateParse/with_space_at_the_end_of_the_member-16                       139.7n ± 0%   138.8n ± 0%   -0.64% (p=0.000 n=10)
TraceStateParse/with_tab_at_the_end_of_the_member-16                         139.3n ± 0%   138.1n ± 1%   -0.90% (p=0.000 n=10)
TraceStateParse/with_tab_and_space_at_the_end_of_the_member-16               140.0n ± 1%   139.1n ± 0%   -0.61% (p=0.001 n=10)
TraceStateString/valid_key/value_list-16                                    103.70n ± 0%   69.69n ± 0%  -32.80% (p=0.000 n=10)
TraceStateString/valid_key/value_list_with_tenant-16                        109.65n ± 0%   72.46n ± 0%  -33.92% (p=0.000 n=10)
TraceStateString/single_key_and_value-16                                     33.59n ± 0%   29.57n ± 0%  -11.95% (p=0.000 n=10)
TraceStateString/single_key_and_value_with_empty_separator-16                33.52n ± 0%   29.61n ± 0%  -11.67% (p=0.000 n=10)
TraceStateString/multiple_keys_and_values-16                                 78.08n ± 1%   48.22n ± 0%  -38.24% (p=0.000 n=10)
TraceStateString/with_a_key_at_maximum_length-16                             131.0n ± 1%   109.9n ± 1%  -16.11% (p=0.000 n=10)
TraceStateString/with_a_key_and_tenant_at_maximum_length-16                  130.8n ± 0%   109.9n ± 1%  -16.01% (p=0.000 n=10)
TraceStateString/with_maximum_members-16                                     778.0n ± 0%   439.2n ± 0%  -43.54% (p=0.000 n=10)
TraceStateString/with_several_members-16                                    156.70n ± 0%   88.43n ± 0%  -43.57% (p=0.000 n=10)
TraceStateString/with_tabs_between_members-16                               132.40n ± 0%   63.42n ± 2%  -52.10% (p=0.000 n=10)
TraceStateString/with_multiple_tabs_between_members-16                      132.35n ± 0%   63.45n ± 0%  -52.06% (p=0.000 n=10)
TraceStateString/with_space_at_the_end_of_the_member-16                      33.50n ± 0%   29.66n ± 0%  -11.46% (p=0.000 n=10)
TraceStateString/with_tab_at_the_end_of_the_member-16                        33.53n ± 0%   29.56n ± 0%  -11.84% (p=0.000 n=10)
TraceStateString/with_tab_and_space_at_the_end_of_the_member-16              33.59n ± 0%   29.67n ± 1%  -11.67% (p=0.000 n=10)
TraceStateInsert/add_new-16                                                  122.3n ± 1%   122.3n ± 1%        ~ (p=0.540 n=10)
TraceStateInsert/replace-16                                                  126.5n ± 0%   123.6n ± 0%   -2.25% (p=0.000 n=10)
TraceStateInsert/invalid_key-16                                              20.09n ± 1%   20.07n ± 1%        ~ (p=0.868 n=10)
TraceStateInsert/invalid_value-16                                            19.78n ± 0%   20.14n ± 0%   +1.85% (p=0.000 n=10)
TraceStateInsert/invalid_key/value-16                                        20.18n ± 1%   20.18n ± 1%        ~ (p=0.617 n=10)
TraceStateInsert/drop_the_right-most_member(oldest)_in_queue-16              386.8n ± 0%   383.2n ± 1%   -0.93% (p=0.000 n=10)
geomean                                                                      220.3n        199.5n        -9.46%

                                                                   │ /tmp/43a42e4-ts.txt │          /tmp/65bd30b-ts.txt           │
                                                                   │        B/op         │     B/op      vs base                  │
TraceStateParse/duplicate_with_the_same_value-16                            128.0 ± 0%       128.0 ± 0%        ~ (p=1.000 n=10) ¹
TraceStateParse/duplicate_with_different_values-16                          128.0 ± 0%       128.0 ± 0%        ~ (p=1.000 n=10) ¹
TraceStateParse/improperly_formatted_key/value_pair-16                      208.0 ± 0%       208.0 ± 0%        ~ (p=1.000 n=10) ¹
TraceStateParse/upper_case_key-16                                           208.0 ± 0%       208.0 ± 0%        ~ (p=1.000 n=10) ¹
TraceStateParse/key_with_invalid_character-16                               208.0 ± 0%       208.0 ± 0%        ~ (p=1.000 n=10) ¹
TraceStateParse/multiple_keys,_one_with_empty_tenant_key-16                 208.0 ± 0%       208.0 ± 0%        ~ (p=1.000 n=10) ¹
TraceStateParse/multiple_keys,_one_with_only_tenant-16                      208.0 ± 0%       208.0 ± 0%        ~ (p=1.000 n=10) ¹
TraceStateParse/multiple_keys,_one_with_double_tenant_separator-16          208.0 ± 0%       208.0 ± 0%        ~ (p=1.000 n=10) ¹
TraceStateParse/multiple_keys,_one_with_multiple_tenants-16                 208.0 ± 0%       208.0 ± 0%        ~ (p=1.000 n=10) ¹
TraceStateParse/key_too_long-16                                             752.0 ± 0%       752.0 ± 0%        ~ (p=1.000 n=10) ¹
TraceStateParse/key_too_long,_with_tenant-16                                720.0 ± 0%       720.0 ± 0%        ~ (p=1.000 n=10) ¹
TraceStateParse/tenant_too_long-16                                          256.0 ± 0%       256.0 ± 0%        ~ (p=1.000 n=10) ¹
TraceStateParse/multiple_values_for_a_single_key-16                         208.0 ± 0%       208.0 ± 0%        ~ (p=1.000 n=10) ¹
TraceStateParse/no_value-16                                                 192.0 ± 0%       192.0 ± 0%        ~ (p=1.000 n=10) ¹
TraceStateParse/too_many_members-16                                       6.193Ki ± 0%     6.193Ki ± 0%        ~ (p=1.000 n=10)
TraceStateParse/valid_key/value_list-16                                     32.00 ± 0%       32.00 ± 0%        ~ (p=1.000 n=10) ¹
TraceStateParse/valid_key/value_list_with_tenant-16                         32.00 ± 0%       32.00 ± 0%        ~ (p=1.000 n=10) ¹
TraceStateParse/empty_input-16                                              0.000 ± 0%       0.000 ± 0%        ~ (p=1.000 n=10) ¹
TraceStateParse/single_key_and_value-16                                     32.00 ± 0%       32.00 ± 0%        ~ (p=1.000 n=10) ¹
TraceStateParse/single_key_and_value_with_empty_separator-16                32.00 ± 0%       32.00 ± 0%        ~ (p=1.000 n=10) ¹
TraceStateParse/multiple_keys_and_values-16                                 96.00 ± 0%       96.00 ± 0%        ~ (p=1.000 n=10) ¹
TraceStateParse/with_a_key_at_maximum_length-16                             96.00 ± 0%       96.00 ± 0%        ~ (p=1.000 n=10) ¹
TraceStateParse/with_a_key_and_tenant_at_maximum_length-16                  96.00 ± 0%       96.00 ± 0%        ~ (p=1.000 n=10) ¹
TraceStateParse/with_maximum_members-16                                   4.092Ki ± 0%     4.092Ki ± 0%        ~ (p=0.526 n=10)
TraceStateParse/with_several_members-16                                     480.0 ± 0%       480.0 ± 0%        ~ (p=1.000 n=10) ¹
TraceStateParse/with_tabs_between_members-16                                224.0 ± 0%       224.0 ± 0%        ~ (p=1.000 n=10) ¹
TraceStateParse/with_multiple_tabs_between_members-16                       224.0 ± 0%       224.0 ± 0%        ~ (p=1.000 n=10) ¹
TraceStateParse/with_space_at_the_end_of_the_member-16                      32.00 ± 0%       32.00 ± 0%        ~ (p=1.000 n=10) ¹
TraceStateParse/with_tab_at_the_end_of_the_member-16                        32.00 ± 0%       32.00 ± 0%        ~ (p=1.000 n=10) ¹
TraceStateParse/with_tab_and_space_at_the_end_of_the_member-16              32.00 ± 0%       32.00 ± 0%        ~ (p=1.000 n=10) ¹
TraceStateString/valid_key/value_list-16                                    192.0 ± 0%       144.0 ± 0%  -25.00% (p=0.000 n=10)
TraceStateString/valid_key/value_list_with_tenant-16                        224.0 ± 0%       160.0 ± 0%  -28.57% (p=0.000 n=10)
TraceStateString/single_key_and_value-16                                    8.000 ± 0%       5.000 ± 0%  -37.50% (p=0.000 n=10)
TraceStateString/single_key_and_value_with_empty_separator-16               8.000 ± 0%       5.000 ± 0%  -37.50% (p=0.000 n=10)
TraceStateString/multiple_keys_and_values-16                                24.00 ± 0%       16.00 ± 0%  -33.33% (p=0.000 n=10)
TraceStateString/with_a_key_at_maximum_length-16                            296.0 ± 0%       288.0 ± 0%   -2.70% (p=0.000 n=10)
TraceStateString/with_a_key_and_tenant_at_maximum_length-16                 296.0 ± 0%       288.0 ± 0%   -2.70% (p=0.000 n=10)
TraceStateString/with_maximum_members-16                                   1016.0 ± 0%       288.0 ± 0%  -71.65% (p=0.000 n=10)
TraceStateString/with_several_members-16                                    56.00 ± 0%       32.00 ± 0%  -42.86% (p=0.000 n=10)
TraceStateString/with_tabs_between_members-16                               56.00 ± 0%       24.00 ± 0%  -57.14% (p=0.000 n=10)
TraceStateString/with_multiple_tabs_between_members-16                      56.00 ± 0%       24.00 ± 0%  -57.14% (p=0.000 n=10)
TraceStateString/with_space_at_the_end_of_the_member-16                     8.000 ± 0%       5.000 ± 0%  -37.50% (p=0.000 n=10)
TraceStateString/with_tab_at_the_end_of_the_member-16                       8.000 ± 0%       5.000 ± 0%  -37.50% (p=0.000 n=10)
TraceStateString/with_tab_and_space_at_the_end_of_the_member-16             8.000 ± 0%       5.000 ± 0%  -37.50% (p=0.000 n=10)
TraceStateInsert/add_new-16                                                 128.0 ± 0%       128.0 ± 0%        ~ (p=1.000 n=10) ¹
TraceStateInsert/replace-16                                                 96.00 ± 0%       96.00 ± 0%        ~ (p=1.000 n=10) ¹
TraceStateInsert/invalid_key-16                                             0.000 ± 0%       0.000 ± 0%        ~ (p=1.000 n=10) ¹
TraceStateInsert/invalid_value-16                                           0.000 ± 0%       0.000 ± 0%        ~ (p=1.000 n=10) ¹
TraceStateInsert/invalid_key/value-16                                       0.000 ± 0%       0.000 ± 0%        ~ (p=1.000 n=10) ¹
TraceStateInsert/drop_the_right-most_member(oldest)_in_queue-16           1.000Ki ± 0%     1.000Ki ± 0%        ~ (p=1.000 n=10) ¹
geomean                                                                                ²                 -12.98%                ²
¹ all samples are equal
² summaries must be >0 to compute geomean

                                                                   │ /tmp/43a42e4-ts.txt │         /tmp/65bd30b-ts.txt          │
                                                                   │      allocs/op      │ allocs/op   vs base                  │
TraceStateParse/duplicate_with_the_same_value-16                            3.000 ± 0%     3.000 ± 0%        ~ (p=1.000 n=10) ¹
TraceStateParse/duplicate_with_different_values-16                          3.000 ± 0%     3.000 ± 0%        ~ (p=1.000 n=10) ¹
TraceStateParse/improperly_formatted_key/value_pair-16                      5.000 ± 0%     5.000 ± 0%        ~ (p=1.000 n=10) ¹
TraceStateParse/upper_case_key-16                                           5.000 ± 0%     5.000 ± 0%        ~ (p=1.000 n=10) ¹
TraceStateParse/key_with_invalid_character-16                               5.000 ± 0%     5.000 ± 0%        ~ (p=1.000 n=10) ¹
TraceStateParse/multiple_keys,_one_with_empty_tenant_key-16                 5.000 ± 0%     5.000 ± 0%        ~ (p=1.000 n=10) ¹
TraceStateParse/multiple_keys,_one_with_only_tenant-16                      5.000 ± 0%     5.000 ± 0%        ~ (p=1.000 n=10) ¹
TraceStateParse/multiple_keys,_one_with_double_tenant_separator-16          5.000 ± 0%     5.000 ± 0%        ~ (p=1.000 n=10) ¹
TraceStateParse/multiple_keys,_one_with_multiple_tenants-16                 5.000 ± 0%     5.000 ± 0%        ~ (p=1.000 n=10) ¹
TraceStateParse/key_too_long-16                                             6.000 ± 0%     6.000 ± 0%        ~ (p=1.000 n=10) ¹
TraceStateParse/key_too_long,_with_tenant-16                                6.000 ± 0%     6.000 ± 0%        ~ (p=1.000 n=10) ¹
TraceStateParse/tenant_too_long-16                                          6.000 ± 0%     6.000 ± 0%        ~ (p=1.000 n=10) ¹
TraceStateParse/multiple_values_for_a_single_key-16                         5.000 ± 0%     5.000 ± 0%        ~ (p=1.000 n=10) ¹
TraceStateParse/no_value-16                                                 5.000 ± 0%     5.000 ± 0%        ~ (p=1.000 n=10) ¹
TraceStateParse/too_many_members-16                                         13.00 ± 0%     13.00 ± 0%        ~ (p=1.000 n=10) ¹
TraceStateParse/valid_key/value_list-16                                     1.000 ± 0%     1.000 ± 0%        ~ (p=1.000 n=10) ¹
TraceStateParse/valid_key/value_list_with_tenant-16                         1.000 ± 0%     1.000 ± 0%        ~ (p=1.000 n=10) ¹
TraceStateParse/empty_input-16                                              0.000 ± 0%     0.000 ± 0%        ~ (p=1.000 n=10) ¹
TraceStateParse/single_key_and_value-16                                     1.000 ± 0%     1.000 ± 0%        ~ (p=1.000 n=10) ¹
TraceStateParse/single_key_and_value_with_empty_separator-16                1.000 ± 0%     1.000 ± 0%        ~ (p=1.000 n=10) ¹
TraceStateParse/multiple_keys_and_values-16                                 2.000 ± 0%     2.000 ± 0%        ~ (p=1.000 n=10) ¹
TraceStateParse/with_a_key_at_maximum_length-16                             2.000 ± 0%     2.000 ± 0%        ~ (p=1.000 n=10) ¹
TraceStateParse/with_a_key_and_tenant_at_maximum_length-16                  2.000 ± 0%     2.000 ± 0%        ~ (p=1.000 n=10) ¹
TraceStateParse/with_maximum_members-16                                     10.00 ± 0%     10.00 ± 0%        ~ (p=1.000 n=10) ¹
TraceStateParse/with_several_members-16                                     4.000 ± 0%     4.000 ± 0%        ~ (p=1.000 n=10) ¹
TraceStateParse/with_tabs_between_members-16                                3.000 ± 0%     3.000 ± 0%        ~ (p=1.000 n=10) ¹
TraceStateParse/with_multiple_tabs_between_members-16                       3.000 ± 0%     3.000 ± 0%        ~ (p=1.000 n=10) ¹
TraceStateParse/with_space_at_the_end_of_the_member-16                      1.000 ± 0%     1.000 ± 0%        ~ (p=1.000 n=10) ¹
TraceStateParse/with_tab_at_the_end_of_the_member-16                        1.000 ± 0%     1.000 ± 0%        ~ (p=1.000 n=10) ¹
TraceStateParse/with_tab_and_space_at_the_end_of_the_member-16              1.000 ± 0%     1.000 ± 0%        ~ (p=1.000 n=10) ¹
TraceStateString/valid_key/value_list-16                                    2.000 ± 0%     1.000 ± 0%  -50.00% (p=0.000 n=10)
TraceStateString/valid_key/value_list_with_tenant-16                        2.000 ± 0%     1.000 ± 0%  -50.00% (p=0.000 n=10)
TraceStateString/single_key_and_value-16                                    1.000 ± 0%     1.000 ± 0%        ~ (p=1.000 n=10) ¹
TraceStateString/single_key_and_value_with_empty_separator-16               1.000 ± 0%     1.000 ± 0%        ~ (p=1.000 n=10) ¹
TraceStateString/multiple_keys_and_values-16                                2.000 ± 0%     1.000 ± 0%  -50.00% (p=0.000 n=10)
TraceStateString/with_a_key_at_maximum_length-16                            2.000 ± 0%     1.000 ± 0%  -50.00% (p=0.000 n=10)
TraceStateString/with_a_key_and_tenant_at_maximum_length-16                 2.000 ± 0%     1.000 ± 0%  -50.00% (p=0.000 n=10)
TraceStateString/with_maximum_members-16                                    7.000 ± 0%     1.000 ± 0%  -85.71% (p=0.000 n=10)
TraceStateString/with_several_members-16                                    3.000 ± 0%     1.000 ± 0%  -66.67% (p=0.000 n=10)
TraceStateString/with_tabs_between_members-16                               3.000 ± 0%     1.000 ± 0%  -66.67% (p=0.000 n=10)
TraceStateString/with_multiple_tabs_between_members-16                      3.000 ± 0%     1.000 ± 0%  -66.67% (p=0.000 n=10)
TraceStateString/with_space_at_the_end_of_the_member-16                     1.000 ± 0%     1.000 ± 0%        ~ (p=1.000 n=10) ¹
TraceStateString/with_tab_at_the_end_of_the_member-16                       1.000 ± 0%     1.000 ± 0%        ~ (p=1.000 n=10) ¹
TraceStateString/with_tab_and_space_at_the_end_of_the_member-16             1.000 ± 0%     1.000 ± 0%        ~ (p=1.000 n=10) ¹
TraceStateInsert/add_new-16                                                 1.000 ± 0%     1.000 ± 0%        ~ (p=1.000 n=10) ¹
TraceStateInsert/replace-16                                                 1.000 ± 0%     1.000 ± 0%        ~ (p=1.000 n=10) ¹
TraceStateInsert/invalid_key-16                                             0.000 ± 0%     0.000 ± 0%        ~ (p=1.000 n=10) ¹
TraceStateInsert/invalid_value-16                                           0.000 ± 0%     0.000 ± 0%        ~ (p=1.000 n=10) ¹
TraceStateInsert/invalid_key/value-16                                       0.000 ± 0%     0.000 ± 0%        ~ (p=1.000 n=10) ¹
TraceStateInsert/drop_the_right-most_member(oldest)_in_queue-16             1.000 ± 0%     1.000 ± 0%        ~ (p=1.000 n=10) ¹
geomean                                                                                ²               -15.98%                ²
¹ all samples are equal
² summaries must be >0 to compute geomean

@xiehuc
Copy link
Contributor Author

xiehuc commented Nov 30, 2023

43a42e4-ts.txt
65bd30b-ts.txt

i didn't put result before, because i think it is obviously better

@MrAlias MrAlias merged commit 88da778 into open-telemetry:main Dec 2, 2023
25 checks passed
@MrAlias MrAlias added this to the v1.22.0 milestone Jan 11, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
area:trace Part of OpenTelemetry tracing enhancement New feature or request
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

5 participants