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

JSON as fallback encoding #375

Merged
merged 2 commits into from
Apr 28, 2023
Merged

Conversation

pohly
Copy link

@pohly pohly commented Apr 26, 2023

What this PR does / why we need it:

The output of Sprintf("%+v") is neither readable nor parseable. JSON encoding
is better in both regards.

Because JSON follows pointers instead of printing their value, output becomes more useful, too.

There are some downsides:

  • Unexported fields don't get encoded anymore. However, the same happens
    with other backends (in particular, zapr), so one could also
    argue that making the text format behave like those others
    is good because developers notice early that they need custom
    String and MarshalLog methods if they want to log such fields.
  • The result KObjs (a slice) now gets encoded as array of structs.
    KObjs already got deprecated a year ago. KObjSlice should be used
    instead.

Which issue(s) this PR fixes:

Fixes ##352

Special notes for your reviewer:

The first commit introduces some new output unit tests, the second has the actual change.

Release note:

Structured logging now uses JSON encoding for structs, slices and maps. For pointers embedded in those, the thing they point to gets printed, not the pointer values. Unexported fields in structs no longer get included in the output. Implement `String` and `MarshalLog` for structs if such fields are important.

Those are types for which the Sprintf("%+v") catchall code is used.
@k8s-ci-robot k8s-ci-robot added cncf-cla: yes Indicates the PR's author has signed the CNCF CLA. needs-triage Indicates an issue or PR lacks a `triage/foo` label and requires one. labels Apr 26, 2023
@k8s-ci-robot
Copy link

This issue is currently awaiting triage.

If klog contributors determine this is a relevant issue, they will accept it by applying the triage/accepted label and provide further guidance.

The triage/accepted label can be added by org members by writing /triage accepted in a comment.

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes/test-infra repository.

@k8s-ci-robot k8s-ci-robot added the size/L Denotes a PR that changes 100-499 lines, ignoring generated files. label Apr 26, 2023
@pohly
Copy link
Author

pohly commented Apr 26, 2023

In most cases, performance is better than before (-17.55% for structs, -11.69% for slices). Printing maps becomes a bit slower, but not significantly (6.04µs ± 8% -> 6.14µs ±14%).

name                                                                            old time/op    new time/op    delta
pkg:k8s.io/klog/v2 goos:linux goarch:amd64
Header-36                                                                         1.63µs ± 9%    1.72µs ± 3%     ~     (p=0.151 n=5+5)
HeaderWithDir-36                                                                  1.63µs ±10%    1.69µs ± 5%     ~     (p=0.341 n=5+5)
V-36                                                                              2.60ns ± 0%    2.37ns ± 0%   -8.97%  (p=0.008 n=5+5)
KRef-36                                                                           0.99ns ± 6%    0.99ns ± 6%     ~     (p=0.841 n=5+5)
KObj-36                                                                           6.22ns ± 0%    6.23ns ± 0%     ~     (p=0.167 n=5+5)
KObjs/0/simple-36                                                                  280ns ± 3%     281ns ± 6%     ~     (p=0.548 n=5+5)
KObjs/0/conditional-36                                                            2.61ns ± 0%    2.61ns ± 0%     ~     (p=0.579 n=5+5)
KObjs/10/simple-36                                                                1.17µs ± 4%    1.18µs ± 6%     ~     (p=0.841 n=5+5)
KObjs/10/conditional-36                                                           2.61ns ± 0%    2.61ns ± 0%     ~     (p=0.143 n=5+5)
KObjs/20/simple-36                                                                1.93µs ± 1%    1.93µs ± 2%     ~     (p=1.000 n=5+5)
KObjs/20/conditional-36                                                           2.61ns ± 1%    2.60ns ± 0%     ~     (p=0.270 n=5+4)
KObjs/30/simple-36                                                                2.62µs ± 2%    2.63µs ± 1%     ~     (p=0.937 n=5+5)
KObjs/30/conditional-36                                                           2.60ns ± 0%    2.61ns ± 0%     ~     (p=0.571 n=5+5)
KObjs/40/simple-36                                                                3.33µs ± 1%    3.34µs ± 1%     ~     (p=1.000 n=5+5)
KObjs/40/conditional-36                                                           2.61ns ± 0%    2.61ns ± 0%     ~     (p=0.421 n=5+5)
KObjs/50/simple-36                                                                4.06µs ± 2%    4.05µs ± 1%     ~     (p=0.881 n=5+5)
KObjs/50/conditional-36                                                           2.61ns ± 0%    2.61ns ± 0%   -0.32%  (p=0.040 n=5+5)
KObjs/60/simple-36                                                                5.02µs ± 5%    5.14µs ± 2%     ~     (p=0.254 n=5+5)
KObjs/60/conditional-36                                                           2.61ns ± 0%    2.60ns ± 1%     ~     (p=0.230 n=5+5)
KObjs/70/simple-36                                                                5.60µs ± 3%    5.59µs ± 4%     ~     (p=1.000 n=5+5)
KObjs/70/conditional-36                                                           2.61ns ± 0%    2.61ns ± 0%     ~     (p=0.857 n=5+5)
KObjs/80/simple-36                                                                6.62µs ± 3%    6.38µs ± 4%     ~     (p=0.056 n=5+5)
KObjs/80/conditional-36                                                           2.61ns ± 0%    2.61ns ± 0%     ~     (p=1.000 n=5+5)
KObjs/90/simple-36                                                                6.90µs ± 4%    7.01µs ± 1%     ~     (p=0.222 n=5+5)
KObjs/90/conditional-36                                                           2.61ns ± 0%    2.61ns ± 1%     ~     (p=0.389 n=5+5)
KObjs/100/simple-36                                                               7.83µs ± 4%    7.66µs ± 2%     ~     (p=0.222 n=5+5)
KObjs/100/conditional-36                                                          2.61ns ± 0%    2.60ns ± 0%     ~     (p=0.056 n=5+5)
KObjSlice/0/simple-36                                                              264ns ± 6%     262ns ± 4%     ~     (p=1.000 n=5+5)
KObjSlice/0/conditional-36                                                        2.61ns ± 0%    2.60ns ± 0%     ~     (p=0.492 n=5+4)
KObjSlice/10/simple-36                                                             263ns ± 4%     261ns ± 3%     ~     (p=0.548 n=5+5)
KObjSlice/10/conditional-36                                                       2.61ns ± 1%    2.60ns ± 0%     ~     (p=0.310 n=5+5)
KObjSlice/20/simple-36                                                             265ns ± 8%     259ns ± 6%     ~     (p=0.548 n=5+5)
KObjSlice/20/conditional-36                                                       2.61ns ± 0%    2.61ns ± 0%     ~     (p=0.373 n=5+5)
KObjSlice/30/simple-36                                                             267ns ± 6%     259ns ± 7%     ~     (p=0.421 n=5+5)
KObjSlice/30/conditional-36                                                       2.61ns ± 0%    2.61ns ± 0%     ~     (p=0.786 n=5+5)
KObjSlice/40/simple-36                                                             267ns ± 3%     264ns ± 4%     ~     (p=0.690 n=5+5)
KObjSlice/40/conditional-36                                                       2.61ns ± 1%    2.60ns ± 0%     ~     (p=0.198 n=5+5)
KObjSlice/50/simple-36                                                             266ns ± 2%     264ns ± 8%     ~     (p=0.794 n=5+5)
KObjSlice/50/conditional-36                                                       2.60ns ± 0%    2.61ns ± 0%     ~     (p=0.151 n=5+5)
KObjSlice/60/simple-36                                                             265ns ± 6%     263ns ± 7%     ~     (p=1.000 n=5+5)
KObjSlice/60/conditional-36                                                       2.61ns ± 1%    2.60ns ± 0%   -0.39%  (p=0.024 n=5+5)
KObjSlice/70/simple-36                                                             262ns ±10%     271ns ± 2%     ~     (p=0.206 n=5+5)
KObjSlice/70/conditional-36                                                       2.61ns ± 0%    2.61ns ± 0%     ~     (p=0.841 n=5+5)
KObjSlice/80/simple-36                                                             262ns ± 4%     265ns ± 3%     ~     (p=0.690 n=5+5)
KObjSlice/80/conditional-36                                                       2.61ns ± 0%    2.60ns ± 1%     ~     (p=0.063 n=4+5)
KObjSlice/90/simple-36                                                             270ns ± 3%     263ns ± 3%     ~     (p=0.222 n=5+5)
KObjSlice/90/conditional-36                                                       2.61ns ± 0%    2.60ns ± 0%     ~     (p=0.135 n=5+5)
KObjSlice/100/simple-36                                                            267ns ± 9%     267ns ± 3%     ~     (p=0.548 n=5+5)
KObjSlice/100/conditional-36                                                      2.60ns ± 0%    2.61ns ± 0%     ~     (p=0.984 n=5+5)
Scalars/simple-36                                                                  111ns ± 2%     112ns ± 3%     ~     (p=0.548 n=5+5)
Scalars/conditional-36                                                            2.62ns ± 0%    2.64ns ± 1%     ~     (p=0.683 n=5+5)
ScalarsWithLogger/simple-36                                                        119ns ± 3%     117ns ± 3%     ~     (p=0.222 n=5+5)
ScalarsWithLogger/conditional-36                                                  4.25ns ± 0%    3.89ns ± 0%   -8.30%  (p=0.008 n=5+5)
KObjSliceWithLogger/simple-36                                                      278ns ± 6%     276ns ± 4%     ~     (p=0.421 n=5+5)
KObjSliceWithLogger/conditional-36                                                4.25ns ± 0%    4.03ns ± 0%   -5.25%  (p=0.008 n=5+5)
Logs-36                                                                           7.12µs ± 4%    7.19µs ± 7%     ~     (p=0.548 n=5+5)
WithoutDeferUnLock-36                                                             11.9ns ± 0%    12.0ns ± 2%     ~     (p=0.325 n=5+5)
WithDeferUnLock-36                                                                13.3ns ± 0%    13.3ns ± 0%     ~     (p=0.127 n=5+5)
KlogOutput/KObjSlice_int_arg-36                                                   3.62µs ± 5%    3.59µs ± 4%     ~     (p=0.841 n=5+5)
KlogOutput/handle_integer_keys-36                                                 5.89µs ± 4%    5.83µs ± 3%     ~     (p=0.690 n=5+5)
KlogOutput/handle_odd-numbers_of_KVs_in_both_log_values_and_Info_args-36          5.94µs ± 4%    5.95µs ± 9%     ~     (p=0.690 n=5+5)
KlogOutput/vmodule-36                                                             4.92µs ±11%    4.84µs ± 8%     ~     (p=1.000 n=5+5)
KlogOutput/other_vmodule-36                                                        845ns ± 0%     848ns ± 0%     ~     (p=0.095 n=5+5)
KlogOutput/override_WithValues-36                                                 4.57µs ± 6%    4.33µs ± 4%   -5.25%  (p=0.032 n=5+5)
KlogOutput/print_duplicate_keys_in_arguments-36                                   3.88µs ±10%    3.98µs ± 6%     ~     (p=0.690 n=5+5)
KlogOutput/map_keys-36                                                            4.52µs ± 5%    4.77µs ± 6%     ~     (p=0.151 n=5+5)
KlogOutput/verbosity_disabled-36                                                  15.2ns ± 0%    15.2ns ± 0%     ~     (p=0.103 n=5+5)
KlogOutput/handle_odd-numbers_of_KVs-36                                           3.95µs ± 8%    4.03µs ± 3%     ~     (p=0.841 n=5+5)
KlogOutput/html_characters-36                                                     3.56µs ± 7%    3.48µs ± 9%     ~     (p=0.421 n=5+5)
KlogOutput/struct_keys-36                                                         5.18µs ± 4%    5.48µs ± 3%   +5.76%  (p=0.024 n=5+5)
KlogOutput/slice_values-36                                                        4.50µs ± 4%    3.97µs ± 4%  -11.69%  (p=0.008 n=5+5)
KlogOutput/call_depth-36                                                          3.79µs ± 7%    3.70µs ± 2%     ~     (p=0.690 n=5+5)
KlogOutput/KObjSlice_nil_entry-36                                                 3.52µs ±11%    3.59µs ± 9%     ~     (p=0.690 n=5+5)
KlogOutput/String()_for_nil-36                                                    7.80µs ± 7%    7.93µs ± 9%     ~     (p=0.690 n=5+5)
KlogOutput/KObjSlice_okay-36                                                      3.65µs ± 2%    3.77µs ±12%     ~     (p=0.151 n=5+5)
KlogOutput/odd_WithValues-36                                                      12.9µs ± 5%    13.4µs ± 7%     ~     (p=0.222 n=5+5)
KlogOutput/multiple_WithValues-36                                                 16.2µs ± 4%    16.7µs ± 6%     ~     (p=0.310 n=5+5)
KlogOutput/preserve_order_of_key/value_pairs-36                                   7.02µs ± 5%    6.72µs ± 7%     ~     (p=0.095 n=5+5)
KlogOutput/KObjSlice_ints-36                                                      3.81µs ±12%    3.79µs ± 6%     ~     (p=0.841 n=5+5)
KlogOutput/regular_error_types_as_value-36                                        3.54µs ± 2%    3.40µs ± 7%     ~     (p=0.421 n=5+5)
KlogOutput/ignore_MarshalJSON-36                                                  3.51µs ± 3%    3.57µs ± 5%     ~     (p=0.460 n=5+5)
KlogOutput/String()_that_panics-36                                                4.54µs ± 4%    4.55µs ± 3%     ~     (p=1.000 n=5+5)
KlogOutput/MarshalLog()_that_panics-36                                            4.71µs ± 1%    4.69µs ± 3%     ~     (p=0.690 n=5+5)
KlogOutput/Error()_for_nil-36                                                     7.24µs ± 3%    7.94µs ± 3%   +9.70%  (p=0.008 n=5+5)
KlogOutput/log_with_values-36                                                     3.47µs ± 7%    3.52µs ± 3%     ~     (p=0.421 n=5+5)
KlogOutput/override_single_value-36                                               3.40µs ± 7%    3.65µs ± 4%   +7.58%  (p=0.032 n=5+5)
KlogOutput/KObjs-36                                                               4.78µs ± 3%    4.05µs ± 6%  -15.32%  (p=0.008 n=5+5)
KlogOutput/KObjSlice_nil_arg-36                                                   3.25µs ± 8%    3.32µs ± 5%     ~     (p=0.841 n=5+5)
KlogOutput/regular_error_types_when_using_logr.Error-36                           3.61µs ± 2%    3.45µs ± 4%   -4.53%  (p=0.032 n=5+5)
KlogOutput/MarshalLog()_for_nil-36                                                4.97µs ± 7%    4.89µs ± 2%     ~     (p=0.690 n=5+5)
KlogOutput/Error()_that_panics-36                                                 4.48µs ± 5%    4.32µs ± 4%     ~     (p=0.095 n=5+5)
KlogOutput/verbosity_enabled-36                                                   3.29µs ± 9%    3.26µs ± 1%     ~     (p=0.730 n=5+4)
KlogOutput/struct_values-36                                                       4.48µs ± 5%    3.69µs ± 5%  -17.55%  (p=0.008 n=5+5)
KlogOutput/quotation-36                                                           3.91µs ± 6%    3.77µs ± 3%     ~     (p=0.151 n=5+5)
KlogOutput/KObj-36                                                                3.44µs ± 2%    3.52µs ± 4%     ~     (p=0.151 n=5+5)
KlogOutput/MarshalLog()_that_returns_itself-36                                    3.77µs ± 9%    3.70µs ± 7%     ~     (p=0.690 n=5+5)
KlogOutput/empty_WithValues-36                                                    3.08µs ± 8%    3.08µs ± 5%     ~     (p=0.690 n=5+5)
KlogOutput/log_with_multiple_names_and_values-36                                  3.90µs ± 6%    4.07µs ± 3%     ~     (p=0.095 n=5+5)
KlogOutput/map_values-36                                                          6.04µs ± 8%    6.14µs ±14%     ~     (p=0.548 n=5+5)
KlogOutput/log_with_name_and_values-36                                            3.63µs ±10%    3.71µs ± 7%     ~     (p=0.841 n=5+5)
pkg:k8s.io/klog/v2/internal/benchmarks/contextvalues goos:linux goarch:amd64
NewContext1Percent-36                                                             61.7µs ± 3%    63.5µs ± 2%   +2.88%  (p=0.008 n=5+5)
NewContext100PercentDisabled-36                                                   78.6µs ± 2%    80.4µs ± 4%     ~     (p=0.151 n=5+5)
NewContext100Percent-36                                                           82.6µs ± 1%    82.7µs ± 2%     ~     (p=1.000 n=5+5)
NewContext1PercentValues-36                                                       25.2µs ± 2%    25.7µs ± 2%   +2.19%  (p=0.048 n=5+5)
NewContext100PercentDisabledValues-36                                             41.7µs ± 3%    43.0µs ± 1%   +3.02%  (p=0.016 n=5+5)
NewContext100PercentValues-36                                                     43.9µs ± 2%    45.8µs ± 1%   +4.24%  (p=0.008 n=5+5)
pkg:k8s.io/klog/v2/internal/serialize goos:linux goarch:amd64
MergeKVs/0x0/no-duplicates-36                                                     2.14ns ± 0%    2.13ns ± 0%     ~     (p=0.087 n=5+5)
MergeKVs/0x0/all-duplicates-36                                                    2.13ns ± 1%    2.13ns ± 0%     ~     (p=0.603 n=5+5)
MergeKVs/0x0/start-duplicate-36                                                    273ns ± 4%     282ns ± 5%     ~     (p=0.222 n=5+5)
MergeKVs/0x0/end-duplicate-36                                                      275ns ± 5%     276ns ± 5%     ~     (p=0.690 n=5+5)
MergeKVs/0x1/no-duplicates-36                                                     2.61ns ± 0%    2.61ns ± 0%     ~     (p=1.000 n=5+5)
MergeKVs/0x1/all-duplicates-36                                                    2.61ns ± 0%    2.61ns ± 0%     ~     (p=1.000 n=5+5)
MergeKVs/0x1/start-duplicate-36                                                    368ns ± 3%     375ns ± 5%     ~     (p=0.151 n=5+5)
MergeKVs/0x1/end-duplicate-36                                                      372ns ± 8%     367ns ± 4%     ~     (p=0.841 n=5+5)
MergeKVs/0x2/no-duplicates-36                                                     2.61ns ± 0%    2.61ns ± 0%     ~     (p=0.817 n=5+5)
MergeKVs/0x2/all-duplicates-36                                                    2.60ns ± 1%    2.61ns ± 0%     ~     (p=0.389 n=5+5)
MergeKVs/0x2/start-duplicate-36                                                    439ns ± 5%     438ns ± 3%     ~     (p=1.000 n=5+5)
MergeKVs/0x2/end-duplicate-36                                                      449ns ± 2%     451ns ± 2%     ~     (p=0.841 n=5+5)
MergeKVs/0x3/no-duplicates-36                                                     2.60ns ± 1%    2.61ns ± 0%     ~     (p=0.881 n=5+5)
MergeKVs/0x3/all-duplicates-36                                                    2.61ns ± 0%    2.61ns ± 0%     ~     (p=0.810 n=5+5)
MergeKVs/0x3/start-duplicate-36                                                    553ns ± 5%     540ns ± 6%     ~     (p=0.421 n=5+5)
MergeKVs/0x3/end-duplicate-36                                                      551ns ± 3%     556ns ± 3%     ~     (p=0.841 n=5+5)
MergeKVs/0x4/no-duplicates-36                                                     2.61ns ± 0%    2.60ns ± 0%     ~     (p=0.143 n=5+5)
MergeKVs/0x4/all-duplicates-36                                                    2.61ns ± 0%    2.60ns ± 1%     ~     (p=0.540 n=5+5)
MergeKVs/0x4/start-duplicate-36                                                    641ns ± 4%     634ns ± 3%     ~     (p=0.381 n=5+5)
MergeKVs/0x4/end-duplicate-36                                                      650ns ± 2%     622ns ± 5%     ~     (p=0.056 n=5+5)
MergeKVs/0x5/no-duplicates-36                                                     2.61ns ± 0%    2.60ns ± 1%     ~     (p=0.722 n=5+5)
MergeKVs/0x5/all-duplicates-36                                                    2.61ns ± 0%    2.61ns ± 0%     ~     (p=0.833 n=5+5)
MergeKVs/0x5/start-duplicate-36                                                    734ns ± 3%     729ns ± 3%     ~     (p=0.690 n=5+5)
MergeKVs/0x5/end-duplicate-36                                                      733ns ± 8%     747ns ± 5%     ~     (p=0.690 n=5+5)
MergeKVs/0x6/no-duplicates-36                                                     2.61ns ± 1%    2.61ns ± 0%     ~     (p=0.675 n=5+5)
MergeKVs/0x6/all-duplicates-36                                                    2.61ns ± 0%    2.61ns ± 0%     ~     (p=0.063 n=4+5)
MergeKVs/0x6/start-duplicate-36                                                    795ns ± 4%     784ns ± 4%     ~     (p=0.333 n=5+5)
MergeKVs/0x6/end-duplicate-36                                                      806ns ± 3%     815ns ± 4%     ~     (p=0.690 n=5+5)
MergeKVs/0x7/no-duplicates-36                                                     2.61ns ± 0%    2.61ns ± 0%     ~     (p=1.000 n=5+5)
MergeKVs/0x7/all-duplicates-36                                                    2.61ns ± 1%    2.61ns ± 0%     ~     (p=0.413 n=5+5)
MergeKVs/0x7/start-duplicate-36                                                    924ns ± 3%     899ns ± 3%     ~     (p=0.222 n=5+5)
MergeKVs/0x7/end-duplicate-36                                                      941ns ± 2%     930ns ± 5%     ~     (p=0.690 n=5+5)
MergeKVs/0x8/no-duplicates-36                                                     2.60ns ± 0%    2.61ns ± 0%     ~     (p=1.000 n=5+5)
MergeKVs/0x8/all-duplicates-36                                                    2.61ns ± 0%    2.61ns ± 0%     ~     (p=0.889 n=5+5)
MergeKVs/0x8/start-duplicate-36                                                   1.93µs ± 2%    1.95µs ± 4%     ~     (p=0.841 n=5+5)
MergeKVs/0x8/end-duplicate-36                                                     1.98µs ± 4%    1.98µs ± 5%     ~     (p=1.000 n=5+5)
MergeKVs/0x9/no-duplicates-36                                                     2.61ns ± 0%    2.61ns ± 0%     ~     (p=1.000 n=5+5)
MergeKVs/0x9/all-duplicates-36                                                    2.61ns ± 0%    2.61ns ± 0%     ~     (p=0.175 n=5+5)
MergeKVs/0x9/start-duplicate-36                                                   2.02µs ± 4%    2.06µs ± 3%     ~     (p=0.246 n=5+5)
MergeKVs/0x9/end-duplicate-36                                                     2.09µs ± 3%    2.12µs ± 3%     ~     (p=0.548 n=5+5)
MergeKVs/1x0/no-duplicates-36                                                      148ns ± 5%     154ns ± 3%     ~     (p=0.056 n=5+5)
MergeKVs/1x0/all-duplicates-36                                                     147ns ±10%     155ns ± 9%     ~     (p=0.310 n=5+5)
MergeKVs/1x0/start-duplicate-36                                                    358ns ± 5%     365ns ± 5%     ~     (p=0.310 n=5+5)
MergeKVs/1x0/end-duplicate-36                                                      344ns ± 5%     361ns ± 2%     ~     (p=0.151 n=5+5)
MergeKVs/1x1/no-duplicates-36                                                      270ns ± 6%     274ns ± 5%     ~     (p=0.690 n=5+5)
MergeKVs/1x1/all-duplicates-36                                                     271ns ± 9%     283ns ± 3%     ~     (p=0.310 n=5+5)
MergeKVs/1x1/start-duplicate-36                                                    436ns ± 2%     434ns ± 3%     ~     (p=0.690 n=5+5)
MergeKVs/1x1/end-duplicate-36                                                      447ns ± 3%     434ns ± 3%     ~     (p=0.095 n=5+5)
MergeKVs/1x2/no-duplicates-36                                                      357ns ± 5%     349ns ± 3%     ~     (p=0.222 n=5+5)
MergeKVs/1x2/all-duplicates-36                                                     377ns ± 5%     365ns ± 1%   -3.11%  (p=0.032 n=5+4)
MergeKVs/1x2/start-duplicate-36                                                    534ns ± 5%     527ns ± 4%     ~     (p=0.421 n=5+5)
MergeKVs/1x2/end-duplicate-36                                                      553ns ± 3%     536ns ± 5%     ~     (p=0.310 n=5+5)
MergeKVs/1x3/no-duplicates-36                                                      438ns ± 4%     440ns ± 2%     ~     (p=0.548 n=5+5)
MergeKVs/1x3/all-duplicates-36                                                     455ns ± 5%     450ns ± 3%     ~     (p=0.595 n=5+5)
MergeKVs/1x3/start-duplicate-36                                                    632ns ± 2%     613ns ± 4%     ~     (p=0.095 n=5+5)
MergeKVs/1x3/end-duplicate-36                                                      629ns ± 2%     614ns ± 3%     ~     (p=0.222 n=5+5)
MergeKVs/1x4/no-duplicates-36                                                      526ns ± 4%     527ns ± 7%     ~     (p=0.690 n=5+5)
MergeKVs/1x4/all-duplicates-36                                                     559ns ± 5%     552ns ± 1%     ~     (p=0.421 n=5+5)
MergeKVs/1x4/start-duplicate-36                                                    724ns ± 6%     719ns ± 1%     ~     (p=0.548 n=5+5)
MergeKVs/1x4/end-duplicate-36                                                      730ns ± 3%     742ns ± 2%     ~     (p=0.222 n=5+5)
MergeKVs/1x5/no-duplicates-36                                                      619ns ± 2%     616ns ± 3%     ~     (p=0.690 n=5+5)
MergeKVs/1x5/all-duplicates-36                                                     627ns ± 4%     633ns ± 2%     ~     (p=0.389 n=5+5)
MergeKVs/1x5/start-duplicate-36                                                    789ns ± 5%     780ns ± 7%     ~     (p=0.690 n=5+5)
MergeKVs/1x5/end-duplicate-36                                                      789ns ± 2%     784ns ± 5%     ~     (p=0.690 n=5+5)
MergeKVs/1x6/no-duplicates-36                                                      738ns ± 1%     720ns ± 2%     ~     (p=0.056 n=5+5)
MergeKVs/1x6/all-duplicates-36                                                     734ns ± 2%     730ns ± 5%     ~     (p=0.841 n=5+5)
MergeKVs/1x6/start-duplicate-36                                                    900ns ± 3%     888ns ± 6%     ~     (p=0.841 n=5+5)
MergeKVs/1x6/end-duplicate-36                                                      890ns ± 2%     904ns ± 4%     ~     (p=0.421 n=5+5)
MergeKVs/1x7/no-duplicates-36                                                      787ns ± 5%     788ns ± 3%     ~     (p=1.000 n=5+5)
MergeKVs/1x7/all-duplicates-36                                                     773ns ± 5%     802ns ± 3%     ~     (p=0.222 n=5+5)
MergeKVs/1x7/start-duplicate-36                                                    993ns ± 4%     989ns ± 3%     ~     (p=0.643 n=5+5)
MergeKVs/1x7/end-duplicate-36                                                     1.01µs ± 4%    1.01µs ± 1%     ~     (p=0.690 n=5+5)
MergeKVs/1x8/no-duplicates-36                                                      905ns ± 2%     891ns ± 4%     ~     (p=0.421 n=5+5)
MergeKVs/1x8/all-duplicates-36                                                     930ns ± 3%     910ns ± 4%     ~     (p=0.381 n=5+5)
MergeKVs/1x8/start-duplicate-36                                                   2.05µs ± 4%    2.05µs ± 1%     ~     (p=1.000 n=5+5)
MergeKVs/1x8/end-duplicate-36                                                     2.10µs ± 3%    2.06µs ± 3%     ~     (p=0.222 n=5+5)
MergeKVs/1x9/no-duplicates-36                                                     2.00µs ± 2%    1.98µs ± 2%     ~     (p=0.690 n=5+5)
MergeKVs/1x9/all-duplicates-36                                                    1.95µs ± 1%    1.96µs ± 2%     ~     (p=0.500 n=5+5)
MergeKVs/1x9/start-duplicate-36                                                   2.18µs ± 3%    2.18µs ± 2%     ~     (p=1.000 n=5+5)
MergeKVs/1x9/end-duplicate-36                                                     2.20µs ± 1%    2.23µs ± 2%     ~     (p=0.143 n=5+5)
MergeKVs/2x0/no-duplicates-36                                                      215ns ± 6%     218ns ± 4%     ~     (p=0.841 n=5+5)
MergeKVs/2x0/all-duplicates-36                                                     216ns ± 3%     216ns ± 6%     ~     (p=0.841 n=5+5)
MergeKVs/2x0/start-duplicate-36                                                    422ns ± 5%     416ns ± 6%     ~     (p=0.548 n=5+5)
MergeKVs/2x0/end-duplicate-36                                                      410ns ± 7%     419ns ± 4%     ~     (p=0.421 n=5+5)
MergeKVs/2x1/no-duplicates-36                                                      349ns ± 3%     342ns ± 6%     ~     (p=0.690 n=5+5)
MergeKVs/2x1/all-duplicates-36                                                     363ns ± 4%     357ns ± 6%     ~     (p=0.421 n=5+5)
MergeKVs/2x1/start-duplicate-36                                                    518ns ± 3%     524ns ± 4%     ~     (p=0.841 n=5+5)
MergeKVs/2x1/end-duplicate-36                                                      527ns ± 6%     528ns ± 4%     ~     (p=0.841 n=5+5)
MergeKVs/2x2/no-duplicates-36                                                      421ns ± 4%     416ns ± 4%     ~     (p=0.421 n=5+5)
MergeKVs/2x2/all-duplicates-36                                                     453ns ± 3%     450ns ± 7%     ~     (p=1.000 n=5+5)
MergeKVs/2x2/start-duplicate-36                                                    590ns ± 3%     601ns ± 4%     ~     (p=0.310 n=5+5)
MergeKVs/2x2/end-duplicate-36                                                      609ns ± 5%     605ns ± 4%     ~     (p=1.000 n=5+5)
MergeKVs/2x3/no-duplicates-36                                                      530ns ± 2%     520ns ± 2%     ~     (p=0.095 n=5+5)
MergeKVs/2x3/all-duplicates-36                                                     553ns ± 1%     555ns ± 5%     ~     (p=0.690 n=5+5)
MergeKVs/2x3/start-duplicate-36                                                    688ns ± 5%     692ns ± 2%     ~     (p=0.690 n=5+5)
MergeKVs/2x3/end-duplicate-36                                                      710ns ± 2%     698ns ± 2%     ~     (p=0.056 n=5+5)
MergeKVs/2x4/no-duplicates-36                                                      610ns ± 2%     602ns ± 4%     ~     (p=0.151 n=5+5)
MergeKVs/2x4/all-duplicates-36                                                     655ns ± 2%     651ns ± 3%     ~     (p=1.000 n=5+5)
MergeKVs/2x4/start-duplicate-36                                                    779ns ± 2%     770ns ± 3%     ~     (p=0.421 n=5+5)
MergeKVs/2x4/end-duplicate-36                                                      758ns ± 2%     764ns ± 3%     ~     (p=0.548 n=5+5)
MergeKVs/2x5/no-duplicates-36                                                      698ns ± 4%     701ns ± 6%     ~     (p=0.690 n=5+5)
MergeKVs/2x5/all-duplicates-36                                                     728ns ± 3%     748ns ± 4%     ~     (p=0.151 n=5+5)
MergeKVs/2x5/start-duplicate-36                                                    882ns ± 2%     863ns ± 5%     ~     (p=0.222 n=5+5)
MergeKVs/2x5/end-duplicate-36                                                      880ns ± 4%     881ns ± 3%     ~     (p=1.000 n=5+5)
MergeKVs/2x6/no-duplicates-36                                                      787ns ± 3%     792ns ± 1%     ~     (p=1.000 n=5+4)
MergeKVs/2x6/all-duplicates-36                                                     795ns ± 2%     809ns ± 3%     ~     (p=0.151 n=5+5)
MergeKVs/2x6/start-duplicate-36                                                    991ns ± 4%     975ns ± 3%     ~     (p=0.595 n=5+5)
MergeKVs/2x6/end-duplicate-36                                                      985ns ± 1%     986ns ± 5%     ~     (p=0.222 n=5+5)
MergeKVs/2x7/no-duplicates-36                                                      892ns ± 3%     878ns ± 3%     ~     (p=0.389 n=5+5)
MergeKVs/2x7/all-duplicates-36                                                     909ns ± 2%     903ns ± 3%     ~     (p=0.460 n=5+5)
MergeKVs/2x7/start-duplicate-36                                                   1.07µs ± 2%    1.06µs ± 6%     ~     (p=0.690 n=5+5)
MergeKVs/2x7/end-duplicate-36                                                     1.08µs ± 2%    1.08µs ± 2%     ~     (p=0.841 n=5+5)
MergeKVs/2x8/no-duplicates-36                                                      989ns ± 4%    1009ns ± 2%     ~     (p=0.421 n=5+5)
MergeKVs/2x8/all-duplicates-36                                                     986ns ± 3%    1024ns ± 3%     ~     (p=0.063 n=5+5)
MergeKVs/2x8/start-duplicate-36                                                   2.14µs ± 2%    2.20µs ± 4%     ~     (p=0.151 n=5+5)
MergeKVs/2x8/end-duplicate-36                                                     2.15µs ± 2%    2.21µs ± 3%   +2.83%  (p=0.032 n=5+5)
MergeKVs/2x9/no-duplicates-36                                                     2.06µs ± 4%    2.09µs ± 2%     ~     (p=0.548 n=5+5)
MergeKVs/2x9/all-duplicates-36                                                    2.07µs ± 5%    2.07µs ± 2%     ~     (p=0.841 n=5+5)
MergeKVs/2x9/start-duplicate-36                                                   2.30µs ± 2%    2.32µs ± 2%     ~     (p=0.389 n=5+5)
MergeKVs/2x9/end-duplicate-36                                                     2.32µs ± 4%    2.30µs ± 5%     ~     (p=0.548 n=5+5)
MergeKVs/3x0/no-duplicates-36                                                      280ns ± 1%     284ns ± 6%     ~     (p=0.183 n=5+5)
MergeKVs/3x0/all-duplicates-36                                                     284ns ± 2%     282ns ± 3%     ~     (p=0.690 n=5+5)
MergeKVs/3x0/start-duplicate-36                                                    492ns ± 6%     508ns ± 2%     ~     (p=0.063 n=5+5)
MergeKVs/3x0/end-duplicate-36                                                      501ns ± 3%     501ns ± 4%     ~     (p=1.000 n=5+5)
MergeKVs/3x1/no-duplicates-36                                                      403ns ± 4%     404ns ± 4%     ~     (p=0.841 n=5+5)
MergeKVs/3x1/all-duplicates-36                                                     426ns ± 3%     428ns ± 2%     ~     (p=0.762 n=5+5)
MergeKVs/3x1/start-duplicate-36                                                    591ns ± 3%     580ns ± 4%     ~     (p=0.222 n=5+5)
MergeKVs/3x1/end-duplicate-36                                                      573ns ± 2%     575ns ± 4%     ~     (p=0.841 n=5+5)
MergeKVs/3x2/no-duplicates-36                                                      505ns ± 2%     503ns ± 6%     ~     (p=0.841 n=5+5)
MergeKVs/3x2/all-duplicates-36                                                     534ns ± 3%     554ns ± 4%     ~     (p=0.151 n=5+5)
MergeKVs/3x2/start-duplicate-36                                                    668ns ± 5%     691ns ± 2%   +3.40%  (p=0.032 n=5+5)
MergeKVs/3x2/end-duplicate-36                                                      695ns ± 2%     691ns ± 4%     ~     (p=1.000 n=5+5)
MergeKVs/3x3/no-duplicates-36                                                      588ns ± 2%     584ns ± 4%     ~     (p=0.841 n=5+5)
MergeKVs/3x3/all-duplicates-36                                                     633ns ± 3%     642ns ± 5%     ~     (p=0.548 n=5+5)
MergeKVs/3x3/start-duplicate-36                                                    737ns ± 6%     743ns ± 2%     ~     (p=0.841 n=5+5)
MergeKVs/3x3/end-duplicate-36                                                      733ns ± 4%     755ns ± 1%     ~     (p=0.056 n=5+5)
MergeKVs/3x4/no-duplicates-36                                                      677ns ± 5%     679ns ± 2%     ~     (p=1.000 n=5+5)
MergeKVs/3x4/all-duplicates-36                                                     717ns ± 5%     746ns ± 1%     ~     (p=0.095 n=5+5)
MergeKVs/3x4/start-duplicate-36                                                    835ns ± 3%     870ns ± 2%   +4.14%  (p=0.008 n=5+5)
MergeKVs/3x4/end-duplicate-36                                                      855ns ± 3%     870ns ± 5%     ~     (p=0.310 n=5+5)
MergeKVs/3x5/no-duplicates-36                                                      743ns ± 3%     753ns ± 2%     ~     (p=0.548 n=5+5)
MergeKVs/3x5/all-duplicates-36                                                     789ns ± 2%     809ns ± 4%     ~     (p=0.056 n=5+5)
MergeKVs/3x5/start-duplicate-36                                                    932ns ± 5%     951ns ± 3%     ~     (p=0.690 n=5+5)
MergeKVs/3x5/end-duplicate-36                                                      932ns ± 5%     978ns ± 3%   +4.95%  (p=0.032 n=5+5)
MergeKVs/3x6/no-duplicates-36                                                      872ns ± 2%     880ns ± 3%     ~     (p=0.690 n=5+5)
MergeKVs/3x6/all-duplicates-36                                                     900ns ± 4%     907ns ± 5%     ~     (p=0.841 n=5+5)
MergeKVs/3x6/start-duplicate-36                                                   1.04µs ± 3%    1.05µs ± 4%     ~     (p=0.841 n=5+5)
MergeKVs/3x6/end-duplicate-36                                                     1.01µs ± 6%    1.06µs ± 3%   +5.45%  (p=0.032 n=5+5)
MergeKVs/3x7/no-duplicates-36                                                      954ns ± 2%     966ns ± 6%     ~     (p=0.222 n=5+5)
MergeKVs/3x7/all-duplicates-36                                                    1.00µs ± 3%    1.00µs ± 1%     ~     (p=0.690 n=5+5)
MergeKVs/3x7/start-duplicate-36                                                   1.14µs ± 3%    1.16µs ± 3%     ~     (p=0.167 n=5+5)
MergeKVs/3x7/end-duplicate-36                                                     1.15µs ± 3%    1.15µs ± 2%     ~     (p=0.516 n=5+5)
MergeKVs/3x8/no-duplicates-36                                                     1.06µs ± 3%    1.05µs ± 4%     ~     (p=1.000 n=5+5)
MergeKVs/3x8/all-duplicates-36                                                    1.08µs ± 2%    1.09µs ± 2%     ~     (p=0.222 n=5+5)
MergeKVs/3x8/start-duplicate-36                                                   2.28µs ± 2%    2.32µs ± 2%     ~     (p=0.056 n=5+5)
MergeKVs/3x8/end-duplicate-36                                                     2.27µs ± 3%    2.33µs ± 3%     ~     (p=0.167 n=5+5)
MergeKVs/3x9/no-duplicates-36                                                     2.15µs ± 2%    2.16µs ± 3%     ~     (p=0.548 n=5+5)
MergeKVs/3x9/all-duplicates-36                                                    2.14µs ± 1%    2.20µs ± 2%   +2.87%  (p=0.008 n=5+5)
MergeKVs/3x9/start-duplicate-36                                                   2.32µs ± 2%    2.37µs ± 1%   +2.26%  (p=0.008 n=5+5)
MergeKVs/3x9/end-duplicate-36                                                     2.40µs ± 2%    2.41µs ± 2%     ~     (p=0.841 n=5+5)
MergeKVs/4x0/no-duplicates-36                                                      328ns ± 3%     330ns ± 3%     ~     (p=0.690 n=5+5)
MergeKVs/4x0/all-duplicates-36                                                     328ns ± 3%     331ns ± 2%     ~     (p=0.548 n=5+5)
MergeKVs/4x0/start-duplicate-36                                                    556ns ± 2%     559ns ± 2%     ~     (p=0.690 n=5+5)
MergeKVs/4x0/end-duplicate-36                                                      565ns ± 3%     569ns ± 1%     ~     (p=0.690 n=5+5)
MergeKVs/4x1/no-duplicates-36                                                      480ns ± 2%     485ns ± 2%     ~     (p=0.238 n=5+5)
MergeKVs/4x1/all-duplicates-36                                                     492ns ± 4%     516ns ± 2%   +5.05%  (p=0.016 n=5+5)
MergeKVs/4x1/start-duplicate-36                                                    644ns ± 4%     661ns ± 2%     ~     (p=0.421 n=5+5)
MergeKVs/4x1/end-duplicate-36                                                      657ns ± 3%     658ns ± 5%     ~     (p=0.841 n=5+5)
MergeKVs/4x2/no-duplicates-36                                                      562ns ± 6%     565ns ± 6%     ~     (p=0.897 n=5+5)
MergeKVs/4x2/all-duplicates-36                                                     609ns ± 2%     606ns ± 4%     ~     (p=0.841 n=5+5)
MergeKVs/4x2/start-duplicate-36                                                    716ns ± 3%     724ns ± 2%     ~     (p=0.548 n=5+5)
MergeKVs/4x2/end-duplicate-36                                                      771ns ± 2%     771ns ± 6%     ~     (p=0.548 n=5+5)
MergeKVs/4x3/no-duplicates-36                                                      663ns ± 2%     675ns ± 2%     ~     (p=0.056 n=5+5)
MergeKVs/4x3/all-duplicates-36                                                     727ns ± 4%     744ns ± 2%     ~     (p=0.151 n=5+5)
MergeKVs/4x3/start-duplicate-36                                                    836ns ± 3%     828ns ± 2%     ~     (p=0.690 n=5+5)
MergeKVs/4x3/end-duplicate-36                                                      886ns ± 4%     892ns ± 2%     ~     (p=0.968 n=5+5)
MergeKVs/4x4/no-duplicates-36                                                      727ns ± 3%     734ns ± 2%     ~     (p=0.841 n=5+5)
MergeKVs/4x4/all-duplicates-36                                                     792ns ± 2%     794ns ± 2%     ~     (p=0.548 n=5+5)
MergeKVs/4x4/start-duplicate-36                                                    928ns ± 3%     925ns ± 2%     ~     (p=1.000 n=5+5)
MergeKVs/4x4/end-duplicate-36                                                     1.00µs ± 3%    1.00µs ± 4%     ~     (p=0.841 n=5+5)
MergeKVs/4x5/no-duplicates-36                                                      840ns ± 3%     846ns ± 3%     ~     (p=1.000 n=5+5)
MergeKVs/4x5/all-duplicates-36                                                     901ns ± 4%     903ns ± 2%     ~     (p=0.889 n=5+5)
MergeKVs/4x5/start-duplicate-36                                                   1.01µs ± 3%    1.02µs ± 2%     ~     (p=1.000 n=5+5)
MergeKVs/4x5/end-duplicate-36                                                     1.09µs ± 3%    1.08µs ± 2%     ~     (p=0.095 n=5+5)
MergeKVs/4x6/no-duplicates-36                                                      940ns ± 2%     928ns ± 3%     ~     (p=0.310 n=5+5)
MergeKVs/4x6/all-duplicates-36                                                     990ns ± 3%    1017ns ± 3%     ~     (p=0.079 n=5+5)
MergeKVs/4x6/start-duplicate-36                                                   1.11µs ± 3%    1.12µs ± 1%     ~     (p=0.421 n=5+5)
MergeKVs/4x6/end-duplicate-36                                                     1.17µs ± 2%    1.17µs ± 3%     ~     (p=0.690 n=5+5)
MergeKVs/4x7/no-duplicates-36                                                     1.03µs ± 3%    1.03µs ± 3%     ~     (p=0.841 n=5+5)
MergeKVs/4x7/all-duplicates-36                                                    1.08µs ± 7%    1.09µs ± 3%     ~     (p=0.968 n=5+5)
MergeKVs/4x7/start-duplicate-36                                                   1.27µs ± 1%    1.24µs ± 5%     ~     (p=0.500 n=5+5)
MergeKVs/4x7/end-duplicate-36                                                     1.28µs ± 2%    1.31µs ± 1%     ~     (p=0.095 n=5+5)
MergeKVs/4x8/no-duplicates-36                                                     1.17µs ± 1%    1.18µs ± 3%     ~     (p=0.206 n=5+5)
MergeKVs/4x8/all-duplicates-36                                                    1.18µs ± 3%    1.18µs ± 1%     ~     (p=1.000 n=5+5)
MergeKVs/4x8/start-duplicate-36                                                   2.33µs ± 3%    2.36µs ± 2%     ~     (p=0.397 n=5+5)
MergeKVs/4x8/end-duplicate-36                                                     2.41µs ± 3%    2.39µs ± 3%     ~     (p=0.460 n=5+5)
MergeKVs/4x9/no-duplicates-36                                                     2.28µs ± 4%    2.32µs ± 2%     ~     (p=0.095 n=5+5)
MergeKVs/4x9/all-duplicates-36                                                    2.31µs ± 3%    2.32µs ± 2%     ~     (p=0.841 n=5+5)
MergeKVs/4x9/start-duplicate-36                                                   2.43µs ± 3%    2.48µs ± 6%     ~     (p=0.310 n=5+5)
MergeKVs/4x9/end-duplicate-36                                                     2.49µs ± 3%    2.53µs ± 2%     ~     (p=0.222 n=5+5)
MergeKVs/5x0/no-duplicates-36                                                      390ns ± 1%     398ns ± 2%   +2.18%  (p=0.032 n=5+5)
MergeKVs/5x0/all-duplicates-36                                                     385ns ± 4%     397ns ± 3%     ~     (p=0.095 n=5+5)
MergeKVs/5x0/start-duplicate-36                                                    633ns ± 2%     627ns ± 2%     ~     (p=0.310 n=5+5)
MergeKVs/5x0/end-duplicate-36                                                      669ns ± 3%     675ns ± 2%     ~     (p=0.579 n=5+5)
MergeKVs/5x1/no-duplicates-36                                                      557ns ± 3%     565ns ± 2%     ~     (p=0.421 n=5+5)
MergeKVs/5x1/all-duplicates-36                                                     557ns ± 2%     567ns ± 2%     ~     (p=0.222 n=5+5)
MergeKVs/5x1/start-duplicate-36                                                    721ns ± 3%     714ns ± 1%     ~     (p=0.643 n=5+5)
MergeKVs/5x1/end-duplicate-36                                                      746ns ± 3%     741ns ± 3%     ~     (p=0.690 n=5+5)
MergeKVs/5x2/no-duplicates-36                                                      664ns ± 3%     663ns ± 2%     ~     (p=1.000 n=5+5)
MergeKVs/5x2/all-duplicates-36                                                     686ns ± 4%     696ns ± 1%     ~     (p=0.310 n=5+5)
MergeKVs/5x2/start-duplicate-36                                                    834ns ± 5%     823ns ± 3%     ~     (p=0.421 n=5+5)
MergeKVs/5x2/end-duplicate-36                                                      868ns ± 5%     886ns ± 2%     ~     (p=0.151 n=5+5)
MergeKVs/5x3/no-duplicates-36                                                      725ns ± 5%     730ns ± 3%     ~     (p=0.841 n=5+5)
MergeKVs/5x3/all-duplicates-36                                                     762ns ± 3%     761ns ± 1%     ~     (p=0.841 n=5+5)
MergeKVs/5x3/start-duplicate-36                                                    912ns ± 2%     919ns ± 2%     ~     (p=0.421 n=5+5)
MergeKVs/5x3/end-duplicate-36                                                      958ns ± 2%     954ns ± 4%     ~     (p=0.548 n=5+5)
MergeKVs/5x4/no-duplicates-36                                                      837ns ± 3%     836ns ± 2%     ~     (p=0.841 n=5+5)
MergeKVs/5x4/all-duplicates-36                                                     890ns ± 2%     900ns ± 2%     ~     (p=0.222 n=5+5)
MergeKVs/5x4/start-duplicate-36                                                   1.01µs ± 4%    1.04µs ± 1%     ~     (p=0.095 n=5+5)
MergeKVs/5x4/end-duplicate-36                                                     1.07µs ± 2%    1.05µs ± 1%     ~     (p=0.151 n=5+5)
MergeKVs/5x5/no-duplicates-36                                                      931ns ± 3%     944ns ± 3%     ~     (p=0.222 n=5+5)
MergeKVs/5x5/all-duplicates-36                                                    1.00µs ± 2%    1.01µs ± 1%     ~     (p=0.500 n=5+5)
MergeKVs/5x5/start-duplicate-36                                                   1.12µs ± 1%    1.10µs ± 2%     ~     (p=0.222 n=5+5)
MergeKVs/5x5/end-duplicate-36                                                     1.14µs ± 3%    1.17µs ± 3%     ~     (p=0.095 n=5+5)
MergeKVs/5x6/no-duplicates-36                                                     1.01µs ± 2%    1.04µs ± 2%   +2.61%  (p=0.040 n=5+5)
MergeKVs/5x6/all-duplicates-36                                                    1.08µs ± 1%    1.09µs ± 3%     ~     (p=0.683 n=5+5)
MergeKVs/5x6/start-duplicate-36                                                   1.23µs ± 2%    1.23µs ± 2%     ~     (p=0.730 n=5+5)
MergeKVs/5x6/end-duplicate-36                                                     1.25µs ± 3%    1.27µs ± 2%     ~     (p=0.421 n=5+5)
MergeKVs/5x7/no-duplicates-36                                                     1.12µs ± 2%    1.12µs ± 3%     ~     (p=0.841 n=5+5)
MergeKVs/5x7/all-duplicates-36                                                    1.16µs ± 3%    1.18µs ± 3%     ~     (p=0.310 n=5+5)
MergeKVs/5x7/start-duplicate-36                                                   1.32µs ± 5%    1.35µs ± 3%     ~     (p=0.310 n=5+5)
MergeKVs/5x7/end-duplicate-36                                                     1.32µs ± 3%    1.35µs ± 6%     ~     (p=0.206 n=5+5)
MergeKVs/5x8/no-duplicates-36                                                     1.25µs ± 2%    1.26µs ± 1%     ~     (p=0.222 n=5+5)
MergeKVs/5x8/all-duplicates-36                                                    1.26µs ± 3%    1.27µs ± 3%     ~     (p=0.690 n=5+5)
MergeKVs/5x8/start-duplicate-36                                                   2.43µs ± 3%    2.44µs ± 2%     ~     (p=0.690 n=5+5)
MergeKVs/5x8/end-duplicate-36                                                     2.43µs ± 4%    2.51µs ± 3%     ~     (p=0.087 n=5+5)
MergeKVs/5x9/no-duplicates-36                                                     2.36µs ± 5%    2.36µs ± 5%     ~     (p=1.000 n=5+5)
MergeKVs/5x9/all-duplicates-36                                                    2.36µs ± 2%    2.42µs ± 3%   +2.67%  (p=0.032 n=5+5)
MergeKVs/5x9/start-duplicate-36                                                   2.51µs ± 2%    2.55µs ± 1%     ~     (p=0.151 n=5+5)
MergeKVs/5x9/end-duplicate-36                                                     2.53µs ± 5%    2.56µs ± 4%     ~     (p=0.746 n=5+5)
MergeKVs/6x0/no-duplicates-36                                                      435ns ± 2%     444ns ± 3%     ~     (p=0.310 n=5+5)
MergeKVs/6x0/all-duplicates-36                                                     431ns ± 3%     443ns ± 1%   +2.95%  (p=0.008 n=5+5)
MergeKVs/6x0/start-duplicate-36                                                    685ns ± 3%     674ns ± 2%     ~     (p=0.222 n=5+5)
MergeKVs/6x0/end-duplicate-36                                                      723ns ± 2%     707ns ± 4%     ~     (p=0.095 n=5+5)
MergeKVs/6x1/no-duplicates-36                                                      643ns ± 2%     645ns ± 1%     ~     (p=0.841 n=5+5)
MergeKVs/6x1/all-duplicates-36                                                     635ns ± 2%     627ns ± 4%     ~     (p=0.548 n=5+5)
MergeKVs/6x1/start-duplicate-36                                                    784ns ± 4%     813ns ± 3%     ~     (p=0.056 n=5+5)
MergeKVs/6x1/end-duplicate-36                                                      832ns ± 1%     835ns ± 1%     ~     (p=0.690 n=5+5)
MergeKVs/6x2/no-duplicates-36                                                      696ns ± 2%     701ns ± 2%     ~     (p=0.841 n=5+5)
MergeKVs/6x2/all-duplicates-36                                                     723ns ± 3%     720ns ± 2%     ~     (p=0.841 n=5+5)
MergeKVs/6x2/start-duplicate-36                                                    893ns ± 2%     902ns ± 4%     ~     (p=0.444 n=5+5)
MergeKVs/6x2/end-duplicate-36                                                      957ns ± 2%     944ns ± 3%     ~     (p=0.421 n=5+5)
MergeKVs/6x3/no-duplicates-36                                                      814ns ± 2%     821ns ± 3%     ~     (p=0.841 n=5+5)
MergeKVs/6x3/all-duplicates-36                                                     863ns ± 3%     862ns ± 3%     ~     (p=1.000 n=5+5)
MergeKVs/6x3/start-duplicate-36                                                   1.00µs ± 2%    0.99µs ± 5%     ~     (p=0.873 n=5+5)
MergeKVs/6x3/end-duplicate-36                                                     1.01µs ± 3%    1.01µs ± 2%     ~     (p=0.968 n=5+5)
MergeKVs/6x4/no-duplicates-36                                                      910ns ± 4%     919ns ± 4%     ~     (p=0.841 n=5+5)
MergeKVs/6x4/all-duplicates-36                                                     959ns ± 2%     951ns ± 2%     ~     (p=0.690 n=5+5)
MergeKVs/6x4/start-duplicate-36                                                   1.10µs ± 2%    1.08µs ± 2%     ~     (p=0.198 n=5+5)
MergeKVs/6x4/end-duplicate-36                                                     1.11µs ± 4%    1.11µs ± 3%     ~     (p=1.000 n=5+5)
MergeKVs/6x5/no-duplicates-36                                                     1.01µs ± 2%    1.02µs ± 2%     ~     (p=0.421 n=5+5)
MergeKVs/6x5/all-duplicates-36                                                    1.07µs ± 3%    1.08µs ± 3%     ~     (p=0.548 n=5+5)
MergeKVs/6x5/start-duplicate-36                                                   1.19µs ± 1%    1.20µs ± 4%     ~     (p=0.151 n=5+5)
MergeKVs/6x5/end-duplicate-36                                                     1.22µs ± 1%    1.24µs ± 5%     ~     (p=0.135 n=5+5)
MergeKVs/6x6/no-duplicates-36                                                     1.11µs ± 2%    1.10µs ± 3%     ~     (p=0.841 n=5+5)
MergeKVs/6x6/all-duplicates-36                                                    1.17µs ± 3%    1.16µs ± 3%     ~     (p=0.952 n=5+5)
MergeKVs/6x6/start-duplicate-36                                                   1.29µs ± 2%    1.28µs ± 2%     ~     (p=0.421 n=5+5)
MergeKVs/6x6/end-duplicate-36                                                     1.34µs ± 2%    1.32µs ± 3%     ~     (p=0.310 n=5+5)
MergeKVs/6x7/no-duplicates-36                                                     1.21µs ± 3%    1.23µs ± 3%     ~     (p=0.222 n=5+5)
MergeKVs/6x7/all-duplicates-36                                                    1.28µs ± 2%    1.28µs ± 3%     ~     (p=0.897 n=5+5)
MergeKVs/6x7/start-duplicate-36                                                   1.41µs ± 3%    1.39µs ± 2%     ~     (p=0.421 n=5+5)
MergeKVs/6x7/end-duplicate-36                                                     1.42µs ± 3%    1.43µs ± 3%     ~     (p=0.690 n=5+5)
MergeKVs/6x8/no-duplicates-36                                                     1.32µs ± 3%    1.32µs ± 3%     ~     (p=1.000 n=5+5)
MergeKVs/6x8/all-duplicates-36                                                    1.35µs ± 2%    1.35µs ± 3%     ~     (p=1.000 n=5+5)
MergeKVs/6x8/start-duplicate-36                                                   2.51µs ± 3%    2.48µs ± 3%     ~     (p=0.310 n=5+5)
MergeKVs/6x8/end-duplicate-36                                                     2.56µs ± 1%    2.56µs ± 1%     ~     (p=1.000 n=5+5)
MergeKVs/6x9/no-duplicates-36                                                     2.46µs ± 3%    2.45µs ± 3%     ~     (p=0.690 n=5+5)
MergeKVs/6x9/all-duplicates-36                                                    2.53µs ± 4%    2.51µs ± 5%     ~     (p=0.841 n=5+5)
MergeKVs/6x9/start-duplicate-36                                                   2.67µs ± 2%    2.66µs ± 5%     ~     (p=0.730 n=5+5)
MergeKVs/6x9/end-duplicate-36                                                     2.71µs ± 2%    2.72µs ± 3%     ~     (p=1.000 n=5+5)
MergeKVs/7x0/no-duplicates-36                                                      521ns ± 1%     536ns ± 2%   +2.91%  (p=0.032 n=5+5)
MergeKVs/7x0/all-duplicates-36                                                     526ns ± 2%     536ns ± 1%   +1.97%  (p=0.032 n=5+5)
MergeKVs/7x0/start-duplicate-36                                                    767ns ± 5%     769ns ± 3%     ~     (p=1.000 n=5+5)
MergeKVs/7x0/end-duplicate-36                                                      811ns ± 2%     819ns ± 2%     ~     (p=0.310 n=5+5)
MergeKVs/7x1/no-duplicates-36                                                      658ns ± 4%     667ns ± 1%     ~     (p=0.310 n=5+5)
MergeKVs/7x1/all-duplicates-36                                                     678ns ± 7%     693ns ± 3%     ~     (p=0.548 n=5+5)
MergeKVs/7x1/start-duplicate-36                                                    859ns ± 4%     867ns ± 1%     ~     (p=0.421 n=5+5)
MergeKVs/7x1/end-duplicate-36                                                      896ns ± 4%     901ns ± 4%     ~     (p=1.000 n=5+5)
MergeKVs/7x2/no-duplicates-36                                                      771ns ± 2%     783ns ± 3%     ~     (p=0.095 n=5+5)
MergeKVs/7x2/all-duplicates-36                                                     831ns ± 3%     826ns ± 4%     ~     (p=1.000 n=5+5)
MergeKVs/7x2/start-duplicate-36                                                    960ns ± 3%     944ns ± 3%     ~     (p=0.151 n=5+5)
MergeKVs/7x2/end-duplicate-36                                                     1.03µs ± 1%    1.01µs ± 2%     ~     (p=0.167 n=5+5)
MergeKVs/7x3/no-duplicates-36                                                      893ns ± 4%     890ns ± 3%     ~     (p=0.841 n=5+5)
MergeKVs/7x3/all-duplicates-36                                                     902ns ± 4%     927ns ± 3%     ~     (p=0.222 n=5+5)
MergeKVs/7x3/start-duplicate-36                                                   1.06µs ± 2%    1.07µs ± 2%     ~     (p=0.651 n=5+5)
MergeKVs/7x3/end-duplicate-36                                                     1.09µs ± 2%    1.08µs ± 1%     ~     (p=0.730 n=5+5)
MergeKVs/7x4/no-duplicates-36                                                      973ns ± 4%     994ns ± 1%     ~     (p=0.095 n=5+5)
MergeKVs/7x4/all-duplicates-36                                                    1.03µs ± 4%    1.02µs ± 5%     ~     (p=0.730 n=5+5)
MergeKVs/7x4/start-duplicate-36                                                   1.16µs ± 2%    1.16µs ± 3%     ~     (p=0.881 n=5+5)
MergeKVs/7x4/end-duplicate-36                                                     1.20µs ± 4%    1.20µs ± 2%     ~     (p=0.841 n=5+5)
MergeKVs/7x5/no-duplicates-36                                                     1.07µs ± 3%    1.07µs ± 2%     ~     (p=0.889 n=5+5)
MergeKVs/7x5/all-duplicates-36                                                    1.13µs ± 3%    1.12µs ± 5%     ~     (p=1.000 n=5+5)
MergeKVs/7x5/start-duplicate-36                                                   1.23µs ± 2%    1.26µs ± 3%     ~     (p=0.159 n=5+5)
MergeKVs/7x5/end-duplicate-36                                                     1.28µs ± 3%    1.27µs ± 3%     ~     (p=0.841 n=5+5)
MergeKVs/7x6/no-duplicates-36                                                     1.18µs ± 2%    1.18µs ± 1%     ~     (p=0.889 n=5+5)
MergeKVs/7x6/all-duplicates-36                                                    1.24µs ± 2%    1.26µs ± 3%     ~     (p=0.341 n=5+5)
MergeKVs/7x6/start-duplicate-36                                                   1.36µs ± 2%    1.36µs ± 3%     ~     (p=0.968 n=5+5)
MergeKVs/7x6/end-duplicate-36                                                     1.40µs ± 0%    1.39µs ± 2%     ~     (p=0.151 n=5+5)
MergeKVs/7x7/no-duplicates-36                                                     1.28µs ± 2%    1.27µs ± 2%     ~     (p=0.968 n=5+5)
MergeKVs/7x7/all-duplicates-36                                                    1.34µs ± 3%    1.33µs ± 5%     ~     (p=0.690 n=5+5)
MergeKVs/7x7/start-duplicate-36                                                   1.44µs ± 1%    1.42µs ± 2%   -1.90%  (p=0.024 n=5+5)
MergeKVs/7x7/end-duplicate-36                                                     1.46µs ± 2%    1.48µs ± 3%     ~     (p=0.643 n=5+5)
MergeKVs/7x8/no-duplicates-36                                                     1.37µs ± 3%    1.38µs ± 2%     ~     (p=0.794 n=5+5)
MergeKVs/7x8/all-duplicates-36                                                    1.43µs ± 3%    1.42µs ± 1%     ~     (p=0.841 n=5+5)
MergeKVs/7x8/start-duplicate-36                                                   2.61µs ± 3%    2.66µs ± 3%     ~     (p=0.222 n=5+5)
MergeKVs/7x8/end-duplicate-36                                                     2.66µs ± 2%    2.69µs ± 3%     ~     (p=0.421 n=5+5)
MergeKVs/7x9/no-duplicates-36                                                     2.58µs ± 2%    2.53µs ± 4%     ~     (p=0.222 n=5+5)
MergeKVs/7x9/all-duplicates-36                                                    2.58µs ± 2%    2.58µs ± 5%     ~     (p=0.841 n=5+5)
MergeKVs/7x9/start-duplicate-36                                                   2.71µs ± 2%    2.73µs ± 3%     ~     (p=0.841 n=5+5)
MergeKVs/7x9/end-duplicate-36                                                     2.73µs ± 3%    2.70µs ± 1%     ~     (p=0.421 n=5+5)
MergeKVs/8x0/no-duplicates-36                                                      540ns ± 1%     543ns ± 2%     ~     (p=0.460 n=5+5)
MergeKVs/8x0/all-duplicates-36                                                     536ns ± 1%     542ns ± 1%     ~     (p=0.151 n=5+5)
MergeKVs/8x0/start-duplicate-36                                                    830ns ± 2%     820ns ± 2%     ~     (p=0.222 n=5+5)
MergeKVs/8x0/end-duplicate-36                                                      862ns ± 2%     848ns ± 1%     ~     (p=0.151 n=5+5)
MergeKVs/8x1/no-duplicates-36                                                      749ns ± 2%     745ns ± 1%     ~     (p=0.421 n=5+5)
MergeKVs/8x1/all-duplicates-36                                                     794ns ± 2%     760ns ± 3%   -4.23%  (p=0.016 n=5+5)
MergeKVs/8x1/start-duplicate-36                                                    912ns ± 6%     913ns ± 1%     ~     (p=0.548 n=5+5)
MergeKVs/8x1/end-duplicate-36                                                      941ns ± 8%     937ns ± 2%     ~     (p=0.310 n=5+5)
MergeKVs/8x2/no-duplicates-36                                                      839ns ± 3%     836ns ± 2%     ~     (p=0.841 n=5+5)
MergeKVs/8x2/all-duplicates-36                                                     903ns ± 2%     900ns ± 1%     ~     (p=1.000 n=5+5)
MergeKVs/8x2/start-duplicate-36                                                   1.02µs ± 2%    1.01µs ± 3%     ~     (p=1.000 n=5+5)
MergeKVs/8x2/end-duplicate-36                                                     1.07µs ± 3%    1.04µs ± 1%   -3.35%  (p=0.016 n=5+5)
MergeKVs/8x3/no-duplicates-36                                                      962ns ± 1%     941ns ± 2%     ~     (p=0.056 n=5+5)
MergeKVs/8x3/all-duplicates-36                                                    1.01µs ± 2%    1.02µs ± 2%     ~     (p=0.460 n=5+5)
MergeKVs/8x3/start-duplicate-36                                                   1.13µs ± 2%    1.12µs ± 2%     ~     (p=0.627 n=5+5)
MergeKVs/8x3/end-duplicate-36                                                     1.15µs ± 4%    1.15µs ± 3%     ~     (p=0.730 n=5+5)
MergeKVs/8x4/no-duplicates-36                                                     1.05µs ± 3%    1.03µs ± 2%     ~     (p=0.238 n=5+5)
MergeKVs/8x4/all-duplicates-36                                                    1.10µs ± 1%    1.09µs ± 2%     ~     (p=0.095 n=5+5)
MergeKVs/8x4/start-duplicate-36                                                   1.22µs ± 3%    1.24µs ± 2%     ~     (p=0.238 n=5+5)
MergeKVs/8x4/end-duplicate-36                                                     1.28µs ± 3%    1.25µs ± 3%     ~     (p=0.095 n=5+5)
MergeKVs/8x5/no-duplicates-36                                                     1.14µs ± 2%    1.16µs ± 1%     ~     (p=0.087 n=5+5)
MergeKVs/8x5/all-duplicates-36                                                    1.23µs ± 1%    1.22µs ± 1%     ~     (p=0.802 n=5+5)
MergeKVs/8x5/start-duplicate-36                                                   1.32µs ± 3%    1.31µs ± 2%     ~     (p=0.897 n=5+5)
MergeKVs/8x5/end-duplicate-36                                                     1.36µs ± 1%    1.34µs ± 2%     ~     (p=0.341 n=5+5)
MergeKVs/8x6/no-duplicates-36                                                     1.23µs ± 2%    1.24µs ± 2%     ~     (p=0.421 n=5+5)
MergeKVs/8x6/all-duplicates-36                                                    1.31µs ± 5%    1.32µs ± 2%     ~     (p=0.897 n=5+5)
MergeKVs/8x6/start-duplicate-36                                                   1.38µs ± 2%    1.40µs ± 1%     ~     (p=0.222 n=5+5)
MergeKVs/8x6/end-duplicate-36                                                     1.43µs ± 3%    1.42µs ± 3%     ~     (p=0.310 n=5+5)
MergeKVs/8x7/no-duplicates-36                                                     1.36µs ± 3%    1.33µs ± 3%     ~     (p=0.056 n=5+5)
MergeKVs/8x7/all-duplicates-36                                                    1.43µs ± 2%    1.43µs ± 3%     ~     (p=1.000 n=5+5)
MergeKVs/8x7/start-duplicate-36                                                   1.54µs ± 3%    1.55µs ± 2%     ~     (p=0.690 n=5+5)
MergeKVs/8x7/end-duplicate-36                                                     1.56µs ± 3%    1.57µs ± 3%     ~     (p=0.452 n=5+5)
MergeKVs/8x8/no-duplicates-36                                                     1.42µs ± 2%    1.42µs ± 4%     ~     (p=0.643 n=5+5)
MergeKVs/8x8/all-duplicates-36                                                    1.46µs ± 1%    1.49µs ± 2%     ~     (p=0.079 n=5+5)
MergeKVs/8x8/start-duplicate-36                                                   2.72µs ± 2%    2.73µs ± 2%     ~     (p=0.460 n=5+5)
MergeKVs/8x8/end-duplicate-36                                                     2.73µs ± 1%    2.71µs ± 4%     ~     (p=0.690 n=5+5)
MergeKVs/8x9/no-duplicates-36                                                     2.63µs ± 3%    2.66µs ± 3%     ~     (p=0.937 n=5+5)
MergeKVs/8x9/all-duplicates-36                                                    2.73µs ± 3%    2.75µs ± 3%     ~     (p=0.690 n=5+5)
MergeKVs/8x9/start-duplicate-36                                                   2.82µs ± 2%    2.87µs ± 3%     ~     (p=0.175 n=5+5)
MergeKVs/8x9/end-duplicate-36                                                     2.89µs ± 3%    2.89µs ± 4%     ~     (p=1.000 n=5+5)
MergeKVs/9x0/no-duplicates-36                                                      610ns ± 2%     626ns ± 1%   +2.65%  (p=0.008 n=5+5)
MergeKVs/9x0/all-duplicates-36                                                     611ns ± 3%     623ns ± 2%     ~     (p=0.095 n=5+5)
MergeKVs/9x0/start-duplicate-36                                                    876ns ± 3%     882ns ± 4%     ~     (p=0.548 n=5+5)
MergeKVs/9x0/end-duplicate-36                                                      909ns ± 3%     902ns ± 1%     ~     (p=0.690 n=5+5)
MergeKVs/9x1/no-duplicates-36                                                      800ns ± 3%     804ns ± 2%     ~     (p=1.000 n=5+5)
MergeKVs/9x1/all-duplicates-36                                                     831ns ± 3%     824ns ± 2%     ~     (p=0.222 n=5+5)
MergeKVs/9x1/start-duplicate-36                                                    963ns ± 1%     980ns ± 1%   +1.82%  (p=0.016 n=5+5)
MergeKVs/9x1/end-duplicate-36                                                     1.01µs ± 3%    0.99µs ± 3%     ~     (p=0.222 n=5+5)
MergeKVs/9x2/no-duplicates-36                                                      889ns ± 2%     900ns ± 2%     ~     (p=0.421 n=5+5)
MergeKVs/9x2/all-duplicates-36                                                     948ns ± 2%     945ns ± 2%     ~     (p=1.000 n=5+5)
MergeKVs/9x2/start-duplicate-36                                                   1.10µs ± 3%    1.10µs ± 2%     ~     (p=0.587 n=5+5)
MergeKVs/9x2/end-duplicate-36                                                     1.15µs ± 2%    1.12µs ± 1%   -2.33%  (p=0.016 n=5+5)
MergeKVs/9x3/no-duplicates-36                                                     1.01µs ± 3%    0.99µs ± 1%     ~     (p=0.056 n=5+5)
MergeKVs/9x3/all-duplicates-36                                                    1.07µs ± 3%    1.08µs ± 2%     ~     (p=0.690 n=5+5)
MergeKVs/9x3/start-duplicate-36                                                   1.18µs ± 2%    1.16µs ± 3%     ~     (p=0.341 n=5+5)
MergeKVs/9x3/end-duplicate-36                                                     1.21µs ± 2%    1.21µs ± 1%     ~     (p=0.690 n=5+5)
MergeKVs/9x4/no-duplicates-36                                                     1.09µs ± 1%    1.10µs ± 2%     ~     (p=0.952 n=5+5)
MergeKVs/9x4/all-duplicates-36                                                    1.19µs ± 2%    1.20µs ± 3%     ~     (p=0.690 n=5+5)
MergeKVs/9x4/start-duplicate-36                                                   1.29µs ± 3%    1.29µs ± 2%     ~     (p=0.841 n=5+5)
MergeKVs/9x4/end-duplicate-36                                                     1.32µs ± 2%    1.30µs ± 3%     ~     (p=0.151 n=5+5)
MergeKVs/9x5/no-duplicates-36                                                     1.18µs ± 2%    1.20µs ± 3%     ~     (p=0.246 n=5+5)
MergeKVs/9x5/all-duplicates-36                                                    1.28µs ± 2%    1.29µs ± 2%     ~     (p=0.246 n=5+5)
MergeKVs/9x5/start-duplicate-36                                                   1.35µs ± 3%    1.35µs ± 1%     ~     (p=1.000 n=5+5)
MergeKVs/9x5/end-duplicate-36                                                     1.39µs ± 1%    1.37µs ± 1%   -1.44%  (p=0.032 n=5+5)
MergeKVs/9x6/no-duplicates-36                                                     1.31µs ± 2%    1.30µs ± 5%     ~     (p=1.000 n=5+5)
MergeKVs/9x6/all-duplicates-36                                                    1.39µs ± 1%    1.40µs ± 2%     ~     (p=0.071 n=5+5)
MergeKVs/9x6/start-duplicate-36                                                   1.47µs ± 2%    1.47µs ± 1%     ~     (p=0.857 n=5+4)
MergeKVs/9x6/end-duplicate-36                                                     1.53µs ± 2%    1.50µs ± 5%     ~     (p=0.151 n=5+5)
MergeKVs/9x7/no-duplicates-36                                                     1.36µs ± 2%    1.38µs ± 2%     ~     (p=0.310 n=5+5)
MergeKVs/9x7/all-duplicates-36                                                    1.43µs ± 7%    1.44µs ± 1%     ~     (p=1.000 n=5+5)
MergeKVs/9x7/start-duplicate-36                                                   1.58µs ± 3%    1.58µs ± 2%     ~     (p=1.000 n=5+5)
MergeKVs/9x7/end-duplicate-36                                                     1.59µs ± 4%    1.64µs ± 3%     ~     (p=0.151 n=5+5)
MergeKVs/9x8/no-duplicates-36                                                     1.52µs ± 4%    1.51µs ± 1%     ~     (p=0.421 n=5+5)
MergeKVs/9x8/all-duplicates-36                                                    1.61µs ± 2%    1.64µs ± 1%   +1.99%  (p=0.032 n=5+5)
MergeKVs/9x8/start-duplicate-36                                                   2.86µs ± 3%    2.87µs ± 2%     ~     (p=1.000 n=5+5)
MergeKVs/9x8/end-duplicate-36                                                     2.85µs ± 2%    2.90µs ± 3%     ~     (p=0.310 n=5+5)
MergeKVs/9x9/no-duplicates-36                                                     2.70µs ± 2%    2.68µs ± 4%     ~     (p=1.000 n=5+5)
MergeKVs/9x9/all-duplicates-36                                                    2.82µs ± 3%    2.82µs ± 2%     ~     (p=1.000 n=5+5)
MergeKVs/9x9/start-duplicate-36                                                   2.87µs ± 2%    2.91µs ± 2%     ~     (p=0.222 n=5+5)
MergeKVs/9x9/end-duplicate-36                                                     2.92µs ± 2%    2.95µs ± 2%     ~     (p=0.548 n=5+5)
pkg:k8s.io/klog/v2/textlogger goos:linux goarch:amd64
TextloggerOutput/call_depth-36                                                    3.24µs ± 4%    3.35µs ± 9%     ~     (p=0.421 n=5+5)
TextloggerOutput/override_single_value-36                                         3.07µs ±12%    3.09µs ±10%     ~     (p=1.000 n=5+5)
TextloggerOutput/multiple_WithValues-36                                           11.9µs ± 4%    13.4µs ± 4%  +12.33%  (p=0.008 n=5+5)
TextloggerOutput/KObjSlice_ints-36                                                3.00µs ±13%    2.92µs ±10%     ~     (p=0.841 n=5+5)
TextloggerOutput/struct_keys-36                                                   3.81µs ± 8%    3.85µs ± 6%     ~     (p=0.548 n=5+5)
TextloggerOutput/struct_values-36                                                 3.50µs ± 3%    2.95µs ± 4%  -15.62%  (p=0.008 n=5+5)
TextloggerOutput/verbosity_disabled-36                                             151ns ± 3%     162ns ± 2%   +7.03%  (p=0.008 n=5+5)
TextloggerOutput/KObjSlice_int_arg-36                                             2.66µs ± 6%    2.75µs ± 3%     ~     (p=0.095 n=5+5)
TextloggerOutput/KObjSlice_nil_entry-36                                           2.67µs ± 5%    2.84µs ±10%     ~     (p=0.222 n=5+5)
TextloggerOutput/ignore_MarshalJSON-36                                            2.71µs ± 7%    2.95µs ± 9%     ~     (p=0.056 n=5+5)
TextloggerOutput/MarshalLog()_that_panics-36                                      3.87µs ± 7%    4.09µs ± 6%     ~     (p=0.095 n=5+5)
TextloggerOutput/MarshalLog()_that_returns_itself-36                              3.19µs ± 6%    3.17µs ± 9%     ~     (p=1.000 n=5+5)
TextloggerOutput/handle_odd-numbers_of_KVs_in_both_log_values_and_Info_args-36    3.79µs ± 7%    3.98µs ± 7%     ~     (p=0.222 n=5+5)
TextloggerOutput/KObj-36                                                          2.51µs ± 3%    2.56µs ±14%     ~     (p=1.000 n=5+5)
TextloggerOutput/log_with_name_and_values-36                                      3.13µs ± 7%    3.31µs ± 8%     ~     (p=0.095 n=5+5)
TextloggerOutput/MarshalLog()_for_nil-36                                          3.82µs ± 3%    3.45µs ± 7%   -9.83%  (p=0.008 n=5+5)
TextloggerOutput/preserve_order_of_key/value_pairs-36                             4.00µs ± 6%    3.99µs ± 4%     ~     (p=1.000 n=5+5)
TextloggerOutput/KObjSlice_okay-36                                                2.76µs ± 6%    2.85µs ± 5%     ~     (p=0.310 n=5+5)
TextloggerOutput/map_keys-36                                                      3.84µs ± 9%    3.78µs ± 8%     ~     (p=0.690 n=5+5)
TextloggerOutput/other_vmodule-36                                                  864ns ± 3%     864ns ± 6%     ~     (p=0.841 n=5+5)
TextloggerOutput/print_duplicate_keys_in_arguments-36                             3.05µs ± 4%    2.93µs ± 9%     ~     (p=0.421 n=5+5)
TextloggerOutput/regular_error_types_when_using_logr.Error-36                     2.56µs ± 6%    2.63µs ± 8%     ~     (p=0.421 n=5+5)
TextloggerOutput/Error()_that_panics-36                                           3.48µs ±10%    3.59µs ± 7%     ~     (p=0.421 n=5+5)
TextloggerOutput/log_with_values-36                                               2.86µs ± 6%    2.79µs ± 6%     ~     (p=0.421 n=5+5)
TextloggerOutput/override_WithValues-36                                           3.40µs ±11%    3.45µs ± 5%     ~     (p=0.841 n=5+5)
TextloggerOutput/String()_for_nil-36                                              6.87µs ± 6%    6.74µs ± 8%     ~     (p=0.690 n=5+5)
TextloggerOutput/map_values-36                                                    4.94µs ± 8%    5.21µs ± 4%     ~     (p=0.222 n=5+5)
TextloggerOutput/empty_WithValues-36                                              2.54µs ± 6%    2.63µs ± 6%     ~     (p=0.222 n=5+5)
TextloggerOutput/html_characters-36                                               2.77µs ± 3%    2.87µs ± 9%     ~     (p=0.452 n=5+5)
TextloggerOutput/KObjs-36                                                         3.91µs ± 5%    2.86µs ± 6%  -26.83%  (p=0.008 n=5+5)
TextloggerOutput/Error()_for_nil-36                                               7.07µs ± 6%    6.93µs ± 5%     ~     (p=0.421 n=5+5)
TextloggerOutput/String()_that_panics-36                                          3.78µs ± 8%    3.78µs ± 3%     ~     (p=0.421 n=5+5)
TextloggerOutput/handle_integer_keys-36                                           4.35µs ± 4%    4.27µs ± 9%     ~     (p=0.548 n=5+5)
TextloggerOutput/vmodule-36                                                       3.87µs ± 7%    3.82µs ± 6%     ~     (p=1.000 n=5+5)
TextloggerOutput/log_with_multiple_names_and_values-36                            3.69µs ±10%    3.70µs ± 4%     ~     (p=0.500 n=5+5)
TextloggerOutput/handle_odd-numbers_of_KVs-36                                     3.26µs ± 7%    3.39µs ± 4%     ~     (p=0.095 n=5+5)
TextloggerOutput/quotation-36                                                     2.97µs ± 7%    3.11µs ±10%     ~     (p=0.421 n=5+5)
TextloggerOutput/KObjSlice_nil_arg-36                                             2.76µs ± 5%    2.66µs ±15%     ~     (p=0.841 n=5+5)
TextloggerOutput/regular_error_types_as_value-36                                  2.89µs ± 8%    2.82µs ± 5%     ~     (p=0.548 n=5+5)
TextloggerOutput/slice_values-36                                                  3.77µs ± 4%    3.10µs ± 7%  -17.60%  (p=0.008 n=5+5)
TextloggerOutput/verbosity_enabled-36                                             2.71µs ± 4%    2.61µs ± 5%     ~     (p=0.310 n=5+5)
TextloggerOutput/odd_WithValues-36                                                9.47µs ± 4%   10.16µs ± 2%   +7.36%  (p=0.008 n=5+5)

name                                                                            old alloc/op   new alloc/op   delta
pkg:k8s.io/klog/v2 goos:linux goarch:amd64
Header-36                                                                           232B ± 0%      232B ± 0%     ~     (all equal)
HeaderWithDir-36                                                                    232B ± 0%      232B ± 0%     ~     (all equal)
V-36                                                                               0.00B          0.00B          ~     (all equal)
KRef-36                                                                            0.00B          0.00B          ~     (all equal)
KObj-36                                                                            0.00B          0.00B          ~     (all equal)
KObjs/0/simple-36                                                                  80.0B ± 0%     80.0B ± 0%     ~     (all equal)
KObjs/0/conditional-36                                                             0.00B          0.00B          ~     (all equal)
KObjs/10/simple-36                                                                  400B ± 0%      400B ± 0%     ~     (all equal)
KObjs/10/conditional-36                                                            0.00B          0.00B          ~     (all equal)
KObjs/20/simple-36                                                                  720B ± 0%      720B ± 0%     ~     (all equal)
KObjs/20/conditional-36                                                            0.00B          0.00B          ~     (all equal)
KObjs/30/simple-36                                                                1.10kB ± 0%    1.10kB ± 0%     ~     (all equal)
KObjs/30/conditional-36                                                            0.00B          0.00B          ~     (all equal)
KObjs/40/simple-36                                                                1.36kB ± 0%    1.36kB ± 0%     ~     (all equal)
KObjs/40/conditional-36                                                            0.00B          0.00B          ~     (all equal)
KObjs/50/simple-36                                                                1.87kB ± 0%    1.87kB ± 0%     ~     (all equal)
KObjs/50/conditional-36                                                            0.00B          0.00B          ~     (all equal)
KObjs/60/simple-36                                                                2.13kB ± 0%    2.13kB ± 0%     ~     (all equal)
KObjs/60/conditional-36                                                            0.00B          0.00B          ~     (all equal)
KObjs/70/simple-36                                                                2.38kB ± 0%    2.38kB ± 0%     ~     (all equal)
KObjs/70/conditional-36                                                            0.00B          0.00B          ~     (all equal)
KObjs/80/simple-36                                                                2.77kB ± 0%    2.77kB ± 0%     ~     (all equal)
KObjs/80/conditional-36                                                            0.00B          0.00B          ~     (all equal)
KObjs/90/simple-36                                                                3.15kB ± 0%    3.15kB ± 0%     ~     (all equal)
KObjs/90/conditional-36                                                            0.00B          0.00B          ~     (all equal)
KObjs/100/simple-36                                                               3.28kB ± 0%    3.28kB ± 0%     ~     (all equal)
KObjs/100/conditional-36                                                           0.00B          0.00B          ~     (all equal)
KObjSlice/0/simple-36                                                              72.0B ± 0%     72.0B ± 0%     ~     (all equal)
KObjSlice/0/conditional-36                                                         0.00B          0.00B          ~     (all equal)
KObjSlice/10/simple-36                                                             72.0B ± 0%     72.0B ± 0%     ~     (all equal)
KObjSlice/10/conditional-36                                                        0.00B          0.00B          ~     (all equal)
KObjSlice/20/simple-36                                                             72.0B ± 0%     72.0B ± 0%     ~     (all equal)
KObjSlice/20/conditional-36                                                        0.00B          0.00B          ~     (all equal)
KObjSlice/30/simple-36                                                             72.0B ± 0%     72.0B ± 0%     ~     (all equal)
KObjSlice/30/conditional-36                                                        0.00B          0.00B          ~     (all equal)
KObjSlice/40/simple-36                                                             72.0B ± 0%     72.0B ± 0%     ~     (all equal)
KObjSlice/40/conditional-36                                                        0.00B          0.00B          ~     (all equal)
KObjSlice/50/simple-36                                                             72.0B ± 0%     72.0B ± 0%     ~     (all equal)
KObjSlice/50/conditional-36                                                        0.00B          0.00B          ~     (all equal)
KObjSlice/60/simple-36                                                             72.0B ± 0%     72.0B ± 0%     ~     (all equal)
KObjSlice/60/conditional-36                                                        0.00B          0.00B          ~     (all equal)
KObjSlice/70/simple-36                                                             72.0B ± 0%     72.0B ± 0%     ~     (all equal)
KObjSlice/70/conditional-36                                                        0.00B          0.00B          ~     (all equal)
KObjSlice/80/simple-36                                                             72.0B ± 0%     72.0B ± 0%     ~     (all equal)
KObjSlice/80/conditional-36                                                        0.00B          0.00B          ~     (all equal)
KObjSlice/90/simple-36                                                             72.0B ± 0%     72.0B ± 0%     ~     (all equal)
KObjSlice/90/conditional-36                                                        0.00B          0.00B          ~     (all equal)
KObjSlice/100/simple-36                                                            72.0B ± 0%     72.0B ± 0%     ~     (all equal)
KObjSlice/100/conditional-36                                                       0.00B          0.00B          ~     (all equal)
Scalars/simple-36                                                                  64.0B ± 0%     64.0B ± 0%     ~     (all equal)
Scalars/conditional-36                                                             0.00B          0.00B          ~     (all equal)
ScalarsWithLogger/simple-36                                                        64.0B ± 0%     64.0B ± 0%     ~     (all equal)
ScalarsWithLogger/conditional-36                                                   0.00B          0.00B          ~     (all equal)
KObjSliceWithLogger/simple-36                                                      72.0B ± 0%     72.0B ± 0%     ~     (all equal)
KObjSliceWithLogger/conditional-36                                                 0.00B          0.00B          ~     (all equal)
Logs-36                                                                             747B ± 0%      747B ± 0%     ~     (p=0.333 n=5+4)
WithoutDeferUnLock-36                                                              0.00B          0.00B          ~     (all equal)
WithDeferUnLock-36                                                                 0.00B          0.00B          ~     (all equal)
KlogOutput/KObjSlice_int_arg-36                                                     353B ± 0%      353B ± 0%     ~     (all equal)
KlogOutput/handle_integer_keys-36                                                   746B ± 0%      746B ± 0%     ~     (all equal)
KlogOutput/handle_odd-numbers_of_KVs_in_both_log_values_and_Info_args-36            810B ± 0%      810B ± 0%     ~     (all equal)
KlogOutput/vmodule-36                                                               425B ± 0%      425B ± 0%     ~     (all equal)
KlogOutput/other_vmodule-36                                                        0.00B          0.00B          ~     (all equal)
KlogOutput/override_WithValues-36                                                   497B ± 0%      497B ± 0%     ~     (all equal)
KlogOutput/print_duplicate_keys_in_arguments-36                                     401B ± 0%      401B ± 0%     ~     (all equal)
KlogOutput/map_keys-36                                                              489B ± 0%      489B ± 0%     ~     (all equal)
KlogOutput/verbosity_disabled-36                                                   0.00B          0.00B          ~     (all equal)
KlogOutput/handle_odd-numbers_of_KVs-36                                             401B ± 0%      401B ± 0%     ~     (all equal)
KlogOutput/html_characters-36                                                       328B ± 0%      328B ± 0%     ~     (all equal)
KlogOutput/struct_keys-36                                                           665B ± 0%      665B ± 0%     ~     (all equal)
KlogOutput/slice_values-36                                                          457B ± 0%      377B ± 0%  -17.51%  (p=0.008 n=5+5)
KlogOutput/call_depth-36                                                            336B ± 0%      336B ± 0%     ~     (p=1.000 n=5+5)
KlogOutput/KObjSlice_nil_entry-36                                                   336B ± 0%      337B ± 0%     ~     (p=1.000 n=5+5)
KlogOutput/String()_for_nil-36                                                      834B ± 0%      834B ± 0%     ~     (all equal)
KlogOutput/KObjSlice_okay-36                                                        353B ± 0%      361B ± 0%   +2.27%  (p=0.008 n=5+5)
KlogOutput/odd_WithValues-36                                                      1.43kB ± 0%    1.43kB ± 0%     ~     (all equal)
KlogOutput/multiple_WithValues-36                                                 1.75kB ± 0%    1.75kB ± 0%   +0.11%  (p=0.008 n=5+5)
KlogOutput/preserve_order_of_key/value_pairs-36                                     946B ± 0%      946B ± 0%     ~     (all equal)
KlogOutput/KObjSlice_ints-36                                                        393B ± 0%      393B ± 0%     ~     (all equal)
KlogOutput/regular_error_types_as_value-36                                          328B ± 0%      328B ± 0%     ~     (all equal)
KlogOutput/ignore_MarshalJSON-36                                                    328B ± 0%      328B ± 0%     ~     (all equal)
KlogOutput/String()_that_panics-36                                                  449B ± 0%      449B ± 0%     ~     (all equal)
KlogOutput/MarshalLog()_that_panics-36                                              465B ± 0%      465B ± 0%     ~     (all equal)
KlogOutput/Error()_for_nil-36                                                       778B ± 0%      778B ± 0%     ~     (all equal)
KlogOutput/log_with_values-36                                                       328B ± 0%      328B ± 0%     ~     (all equal)
KlogOutput/override_single_value-36                                                 328B ± 0%      328B ± 0%     ~     (all equal)
KlogOutput/KObjs-36                                                                 561B ± 0%      401B ± 0%  -28.52%  (p=0.008 n=5+5)
KlogOutput/KObjSlice_nil_arg-36                                                     304B ± 0%      304B ± 0%     ~     (all equal)
KlogOutput/regular_error_types_when_using_logr.Error-36                             296B ± 0%      296B ± 0%     ~     (all equal)
KlogOutput/MarshalLog()_for_nil-36                                                  545B ± 0%      545B ± 0%     ~     (all equal)
KlogOutput/Error()_that_panics-36                                                   393B ± 0%      393B ± 0%     ~     (all equal)
KlogOutput/verbosity_enabled-36                                                     280B ± 0%      280B ± 0%     ~     (all equal)
KlogOutput/struct_values-36                                                         465B ± 0%      345B ± 0%  -25.81%  (p=0.008 n=5+5)
KlogOutput/quotation-36                                                             369B ± 0%      369B ± 0%     ~     (all equal)
KlogOutput/KObj-36                                                                  320B ± 0%      320B ± 0%     ~     (all equal)
KlogOutput/MarshalLog()_that_returns_itself-36                                      353B ± 0%      345B ± 0%   -2.27%  (p=0.008 n=5+5)
KlogOutput/empty_WithValues-36                                                      264B ± 0%      264B ± 0%     ~     (all equal)
KlogOutput/log_with_multiple_names_and_values-36                                    417B ± 0%      417B ± 0%     ~     (all equal)
KlogOutput/map_values-36                                                            706B ± 0%      787B ± 0%  +11.47%  (p=0.008 n=5+5)
KlogOutput/log_with_name_and_values-36                                              345B ± 0%      345B ± 0%     ~     (all equal)
pkg:k8s.io/klog/v2/internal/benchmarks/contextvalues goos:linux goarch:amd64
NewContext1Percent-36                                                             23.3kB ± 0%    23.3kB ± 0%     ~     (all equal)
NewContext100PercentDisabled-36                                                   32.8kB ± 0%    32.8kB ± 0%     ~     (all equal)
NewContext100Percent-36                                                           32.8kB ± 0%    32.8kB ± 0%     ~     (all equal)
NewContext1PercentValues-36                                                       9.70kB ± 0%    9.70kB ± 0%     ~     (all equal)
NewContext100PercentDisabledValues-36                                             19.2kB ± 0%    19.2kB ± 0%     ~     (all equal)
NewContext100PercentValues-36                                                     19.2kB ± 0%    19.2kB ± 0%     ~     (all equal)
pkg:k8s.io/klog/v2/internal/serialize goos:linux goarch:amd64
MergeKVs/0x0/no-duplicates-36                                                      0.00B          0.00B          ~     (all equal)
MergeKVs/0x0/all-duplicates-36                                                     0.00B          0.00B          ~     (all equal)
MergeKVs/0x0/start-duplicate-36                                                    64.0B ± 0%     64.0B ± 0%     ~     (all equal)
MergeKVs/0x0/end-duplicate-36                                                      64.0B ± 0%     64.0B ± 0%     ~     (all equal)
MergeKVs/0x1/no-duplicates-36                                                      0.00B          0.00B          ~     (all equal)
MergeKVs/0x1/all-duplicates-36                                                     0.00B          0.00B          ~     (all equal)
MergeKVs/0x1/start-duplicate-36                                                    96.0B ± 0%     96.0B ± 0%     ~     (all equal)
MergeKVs/0x1/end-duplicate-36                                                      96.0B ± 0%     96.0B ± 0%     ~     (all equal)
MergeKVs/0x2/no-duplicates-36                                                      0.00B          0.00B          ~     (all equal)
MergeKVs/0x2/all-duplicates-36                                                     0.00B          0.00B          ~     (all equal)
MergeKVs/0x2/start-duplicate-36                                                     128B ± 0%      128B ± 0%     ~     (all equal)
MergeKVs/0x2/end-duplicate-36                                                       128B ± 0%      128B ± 0%     ~     (all equal)
MergeKVs/0x3/no-duplicates-36                                                      0.00B          0.00B          ~     (all equal)
MergeKVs/0x3/all-duplicates-36                                                     0.00B          0.00B          ~     (all equal)
MergeKVs/0x3/start-duplicate-36                                                     160B ± 0%      160B ± 0%     ~     (all equal)
MergeKVs/0x3/end-duplicate-36                                                       160B ± 0%      160B ± 0%     ~     (all equal)
MergeKVs/0x4/no-duplicates-36                                                      0.00B          0.00B          ~     (all equal)
MergeKVs/0x4/all-duplicates-36                                                     0.00B          0.00B          ~     (all equal)
MergeKVs/0x4/start-duplicate-36                                                     192B ± 0%      192B ± 0%     ~     (all equal)
MergeKVs/0x4/end-duplicate-36                                                       192B ± 0%      192B ± 0%     ~     (all equal)
MergeKVs/0x5/no-duplicates-36                                                      0.00B          0.00B          ~     (all equal)
MergeKVs/0x5/all-duplicates-36                                                     0.00B          0.00B          ~     (all equal)
MergeKVs/0x5/start-duplicate-36                                                     224B ± 0%      224B ± 0%     ~     (all equal)
MergeKVs/0x5/end-duplicate-36                                                       224B ± 0%      224B ± 0%     ~     (all equal)
MergeKVs/0x6/no-duplicates-36                                                      0.00B          0.00B          ~     (all equal)
MergeKVs/0x6/all-duplicates-36                                                     0.00B          0.00B          ~     (all equal)
MergeKVs/0x6/start-duplicate-36                                                     256B ± 0%      256B ± 0%     ~     (all equal)
MergeKVs/0x6/end-duplicate-36                                                       256B ± 0%      256B ± 0%     ~     (all equal)
MergeKVs/0x7/no-duplicates-36                                                      0.00B          0.00B          ~     (all equal)
MergeKVs/0x7/all-duplicates-36                                                     0.00B          0.00B          ~     (all equal)
MergeKVs/0x7/start-duplicate-36                                                     288B ± 0%      288B ± 0%     ~     (all equal)
MergeKVs/0x7/end-duplicate-36                                                       288B ± 0%      288B ± 0%     ~     (all equal)
MergeKVs/0x8/no-duplicates-36                                                      0.00B          0.00B          ~     (all equal)
MergeKVs/0x8/all-duplicates-36                                                     0.00B          0.00B          ~     (all equal)
MergeKVs/0x8/start-duplicate-36                                                     640B ± 0%      640B ± 0%     ~     (all equal)
MergeKVs/0x8/end-duplicate-36                                                       640B ± 0%      640B ± 0%     ~     (all equal)
MergeKVs/0x9/no-duplicates-36                                                      0.00B          0.00B          ~     (all equal)
MergeKVs/0x9/all-duplicates-36                                                     0.00B          0.00B          ~     (all equal)
MergeKVs/0x9/start-duplicate-36                                                     675B ± 0%      675B ± 0%     ~     (all equal)
MergeKVs/0x9/end-duplicate-36                                                       675B ± 0%      675B ± 0%     ~     (all equal)
MergeKVs/1x0/no-duplicates-36                                                      32.0B ± 0%     32.0B ± 0%     ~     (all equal)
MergeKVs/1x0/all-duplicates-36                                                     32.0B ± 0%     32.0B ± 0%     ~     (all equal)
MergeKVs/1x0/start-duplicate-36                                                    96.0B ± 0%     96.0B ± 0%     ~     (all equal)
MergeKVs/1x0/end-duplicate-36                                                      96.0B ± 0%     96.0B ± 0%     ~     (all equal)
MergeKVs/1x1/no-duplicates-36                                                      64.0B ± 0%     64.0B ± 0%     ~     (all equal)
MergeKVs/1x1/all-duplicates-36                                                     64.0B ± 0%     64.0B ± 0%     ~     (all equal)
MergeKVs/1x1/start-duplicate-36                                                     128B ± 0%      128B ± 0%     ~     (all equal)
MergeKVs/1x1/end-duplicate-36                                                       128B ± 0%      128B ± 0%     ~     (all equal)
MergeKVs/1x2/no-duplicates-36                                                      96.0B ± 0%     96.0B ± 0%     ~     (all equal)
MergeKVs/1x2/all-duplicates-36                                                     96.0B ± 0%     96.0B ± 0%     ~     (all equal)
MergeKVs/1x2/start-duplicate-36                                                     160B ± 0%      160B ± 0%     ~     (all equal)
MergeKVs/1x2/end-duplicate-36                                                       160B ± 0%      160B ± 0%     ~     (all equal)
MergeKVs/1x3/no-duplicates-36                                                       128B ± 0%      128B ± 0%     ~     (all equal)
MergeKVs/1x3/all-duplicates-36                                                      128B ± 0%      128B ± 0%     ~     (all equal)
MergeKVs/1x3/start-duplicate-36                                                     192B ± 0%      192B ± 0%     ~     (all equal)
MergeKVs/1x3/end-duplicate-36                                                       192B ± 0%      192B ± 0%     ~     (all equal)
MergeKVs/1x4/no-duplicates-36                                                       160B ± 0%      160B ± 0%     ~     (all equal)
MergeKVs/1x4/all-duplicates-36                                                      160B ± 0%      160B ± 0%     ~     (all equal)
MergeKVs/1x4/start-duplicate-36                                                     224B ± 0%      224B ± 0%     ~     (all equal)
MergeKVs/1x4/end-duplicate-36                                                       224B ± 0%      224B ± 0%     ~     (all equal)
MergeKVs/1x5/no-duplicates-36                                                       192B ± 0%      192B ± 0%     ~     (all equal)
MergeKVs/1x5/all-duplicates-36                                                      192B ± 0%      192B ± 0%     ~     (all equal)
MergeKVs/1x5/start-duplicate-36                                                     256B ± 0%      256B ± 0%     ~     (all equal)
MergeKVs/1x5/end-duplicate-36                                                       256B ± 0%      256B ± 0%     ~     (all equal)
MergeKVs/1x6/no-duplicates-36                                                       224B ± 0%      224B ± 0%     ~     (all equal)
MergeKVs/1x6/all-duplicates-36                                                      224B ± 0%      224B ± 0%     ~     (all equal)
MergeKVs/1x6/start-duplicate-36                                                     288B ± 0%      288B ± 0%     ~     (all equal)
MergeKVs/1x6/end-duplicate-36                                                       288B ± 0%      288B ± 0%     ~     (all equal)
MergeKVs/1x7/no-duplicates-36                                                       256B ± 0%      256B ± 0%     ~     (all equal)
MergeKVs/1x7/all-duplicates-36                                                      256B ± 0%      256B ± 0%     ~     (all equal)
MergeKVs/1x7/start-duplicate-36                                                     320B ± 0%      320B ± 0%     ~     (all equal)
MergeKVs/1x7/end-duplicate-36                                                       320B ± 0%      320B ± 0%     ~     (all equal)
MergeKVs/1x8/no-duplicates-36                                                       288B ± 0%      288B ± 0%     ~     (all equal)
MergeKVs/1x8/all-duplicates-36                                                      288B ± 0%      288B ± 0%     ~     (all equal)
MergeKVs/1x8/start-duplicate-36                                                     672B ± 0%      672B ± 0%     ~     (all equal)
MergeKVs/1x8/end-duplicate-36                                                       672B ± 0%      672B ± 0%     ~     (all equal)
MergeKVs/1x9/no-duplicates-36                                                       640B ± 0%      640B ± 0%     ~     (all equal)
MergeKVs/1x9/all-duplicates-36                                                      640B ± 0%      640B ± 0%     ~     (all equal)
MergeKVs/1x9/start-duplicate-36                                                     707B ± 0%      707B ± 0%     ~     (all equal)
MergeKVs/1x9/end-duplicate-36                                                       707B ± 0%      707B ± 0%     ~     (all equal)
MergeKVs/2x0/no-duplicates-36                                                      64.0B ± 0%     64.0B ± 0%     ~     (all equal)
MergeKVs/2x0/all-duplicates-36                                                     64.0B ± 0%     64.0B ± 0%     ~     (all equal)
MergeKVs/2x0/start-duplicate-36                                                     128B ± 0%      128B ± 0%     ~     (all equal)
MergeKVs/2x0/end-duplicate-36                                                       128B ± 0%      128B ± 0%     ~     (all equal)
MergeKVs/2x1/no-duplicates-36                                                      96.0B ± 0%     96.0B ± 0%     ~     (all equal)
MergeKVs/2x1/all-duplicates-36                                                     96.0B ± 0%     96.0B ± 0%     ~     (all equal)
MergeKVs/2x1/start-duplicate-36                                                     160B ± 0%      160B ± 0%     ~     (all equal)
MergeKVs/2x1/end-duplicate-36                                                       160B ± 0%      160B ± 0%     ~     (all equal)
MergeKVs/2x2/no-duplicates-36                                                       128B ± 0%      128B ± 0%     ~     (all equal)
MergeKVs/2x2/all-duplicates-36                                                      128B ± 0%      128B ± 0%     ~     (all equal)
MergeKVs/2x2/start-duplicate-36                                                     192B ± 0%      192B ± 0%     ~     (all equal)
MergeKVs/2x2/end-duplicate-36                                                       192B ± 0%      192B ± 0%     ~     (all equal)
MergeKVs/2x3/no-duplicates-36                                                       160B ± 0%      160B ± 0%     ~     (all equal)
MergeKVs/2x3/all-duplicates-36                                                      160B ± 0%      160B ± 0%     ~     (all equal)
MergeKVs/2x3/start-duplicate-36                                                     224B ± 0%      224B ± 0%     ~     (all equal)
MergeKVs/2x3/end-duplicate-36                                                       224B ± 0%      224B ± 0%     ~     (all equal)
MergeKVs/2x4/no-duplicates-36                                                       192B ± 0%      192B ± 0%     ~     (all equal)
MergeKVs/2x4/all-duplicates-36                                                      192B ± 0%      192B ± 0%     ~     (all equal)
MergeKVs/2x4/start-duplicate-36                                                     256B ± 0%      256B ± 0%     ~     (all equal)
MergeKVs/2x4/end-duplicate-36                                                       256B ± 0%      256B ± 0%     ~     (all equal)
MergeKVs/2x5/no-duplicates-36                                                       224B ± 0%      224B ± 0%     ~     (all equal)
MergeKVs/2x5/all-duplicates-36                                                      224B ± 0%      224B ± 0%     ~     (all equal)
MergeKVs/2x5/start-duplicate-36                                                     288B ± 0%      288B ± 0%     ~     (all equal)
MergeKVs/2x5/end-duplicate-36                                                       288B ± 0%      288B ± 0%     ~     (all equal)
MergeKVs/2x6/no-duplicates-36                                                       256B ± 0%      256B ± 0%     ~     (all equal)
MergeKVs/2x6/all-duplicates-36                                                      256B ± 0%      256B ± 0%     ~     (all equal)
MergeKVs/2x6/start-duplicate-36                                                     320B ± 0%      320B ± 0%     ~     (all equal)
MergeKVs/2x6/end-duplicate-36                                                       320B ± 0%      320B ± 0%     ~     (all equal)
MergeKVs/2x7/no-duplicates-36                                                       288B ± 0%      288B ± 0%     ~     (all equal)
MergeKVs/2x7/all-duplicates-36                                                      288B ± 0%      288B ± 0%     ~     (all equal)
MergeKVs/2x7/start-duplicate-36                                                     352B ± 0%      352B ± 0%     ~     (all equal)
MergeKVs/2x7/end-duplicate-36                                                       352B ± 0%      352B ± 0%     ~     (all equal)
MergeKVs/2x8/no-duplicates-36                                                       320B ± 0%      320B ± 0%     ~     (all equal)
MergeKVs/2x8/all-duplicates-36                                                      320B ± 0%      320B ± 0%     ~     (all equal)
MergeKVs/2x8/start-duplicate-36                                                     704B ± 0%      704B ± 0%     ~     (all equal)
MergeKVs/2x8/end-duplicate-36                                                       704B ± 0%      704B ± 0%     ~     (all equal)
MergeKVs/2x9/no-duplicates-36                                                       672B ± 0%      672B ± 0%     ~     (all equal)
MergeKVs/2x9/all-duplicates-36                                                      672B ± 0%      672B ± 0%     ~     (all equal)
MergeKVs/2x9/start-duplicate-36                                                     739B ± 0%      739B ± 0%     ~     (all equal)
MergeKVs/2x9/end-duplicate-36                                                       739B ± 0%      739B ± 0%     ~     (all equal)
MergeKVs/3x0/no-duplicates-36                                                      96.0B ± 0%     96.0B ± 0%     ~     (all equal)
MergeKVs/3x0/all-duplicates-36                                                     96.0B ± 0%     96.0B ± 0%     ~     (all equal)
MergeKVs/3x0/start-duplicate-36                                                     160B ± 0%      160B ± 0%     ~     (all equal)
MergeKVs/3x0/end-duplicate-36                                                       160B ± 0%      160B ± 0%     ~     (all equal)
MergeKVs/3x1/no-duplicates-36                                                       128B ± 0%      128B ± 0%     ~     (all equal)
MergeKVs/3x1/all-duplicates-36                                                      128B ± 0%      128B ± 0%     ~     (all equal)
MergeKVs/3x1/start-duplicate-36                                                     192B ± 0%      192B ± 0%     ~     (all equal)
MergeKVs/3x1/end-duplicate-36                                                       192B ± 0%      192B ± 0%     ~     (all equal)
MergeKVs/3x2/no-duplicates-36                                                       160B ± 0%      160B ± 0%     ~     (all equal)
MergeKVs/3x2/all-duplicates-36                                                      160B ± 0%      160B ± 0%     ~     (all equal)
MergeKVs/3x2/start-duplicate-36                                                     224B ± 0%      224B ± 0%     ~     (all equal)
MergeKVs/3x2/end-duplicate-36                                                       224B ± 0%      224B ± 0%     ~     (all equal)
MergeKVs/3x3/no-duplicates-36                                                       192B ± 0%      192B ± 0%     ~     (all equal)
MergeKVs/3x3/all-duplicates-36                                                      192B ± 0%      192B ± 0%     ~     (all equal)
MergeKVs/3x3/start-duplicate-36                                                     256B ± 0%      256B ± 0%     ~     (all equal)
MergeKVs/3x3/end-duplicate-36                                                       256B ± 0%      256B ± 0%     ~     (all equal)
MergeKVs/3x4/no-duplicates-36                                                       224B ± 0%      224B ± 0%     ~     (all equal)
MergeKVs/3x4/all-duplicates-36                                                      224B ± 0%      224B ± 0%     ~     (all equal)
MergeKVs/3x4/start-duplicate-36                                                     288B ± 0%      288B ± 0%     ~     (all equal)
MergeKVs/3x4/end-duplicate-36                                                       288B ± 0%      288B ± 0%     ~     (all equal)
MergeKVs/3x5/no-duplicates-36                                                       256B ± 0%      256B ± 0%     ~     (all equal)
MergeKVs/3x5/all-duplicates-36                                                      256B ± 0%      256B ± 0%     ~     (all equal)
MergeKVs/3x5/start-duplicate-36                                                     320B ± 0%      320B ± 0%     ~     (all equal)
MergeKVs/3x5/end-duplicate-36                                                       320B ± 0%      320B ± 0%     ~     (all equal)
MergeKVs/3x6/no-duplicates-36                                                       288B ± 0%      288B ± 0%     ~     (all equal)
MergeKVs/3x6/all-duplicates-36                                                      288B ± 0%      288B ± 0%     ~     (all equal)
MergeKVs/3x6/start-duplicate-36                                                     352B ± 0%      352B ± 0%     ~     (all equal)
MergeKVs/3x6/end-duplicate-36                                                       352B ± 0%      352B ± 0%     ~     (all equal)
MergeKVs/3x7/no-duplicates-36                                                       320B ± 0%      320B ± 0%     ~     (all equal)
MergeKVs/3x7/all-duplicates-36                                                      320B ± 0%      320B ± 0%     ~     (all equal)
MergeKVs/3x7/start-duplicate-36                                                     384B ± 0%      384B ± 0%     ~     (all equal)
MergeKVs/3x7/end-duplicate-36                                                       384B ± 0%      384B ± 0%     ~     (all equal)
MergeKVs/3x8/no-duplicates-36                                                       352B ± 0%      352B ± 0%     ~     (all equal)
MergeKVs/3x8/all-duplicates-36                                                      352B ± 0%      352B ± 0%     ~     (all equal)
MergeKVs/3x8/start-duplicate-36                                                     736B ± 0%      736B ± 0%     ~     (all equal)
MergeKVs/3x8/end-duplicate-36                                                       736B ± 0%      736B ± 0%     ~     (all equal)
MergeKVs/3x9/no-duplicates-36                                                       704B ± 0%      704B ± 0%     ~     (all equal)
MergeKVs/3x9/all-duplicates-36                                                      704B ± 0%      704B ± 0%     ~     (all equal)
MergeKVs/3x9/start-duplicate-36                                                     771B ± 0%      771B ± 0%     ~     (all equal)
MergeKVs/3x9/end-duplicate-36                                                       771B ± 0%      771B ± 0%     ~     (all equal)
MergeKVs/4x0/no-duplicates-36                                                       128B ± 0%      128B ± 0%     ~     (all equal)
MergeKVs/4x0/all-duplicates-36                                                      128B ± 0%      128B ± 0%     ~     (all equal)
MergeKVs/4x0/start-duplicate-36                                                     192B ± 0%      192B ± 0%     ~     (all equal)
MergeKVs/4x0/end-duplicate-36                                                       192B ± 0%      192B ± 0%     ~     (all equal)
MergeKVs/4x1/no-duplicates-36                                                       160B ± 0%      160B ± 0%     ~     (all equal)
MergeKVs/4x1/all-duplicates-36                                                      160B ± 0%      160B ± 0%     ~     (all equal)
MergeKVs/4x1/start-duplicate-36                                                     224B ± 0%      224B ± 0%     ~     (all equal)
MergeKVs/4x1/end-duplicate-36                                                       224B ± 0%      224B ± 0%     ~     (all equal)
MergeKVs/4x2/no-duplicates-36                                                       192B ± 0%      192B ± 0%     ~     (all equal)
MergeKVs/4x2/all-duplicates-36                                                      192B ± 0%      192B ± 0%     ~     (all equal)
MergeKVs/4x2/start-duplicate-36                                                     256B ± 0%      256B ± 0%     ~     (all equal)
MergeKVs/4x2/end-duplicate-36                                                       256B ± 0%      256B ± 0%     ~     (all equal)
MergeKVs/4x3/no-duplicates-36                                                       224B ± 0%      224B ± 0%     ~     (all equal)
MergeKVs/4x3/all-duplicates-36                                                      224B ± 0%      224B ± 0%     ~     (all equal)
MergeKVs/4x3/start-duplicate-36                                                     288B ± 0%      288B ± 0%     ~     (all equal)
MergeKVs/4x3/end-duplicate-36                                                       288B ± 0%      288B ± 0%     ~     (all equal)
MergeKVs/4x4/no-duplicates-36                                                       256B ± 0%      256B ± 0%     ~     (all equal)
MergeKVs/4x4/all-duplicates-36                                                      256B ± 0%      256B ± 0%     ~     (all equal)
MergeKVs/4x4/start-duplicate-36                                                     320B ± 0%      320B ± 0%     ~     (all equal)
MergeKVs/4x4/end-duplicate-36                                                       320B ± 0%      320B ± 0%     ~     (all equal)
MergeKVs/4x5/no-duplicates-36                                                       288B ± 0%      288B ± 0%     ~     (all equal)
MergeKVs/4x5/all-duplicates-36                                                      288B ± 0%      288B ± 0%     ~     (all equal)
MergeKVs/4x5/start-duplicate-36                                                     352B ± 0%      352B ± 0%     ~     (all equal)
MergeKVs/4x5/end-duplicate-36                                                       352B ± 0%      352B ± 0%     ~     (all equal)
MergeKVs/4x6/no-duplicates-36                                                       320B ± 0%      320B ± 0%     ~     (all equal)
MergeKVs/4x6/all-duplicates-36                                                      320B ± 0%      320B ± 0%     ~     (all equal)
MergeKVs/4x6/start-duplicate-36                                                     384B ± 0%      384B ± 0%     ~     (all equal)
MergeKVs/4x6/end-duplicate-36                                                       384B ± 0%      384B ± 0%     ~     (all equal)
MergeKVs/4x7/no-duplicates-36                                                       352B ± 0%      352B ± 0%     ~     (all equal)
MergeKVs/4x7/all-duplicates-36                                                      352B ± 0%      352B ± 0%     ~     (all equal)
MergeKVs/4x7/start-duplicate-36                                                     416B ± 0%      416B ± 0%     ~     (all equal)
MergeKVs/4x7/end-duplicate-36                                                       416B ± 0%      416B ± 0%     ~     (all equal)
MergeKVs/4x8/no-duplicates-36                                                       384B ± 0%      384B ± 0%     ~     (all equal)
MergeKVs/4x8/all-duplicates-36                                                      384B ± 0%      384B ± 0%     ~     (all equal)
MergeKVs/4x8/start-duplicate-36                                                     768B ± 0%      768B ± 0%     ~     (all equal)
MergeKVs/4x8/end-duplicate-36                                                       768B ± 0%      768B ± 0%     ~     (all equal)
MergeKVs/4x9/no-duplicates-36                                                       736B ± 0%      736B ± 0%     ~     (all equal)
MergeKVs/4x9/all-duplicates-36                                                      736B ± 0%      736B ± 0%     ~     (all equal)
MergeKVs/4x9/start-duplicate-36                                                     803B ± 0%      803B ± 0%     ~     (all equal)
MergeKVs/4x9/end-duplicate-36                                                       803B ± 0%      803B ± 0%     ~     (all equal)
MergeKVs/5x0/no-duplicates-36                                                       160B ± 0%      160B ± 0%     ~     (all equal)
MergeKVs/5x0/all-duplicates-36                                                      160B ± 0%      160B ± 0%     ~     (all equal)
MergeKVs/5x0/start-duplicate-36                                                     224B ± 0%      224B ± 0%     ~     (all equal)
MergeKVs/5x0/end-duplicate-36                                                       224B ± 0%      224B ± 0%     ~     (all equal)
MergeKVs/5x1/no-duplicates-36                                                       192B ± 0%      192B ± 0%     ~     (all equal)
MergeKVs/5x1/all-duplicates-36                                                      192B ± 0%      192B ± 0%     ~     (all equal)
MergeKVs/5x1/start-duplicate-36                                                     256B ± 0%      256B ± 0%     ~     (all equal)
MergeKVs/5x1/end-duplicate-36                                                       256B ± 0%      256B ± 0%     ~     (all equal)
MergeKVs/5x2/no-duplicates-36                                                       224B ± 0%      224B ± 0%     ~     (all equal)
MergeKVs/5x2/all-duplicates-36                                                      224B ± 0%      224B ± 0%     ~     (all equal)
MergeKVs/5x2/start-duplicate-36                                                     288B ± 0%      288B ± 0%     ~     (all equal)
MergeKVs/5x2/end-duplicate-36                                                       288B ± 0%      288B ± 0%     ~     (all equal)
MergeKVs/5x3/no-duplicates-36                                                       256B ± 0%      256B ± 0%     ~     (all equal)
MergeKVs/5x3/all-duplicates-36                                                      256B ± 0%      256B ± 0%     ~     (all equal)
MergeKVs/5x3/start-duplicate-36                                                     320B ± 0%      320B ± 0%     ~     (all equal)
MergeKVs/5x3/end-duplicate-36                                                       320B ± 0%      320B ± 0%     ~     (all equal)
MergeKVs/5x4/no-duplicates-36                                                       288B ± 0%      288B ± 0%     ~     (all equal)
MergeKVs/5x4/all-duplicates-36                                                      288B ± 0%      288B ± 0%     ~     (all equal)
MergeKVs/5x4/start-duplicate-36                                                     352B ± 0%      352B ± 0%     ~     (all equal)
MergeKVs/5x4/end-duplicate-36                                                       352B ± 0%      352B ± 0%     ~     (all equal)
MergeKVs/5x5/no-duplicates-36                                                       320B ± 0%      320B ± 0%     ~     (all equal)
MergeKVs/5x5/all-duplicates-36                                                      320B ± 0%      320B ± 0%     ~     (all equal)
MergeKVs/5x5/start-duplicate-36                                                     384B ± 0%      384B ± 0%     ~     (all equal)
MergeKVs/5x5/end-duplicate-36                                                       384B ± 0%      384B ± 0%     ~     (all equal)
MergeKVs/5x6/no-duplicates-36                                                       352B ± 0%      352B ± 0%     ~     (all equal)
MergeKVs/5x6/all-duplicates-36                                                      352B ± 0%      352B ± 0%     ~     (all equal)
MergeKVs/5x6/start-duplicate-36                                                     416B ± 0%      416B ± 0%     ~     (all equal)
MergeKVs/5x6/end-duplicate-36                                                       416B ± 0%      416B ± 0%     ~     (all equal)
MergeKVs/5x7/no-duplicates-36                                                       384B ± 0%      384B ± 0%     ~     (all equal)
MergeKVs/5x7/all-duplicates-36                                                      384B ± 0%      384B ± 0%     ~     (all equal)
MergeKVs/5x7/start-duplicate-36                                                     448B ± 0%      448B ± 0%     ~     (all equal)
MergeKVs/5x7/end-duplicate-36                                                       448B ± 0%      448B ± 0%     ~     (all equal)
MergeKVs/5x8/no-duplicates-36                                                       416B ± 0%      416B ± 0%     ~     (all equal)
MergeKVs/5x8/all-duplicates-36                                                      416B ± 0%      416B ± 0%     ~     (all equal)
MergeKVs/5x8/start-duplicate-36                                                     800B ± 0%      800B ± 0%     ~     (all equal)
MergeKVs/5x8/end-duplicate-36                                                       800B ± 0%      800B ± 0%     ~     (all equal)
MergeKVs/5x9/no-duplicates-36                                                       768B ± 0%      768B ± 0%     ~     (all equal)
MergeKVs/5x9/all-duplicates-36                                                      768B ± 0%      768B ± 0%     ~     (all equal)
MergeKVs/5x9/start-duplicate-36                                                     835B ± 0%      835B ± 0%     ~     (all equal)
MergeKVs/5x9/end-duplicate-36                                                       835B ± 0%      835B ± 0%     ~     (all equal)
MergeKVs/6x0/no-duplicates-36                                                       192B ± 0%      192B ± 0%     ~     (all equal)
MergeKVs/6x0/all-duplicates-36                                                      192B ± 0%      192B ± 0%     ~     (all equal)
MergeKVs/6x0/start-duplicate-36                                                     256B ± 0%      256B ± 0%     ~     (all equal)
MergeKVs/6x0/end-duplicate-36                                                       256B ± 0%      256B ± 0%     ~     (all equal)
MergeKVs/6x1/no-duplicates-36                                                       224B ± 0%      224B ± 0%     ~     (all equal)
MergeKVs/6x1/all-duplicates-36                                                      224B ± 0%      224B ± 0%     ~     (all equal)
MergeKVs/6x1/start-duplicate-36                                                     288B ± 0%      288B ± 0%     ~     (all equal)
MergeKVs/6x1/end-duplicate-36                                                       288B ± 0%      288B ± 0%     ~     (all equal)
MergeKVs/6x2/no-duplicates-36                                                       256B ± 0%      256B ± 0%     ~     (all equal)
MergeKVs/6x2/all-duplicates-36                                                      256B ± 0%      256B ± 0%     ~     (all equal)
MergeKVs/6x2/start-duplicate-36                                                     320B ± 0%      320B ± 0%     ~     (all equal)
MergeKVs/6x2/end-duplicate-36                                                       320B ± 0%      320B ± 0%     ~     (all equal)
MergeKVs/6x3/no-duplicates-36                                                       288B ± 0%      288B ± 0%     ~     (all equal)
MergeKVs/6x3/all-duplicates-36                                                      288B ± 0%      288B ± 0%     ~     (all equal)
MergeKVs/6x3/start-duplicate-36                                                     352B ± 0%      352B ± 0%     ~     (all equal)
MergeKVs/6x3/end-duplicate-36                                                       352B ± 0%      352B ± 0%     ~     (all equal)
MergeKVs/6x4/no-duplicates-36                                                       320B ± 0%      320B ± 0%     ~     (all equal)
MergeKVs/6x4/all-duplicates-36                                                      320B ± 0%      320B ± 0%     ~     (all equal)
MergeKVs/6x4/start-duplicate-36                                                     384B ± 0%      384B ± 0%     ~     (all equal)
MergeKVs/6x4/end-duplicate-36                                                       384B ± 0%      384B ± 0%     ~     (all equal)
MergeKVs/6x5/no-duplicates-36                                                       352B ± 0%      352B ± 0%     ~     (all equal)
MergeKVs/6x5/all-duplicates-36                                                      352B ± 0%      352B ± 0%     ~     (all equal)
MergeKVs/6x5/start-duplicate-36                                                     416B ± 0%      416B ± 0%     ~     (all equal)
MergeKVs/6x5/end-duplicate-36                                                       416B ± 0%      416B ± 0%     ~     (all equal)
MergeKVs/6x6/no-duplicates-36                                                       384B ± 0%      384B ± 0%     ~     (all equal)
MergeKVs/6x6/all-duplicates-36                                                      384B ± 0%      384B ± 0%     ~     (all equal)
MergeKVs/6x6/start-duplicate-36                                                     448B ± 0%      448B ± 0%     ~     (all equal)
MergeKVs/6x6/end-duplicate-36                                                       448B ± 0%      448B ± 0%     ~     (all equal)
MergeKVs/6x7/no-duplicates-36                                                       416B ± 0%      416B ± 0%     ~     (all equal)
MergeKVs/6x7/all-duplicates-36                                                      416B ± 0%      416B ± 0%     ~     (all equal)
MergeKVs/6x7/start-duplicate-36                                                     480B ± 0%      480B ± 0%     ~     (all equal)
MergeKVs/6x7/end-duplicate-36                                                       480B ± 0%      480B ± 0%     ~     (all equal)
MergeKVs/6x8/no-duplicates-36                                                       448B ± 0%      448B ± 0%     ~     (all equal)
MergeKVs/6x8/all-duplicates-36                                                      448B ± 0%      448B ± 0%     ~     (all equal)
MergeKVs/6x8/start-duplicate-36                                                     832B ± 0%      832B ± 0%     ~     (all equal)
MergeKVs/6x8/end-duplicate-36                                                       832B ± 0%      832B ± 0%     ~     (all equal)
MergeKVs/6x9/no-duplicates-36                                                       800B ± 0%      800B ± 0%     ~     (all equal)
MergeKVs/6x9/all-duplicates-36                                                      800B ± 0%      800B ± 0%     ~     (all equal)
MergeKVs/6x9/start-duplicate-36                                                     899B ± 0%      899B ± 0%     ~     (all equal)
MergeKVs/6x9/end-duplicate-36                                                       899B ± 0%      899B ± 0%     ~     (all equal)
MergeKVs/7x0/no-duplicates-36                                                       224B ± 0%      224B ± 0%     ~     (all equal)
MergeKVs/7x0/all-duplicates-36                                                      224B ± 0%      224B ± 0%     ~     (all equal)
MergeKVs/7x0/start-duplicate-36                                                     288B ± 0%      288B ± 0%     ~     (all equal)
MergeKVs/7x0/end-duplicate-36                                                       288B ± 0%      288B ± 0%     ~     (all equal)
MergeKVs/7x1/no-duplicates-36                                                       256B ± 0%      256B ± 0%     ~     (all equal)
MergeKVs/7x1/all-duplicates-36                                                      256B ± 0%      256B ± 0%     ~     (all equal)
MergeKVs/7x1/start-duplicate-36                                                     320B ± 0%      320B ± 0%     ~     (all equal)
MergeKVs/7x1/end-duplicate-36                                                       320B ± 0%      320B ± 0%     ~     (all equal)
MergeKVs/7x2/no-duplicates-36                                                       288B ± 0%      288B ± 0%     ~     (all equal)
MergeKVs/7x2/all-duplicates-36                                                      288B ± 0%      288B ± 0%     ~     (all equal)
MergeKVs/7x2/start-duplicate-36                                                     352B ± 0%      352B ± 0%     ~     (all equal)
MergeKVs/7x2/end-duplicate-36                                                       352B ± 0%      352B ± 0%     ~     (all equal)
MergeKVs/7x3/no-duplicates-36                                                       320B ± 0%      320B ± 0%     ~     (all equal)
MergeKVs/7x3/all-duplicates-36                                                      320B ± 0%      320B ± 0%     ~     (all equal)
MergeKVs/7x3/start-duplicate-36                                                     384B ± 0%      384B ± 0%     ~     (all equal)
MergeKVs/7x3/end-duplicate-36                                                       384B ± 0%      384B ± 0%     ~     (all equal)
MergeKVs/7x4/no-duplicates-36                                                       352B ± 0%      352B ± 0%     ~     (all equal)
MergeKVs/7x4/all-duplicates-36                                                      352B ± 0%      352B ± 0%     ~     (all equal)
MergeKVs/7x4/start-duplicate-36                                                     416B ± 0%      416B ± 0%     ~     (all equal)
MergeKVs/7x4/end-duplicate-36                                                       416B ± 0%      416B ± 0%     ~     (all equal)
MergeKVs/7x5/no-duplicates-36                                                       384B ± 0%      384B ± 0%     ~     (all equal)
MergeKVs/7x5/all-duplicates-36                                                      384B ± 0%      384B ± 0%     ~     (all equal)
MergeKVs/7x5/start-duplicate-36                                                     448B ± 0%      448B ± 0%     ~     (all equal)
MergeKVs/7x5/end-duplicate-36                                                       448B ± 0%      448B ± 0%     ~     (all equal)
MergeKVs/7x6/no-duplicates-36                                                       416B ± 0%      416B ± 0%     ~     (all equal)
MergeKVs/7x6/all-duplicates-36                                                      416B ± 0%      416B ± 0%     ~     (all equal)
MergeKVs/7x6/start-duplicate-36                                                     480B ± 0%      480B ± 0%     ~     (all equal)
MergeKVs/7x6/end-duplicate-36                                                       480B ± 0%      480B ± 0%     ~     (all equal)
MergeKVs/7x7/no-duplicates-36                                                       448B ± 0%      448B ± 0%     ~     (all equal)
MergeKVs/7x7/all-duplicates-36                                                      448B ± 0%      448B ± 0%     ~     (all equal)
MergeKVs/7x7/start-duplicate-36                                                     512B ± 0%      512B ± 0%     ~     (all equal)
MergeKVs/7x7/end-duplicate-36                                                       512B ± 0%      512B ± 0%     ~     (all equal)
MergeKVs/7x8/no-duplicates-36                                                       480B ± 0%      480B ± 0%     ~     (all equal)
MergeKVs/7x8/all-duplicates-36                                                      480B ± 0%      480B ± 0%     ~     (all equal)
MergeKVs/7x8/start-duplicate-36                                                     896B ± 0%      896B ± 0%     ~     (all equal)
MergeKVs/7x8/end-duplicate-36                                                       896B ± 0%      896B ± 0%     ~     (all equal)
MergeKVs/7x9/no-duplicates-36                                                       832B ± 0%      832B ± 0%     ~     (all equal)
MergeKVs/7x9/all-duplicates-36                                                      832B ± 0%      832B ± 0%     ~     (all equal)
MergeKVs/7x9/start-duplicate-36                                                     899B ± 0%      899B ± 0%     ~     (all equal)
MergeKVs/7x9/end-duplicate-36                                                       899B ± 0%      899B ± 0%     ~     (all equal)
MergeKVs/8x0/no-duplicates-36                                                       256B ± 0%      256B ± 0%     ~     (all equal)
MergeKVs/8x0/all-duplicates-36                                                      256B ± 0%      256B ± 0%     ~     (all equal)
MergeKVs/8x0/start-duplicate-36                                                     320B ± 0%      320B ± 0%     ~     (all equal)
MergeKVs/8x0/end-duplicate-36                                                       320B ± 0%      320B ± 0%     ~     (all equal)
MergeKVs/8x1/no-duplicates-36                                                       288B ± 0%      288B ± 0%     ~     (all equal)
MergeKVs/8x1/all-duplicates-36                                                      288B ± 0%      288B ± 0%     ~     (all equal)
MergeKVs/8x1/start-duplicate-36                                                     352B ± 0%      352B ± 0%     ~     (all equal)
MergeKVs/8x1/end-duplicate-36                                                       352B ± 0%      352B ± 0%     ~     (all equal)
MergeKVs/8x2/no-duplicates-36                                                       320B ± 0%      320B ± 0%     ~     (all equal)
MergeKVs/8x2/all-duplicates-36                                                      320B ± 0%      320B ± 0%     ~     (all equal)
MergeKVs/8x2/start-duplicate-36                                                     384B ± 0%      384B ± 0%     ~     (all equal)
MergeKVs/8x2/end-duplicate-36                                                       384B ± 0%      384B ± 0%     ~     (all equal)
MergeKVs/8x3/no-duplicates-36                                                       352B ± 0%      352B ± 0%     ~     (all equal)
MergeKVs/8x3/all-duplicates-36                                                      352B ± 0%      352B ± 0%     ~     (all equal)
MergeKVs/8x3/start-duplicate-36                                                     416B ± 0%      416B ± 0%     ~     (all equal)
MergeKVs/8x3/end-duplicate-36                                                       416B ± 0%      416B ± 0%     ~     (all equal)
MergeKVs/8x4/no-duplicates-36                                                       384B ± 0%      384B ± 0%     ~     (all equal)
MergeKVs/8x4/all-duplicates-36                                                      384B ± 0%      384B ± 0%     ~     (all equal)
MergeKVs/8x4/start-duplicate-36                                                     448B ± 0%      448B ± 0%     ~     (all equal)
MergeKVs/8x4/end-duplicate-36                                                       448B ± 0%      448B ± 0%     ~     (all equal)
MergeKVs/8x5/no-duplicates-36                                                       416B ± 0%      416B ± 0%     ~     (all equal)
MergeKVs/8x5/all-duplicates-36                                                      416B ± 0%      416B ± 0%     ~     (all equal)
MergeKVs/8x5/start-duplicate-36                                                     480B ± 0%      480B ± 0%     ~     (all equal)
MergeKVs/8x5/end-duplicate-36                                                       480B ± 0%      480B ± 0%     ~     (all equal)
MergeKVs/8x6/no-duplicates-36                                                       448B ± 0%      448B ± 0%     ~     (all equal)
MergeKVs/8x6/all-duplicates-36                                                      448B ± 0%      448B ± 0%     ~     (all equal)
MergeKVs/8x6/start-duplicate-36                                                     512B ± 0%      512B ± 0%     ~     (all equal)
MergeKVs/8x6/end-duplicate-36                                                       512B ± 0%      512B ± 0%     ~     (all equal)
MergeKVs/8x7/no-duplicates-36                                                       480B ± 0%      480B ± 0%     ~     (all equal)
MergeKVs/8x7/all-duplicates-36                                                      480B ± 0%      480B ± 0%     ~     (all equal)
MergeKVs/8x7/start-duplicate-36                                                     576B ± 0%      576B ± 0%     ~     (all equal)
MergeKVs/8x7/end-duplicate-36                                                       576B ± 0%      576B ± 0%     ~     (all equal)
MergeKVs/8x8/no-duplicates-36                                                       512B ± 0%      512B ± 0%     ~     (all equal)
MergeKVs/8x8/all-duplicates-36                                                      512B ± 0%      512B ± 0%     ~     (all equal)
MergeKVs/8x8/start-duplicate-36                                                     896B ± 0%      896B ± 0%     ~     (all equal)
MergeKVs/8x8/end-duplicate-36                                                       896B ± 0%      896B ± 0%     ~     (all equal)
MergeKVs/8x9/no-duplicates-36                                                       896B ± 0%      896B ± 0%     ~     (all equal)
MergeKVs/8x9/all-duplicates-36                                                      896B ± 0%      896B ± 0%     ~     (all equal)
MergeKVs/8x9/start-duplicate-36                                                     963B ± 0%      963B ± 0%     ~     (all equal)
MergeKVs/8x9/end-duplicate-36                                                       963B ± 0%      963B ± 0%     ~     (all equal)
MergeKVs/9x0/no-duplicates-36                                                       288B ± 0%      288B ± 0%     ~     (all equal)
MergeKVs/9x0/all-duplicates-36                                                      288B ± 0%      288B ± 0%     ~     (all equal)
MergeKVs/9x0/start-duplicate-36                                                     352B ± 0%      352B ± 0%     ~     (all equal)
MergeKVs/9x0/end-duplicate-36                                                       352B ± 0%      352B ± 0%     ~     (all equal)
MergeKVs/9x1/no-duplicates-36                                                       320B ± 0%      320B ± 0%     ~     (all equal)
MergeKVs/9x1/all-duplicates-36                                                      320B ± 0%      320B ± 0%     ~     (all equal)
MergeKVs/9x1/start-duplicate-36                                                     384B ± 0%      384B ± 0%     ~     (all equal)
MergeKVs/9x1/end-duplicate-36                                                       384B ± 0%      384B ± 0%     ~     (all equal)
MergeKVs/9x2/no-duplicates-36                                                       352B ± 0%      352B ± 0%     ~     (all equal)
MergeKVs/9x2/all-duplicates-36                                                      352B ± 0%      352B ± 0%     ~     (all equal)
MergeKVs/9x2/start-duplicate-36                                                     416B ± 0%      416B ± 0%     ~     (all equal)
MergeKVs/9x2/end-duplicate-36                                                       416B ± 0%      416B ± 0%     ~     (all equal)
MergeKVs/9x3/no-duplicates-36                                                       384B ± 0%      384B ± 0%     ~     (all equal)
MergeKVs/9x3/all-duplicates-36                                                      384B ± 0%      384B ± 0%     ~     (all equal)
MergeKVs/9x3/start-duplicate-36                                                     448B ± 0%      448B ± 0%     ~     (all equal)
MergeKVs/9x3/end-duplicate-36                                                       448B ± 0%      448B ± 0%     ~     (all equal)
MergeKVs/9x4/no-duplicates-36                                                       416B ± 0%      416B ± 0%     ~     (all equal)
MergeKVs/9x4/all-duplicates-36                                                      416B ± 0%      416B ± 0%     ~     (all equal)
MergeKVs/9x4/start-duplicate-36                                                     480B ± 0%      480B ± 0%     ~     (all equal)
MergeKVs/9x4/end-duplicate-36                                                       480B ± 0%      480B ± 0%     ~     (all equal)
MergeKVs/9x5/no-duplicates-36                                                       448B ± 0%      448B ± 0%     ~     (all equal)
MergeKVs/9x5/all-duplicates-36                                                      448B ± 0%      448B ± 0%     ~     (all equal)
MergeKVs/9x5/start-duplicate-36                                                     512B ± 0%      512B ± 0%     ~     (all equal)
MergeKVs/9x5/end-duplicate-36                                                       512B ± 0%      512B ± 0%     ~     (all equal)
MergeKVs/9x6/no-duplicates-36                                                       480B ± 0%      480B ± 0%     ~     (all equal)
MergeKVs/9x6/all-duplicates-36                                                      480B ± 0%      480B ± 0%     ~     (all equal)
MergeKVs/9x6/start-duplicate-36                                                     576B ± 0%      576B ± 0%     ~     (all equal)
MergeKVs/9x6/end-duplicate-36                                                       576B ± 0%      576B ± 0%     ~     (all equal)
MergeKVs/9x7/no-duplicates-36                                                       512B ± 0%      512B ± 0%     ~     (all equal)
MergeKVs/9x7/all-duplicates-36                                                      512B ± 0%      512B ± 0%     ~     (all equal)
MergeKVs/9x7/start-duplicate-36                                                     576B ± 0%      576B ± 0%     ~     (all equal)
MergeKVs/9x7/end-duplicate-36                                                       576B ± 0%      576B ± 0%     ~     (all equal)
MergeKVs/9x8/no-duplicates-36                                                       576B ± 0%      576B ± 0%     ~     (all equal)
MergeKVs/9x8/all-duplicates-36                                                      576B ± 0%      576B ± 0%     ~     (all equal)
MergeKVs/9x8/start-duplicate-36                                                     960B ± 0%      960B ± 0%     ~     (all equal)
MergeKVs/9x8/end-duplicate-36                                                       960B ± 0%      960B ± 0%     ~     (all equal)
MergeKVs/9x9/no-duplicates-36                                                       896B ± 0%      896B ± 0%     ~     (all equal)
MergeKVs/9x9/all-duplicates-36                                                      896B ± 0%      896B ± 0%     ~     (all equal)
MergeKVs/9x9/start-duplicate-36                                                     963B ± 0%      963B ± 0%     ~     (all equal)
MergeKVs/9x9/end-duplicate-36                                                       963B ± 0%      963B ± 0%     ~     (all equal)
pkg:k8s.io/klog/v2/textlogger goos:linux goarch:amd64
TextloggerOutput/call_depth-36                                                      392B ± 0%      392B ± 0%     ~     (all equal)
TextloggerOutput/override_single_value-36                                           352B ± 0%      352B ± 0%     ~     (all equal)
TextloggerOutput/multiple_WithValues-36                                           1.54kB ± 0%    1.54kB ± 0%     ~     (all equal)
TextloggerOutput/KObjSlice_ints-36                                                  312B ± 0%      312B ± 0%     ~     (all equal)
TextloggerOutput/struct_keys-36                                                     425B ± 0%      425B ± 0%     ~     (all equal)
TextloggerOutput/struct_values-36                                                   433B ± 0%      312B ± 0%  -27.94%  (p=0.008 n=5+5)
TextloggerOutput/verbosity_disabled-36                                             64.0B ± 0%     64.0B ± 0%     ~     (all equal)
TextloggerOutput/KObjSlice_int_arg-36                                               304B ± 0%      304B ± 0%     ~     (all equal)
TextloggerOutput/KObjSlice_nil_entry-36                                             304B ± 0%      304B ± 0%     ~     (all equal)
TextloggerOutput/ignore_MarshalJSON-36                                              320B ± 0%      320B ± 0%     ~     (all equal)
TextloggerOutput/MarshalLog()_that_panics-36                                        417B ± 0%      417B ± 0%     ~     (all equal)
TextloggerOutput/MarshalLog()_that_returns_itself-36                                336B ± 0%      328B ± 0%   -2.38%  (p=0.008 n=5+5)
TextloggerOutput/handle_odd-numbers_of_KVs_in_both_log_values_and_Info_args-36      440B ± 0%      440B ± 0%     ~     (all equal)
TextloggerOutput/KObj-36                                                            304B ± 0%      304B ± 0%     ~     (all equal)
TextloggerOutput/log_with_name_and_values-36                                        392B ± 0%      392B ± 0%     ~     (all equal)
TextloggerOutput/MarshalLog()_for_nil-36                                            433B ± 0%      433B ± 0%     ~     (all equal)
TextloggerOutput/preserve_order_of_key/value_pairs-36                               480B ± 0%      480B ± 0%     ~     (all equal)
TextloggerOutput/KObjSlice_okay-36                                                  304B ± 0%      312B ± 0%   +2.63%  (p=0.008 n=5+5)
TextloggerOutput/map_keys-36                                                        457B ± 0%      457B ± 0%     ~     (all equal)
TextloggerOutput/other_vmodule-36                                                  64.0B ± 0%     64.0B ± 0%     ~     (all equal)
TextloggerOutput/print_duplicate_keys_in_arguments-36                               336B ± 0%      336B ± 0%     ~     (all equal)
TextloggerOutput/regular_error_types_when_using_logr.Error-36                       320B ± 0%      320B ± 0%     ~     (all equal)
TextloggerOutput/Error()_that_panics-36                                             393B ± 0%      393B ± 0%     ~     (all equal)
TextloggerOutput/log_with_values-36                                                 320B ± 0%      320B ± 0%     ~     (all equal)
TextloggerOutput/override_WithValues-36                                             400B ± 0%      400B ± 0%     ~     (all equal)
TextloggerOutput/String()_for_nil-36                                                738B ± 0%      738B ± 0%     ~     (all equal)
TextloggerOutput/map_values-36                                                      641B ± 0%      722B ± 0%  +12.64%  (p=0.008 n=5+5)
TextloggerOutput/empty_WithValues-36                                                304B ± 0%      304B ± 0%     ~     (all equal)
TextloggerOutput/html_characters-36                                                 320B ± 0%      320B ± 0%     ~     (all equal)
TextloggerOutput/KObjs-36                                                           513B ± 0%      304B ± 0%  -40.74%  (p=0.008 n=5+5)
TextloggerOutput/Error()_for_nil-36                                                 730B ± 0%      730B ± 0%     ~     (all equal)
TextloggerOutput/String()_that_panics-36                                            401B ± 0%      401B ± 0%     ~     (all equal)
TextloggerOutput/handle_integer_keys-36                                             473B ± 0%      473B ± 0%     ~     (all equal)
TextloggerOutput/vmodule-36                                                         424B ± 0%      424B ± 0%     ~     (all equal)
TextloggerOutput/log_with_multiple_names_and_values-36                              496B ± 0%      496B ± 0%     ~     (all equal)
TextloggerOutput/handle_odd-numbers_of_KVs-36                                       352B ± 0%      352B ± 0%     ~     (all equal)
TextloggerOutput/quotation-36                                                       336B ± 0%      336B ± 0%     ~     (all equal)
TextloggerOutput/KObjSlice_nil_arg-36                                               304B ± 0%      304B ± 0%     ~     (all equal)
TextloggerOutput/regular_error_types_as_value-36                                    320B ± 0%      320B ± 0%     ~     (all equal)
TextloggerOutput/slice_values-36                                                    393B ± 0%      312B ± 0%  -20.61%  (p=0.008 n=5+5)
TextloggerOutput/verbosity_enabled-36                                               312B ± 0%      312B ± 0%     ~     (all equal)
TextloggerOutput/odd_WithValues-36                                                1.14kB ± 0%    1.14kB ± 0%     ~     (all equal)

name                                                                            old allocs/op  new allocs/op  delta
pkg:k8s.io/klog/v2 goos:linux goarch:amd64
Header-36                                                                           2.00 ± 0%      2.00 ± 0%     ~     (all equal)
HeaderWithDir-36                                                                    2.00 ± 0%      2.00 ± 0%     ~     (all equal)
V-36                                                                                0.00           0.00          ~     (all equal)
KRef-36                                                                             0.00           0.00          ~     (all equal)
KObj-36                                                                             0.00           0.00          ~     (all equal)
KObjs/0/simple-36                                                                   3.00 ± 0%      3.00 ± 0%     ~     (all equal)
KObjs/0/conditional-36                                                              0.00           0.00          ~     (all equal)
KObjs/10/simple-36                                                                  4.00 ± 0%      4.00 ± 0%     ~     (all equal)
KObjs/10/conditional-36                                                             0.00           0.00          ~     (all equal)
KObjs/20/simple-36                                                                  4.00 ± 0%      4.00 ± 0%     ~     (all equal)
KObjs/20/conditional-36                                                             0.00           0.00          ~     (all equal)
KObjs/30/simple-36                                                                  4.00 ± 0%      4.00 ± 0%     ~     (all equal)
KObjs/30/conditional-36                                                             0.00           0.00          ~     (all equal)
KObjs/40/simple-36                                                                  4.00 ± 0%      4.00 ± 0%     ~     (all equal)
KObjs/40/conditional-36                                                             0.00           0.00          ~     (all equal)
KObjs/50/simple-36                                                                  4.00 ± 0%      4.00 ± 0%     ~     (all equal)
KObjs/50/conditional-36                                                             0.00           0.00          ~     (all equal)
KObjs/60/simple-36                                                                  4.00 ± 0%      4.00 ± 0%     ~     (all equal)
KObjs/60/conditional-36                                                             0.00           0.00          ~     (all equal)
KObjs/70/simple-36                                                                  4.00 ± 0%      4.00 ± 0%     ~     (all equal)
KObjs/70/conditional-36                                                             0.00           0.00          ~     (all equal)
KObjs/80/simple-36                                                                  4.00 ± 0%      4.00 ± 0%     ~     (all equal)
KObjs/80/conditional-36                                                             0.00           0.00          ~     (all equal)
KObjs/90/simple-36                                                                  4.00 ± 0%      4.00 ± 0%     ~     (all equal)
KObjs/90/conditional-36                                                             0.00           0.00          ~     (all equal)
KObjs/100/simple-36                                                                 4.00 ± 0%      4.00 ± 0%     ~     (all equal)
KObjs/100/conditional-36                                                            0.00           0.00          ~     (all equal)
KObjSlice/0/simple-36                                                               3.00 ± 0%      3.00 ± 0%     ~     (all equal)
KObjSlice/0/conditional-36                                                          0.00           0.00          ~     (all equal)
KObjSlice/10/simple-36                                                              3.00 ± 0%      3.00 ± 0%     ~     (all equal)
KObjSlice/10/conditional-36                                                         0.00           0.00          ~     (all equal)
KObjSlice/20/simple-36                                                              3.00 ± 0%      3.00 ± 0%     ~     (all equal)
KObjSlice/20/conditional-36                                                         0.00           0.00          ~     (all equal)
KObjSlice/30/simple-36                                                              3.00 ± 0%      3.00 ± 0%     ~     (all equal)
KObjSlice/30/conditional-36                                                         0.00           0.00          ~     (all equal)
KObjSlice/40/simple-36                                                              3.00 ± 0%      3.00 ± 0%     ~     (all equal)
KObjSlice/40/conditional-36                                                         0.00           0.00          ~     (all equal)
KObjSlice/50/simple-36                                                              3.00 ± 0%      3.00 ± 0%     ~     (all equal)
KObjSlice/50/conditional-36                                                         0.00           0.00          ~     (all equal)
KObjSlice/60/simple-36                                                              3.00 ± 0%      3.00 ± 0%     ~     (all equal)
KObjSlice/60/conditional-36                                                         0.00           0.00          ~     (all equal)
KObjSlice/70/simple-36                                                              3.00 ± 0%      3.00 ± 0%     ~     (all equal)
KObjSlice/70/conditional-36                                                         0.00           0.00          ~     (all equal)
KObjSlice/80/simple-36                                                              3.00 ± 0%      3.00 ± 0%     ~     (all equal)
KObjSlice/80/conditional-36                                                         0.00           0.00          ~     (all equal)
KObjSlice/90/simple-36                                                              3.00 ± 0%      3.00 ± 0%     ~     (all equal)
KObjSlice/90/conditional-36                                                         0.00           0.00          ~     (all equal)
KObjSlice/100/simple-36                                                             3.00 ± 0%      3.00 ± 0%     ~     (all equal)
KObjSlice/100/conditional-36                                                        0.00           0.00          ~     (all equal)
Scalars/simple-36                                                                   1.00 ± 0%      1.00 ± 0%     ~     (all equal)
Scalars/conditional-36                                                              0.00           0.00          ~     (all equal)
ScalarsWithLogger/simple-36                                                         1.00 ± 0%      1.00 ± 0%     ~     (all equal)
ScalarsWithLogger/conditional-36                                                    0.00           0.00          ~     (all equal)
KObjSliceWithLogger/simple-36                                                       3.00 ± 0%      3.00 ± 0%     ~     (all equal)
KObjSliceWithLogger/conditional-36                                                  0.00           0.00          ~     (all equal)
Logs-36                                                                             9.00 ± 0%      9.00 ± 0%     ~     (all equal)
WithoutDeferUnLock-36                                                               0.00           0.00          ~     (all equal)
WithDeferUnLock-36                                                                  0.00           0.00          ~     (all equal)
KlogOutput/KObjSlice_int_arg-36                                                     6.00 ± 0%      6.00 ± 0%     ~     (all equal)
KlogOutput/handle_integer_keys-36                                                   15.0 ± 0%      15.0 ± 0%     ~     (all equal)
KlogOutput/handle_odd-numbers_of_KVs_in_both_log_values_and_Info_args-36            14.0 ± 0%      14.0 ± 0%     ~     (all equal)
KlogOutput/vmodule-36                                                               6.00 ± 0%      6.00 ± 0%     ~     (all equal)
KlogOutput/other_vmodule-36                                                         0.00           0.00          ~     (all equal)
KlogOutput/override_WithValues-36                                                   14.0 ± 0%      14.0 ± 0%     ~     (all equal)
KlogOutput/print_duplicate_keys_in_arguments-36                                     8.00 ± 0%      8.00 ± 0%     ~     (all equal)
KlogOutput/map_keys-36                                                              13.0 ± 0%      13.0 ± 0%     ~     (all equal)
KlogOutput/verbosity_disabled-36                                                    0.00           0.00          ~     (all equal)
KlogOutput/handle_odd-numbers_of_KVs-36                                             8.00 ± 0%      8.00 ± 0%     ~     (all equal)
KlogOutput/html_characters-36                                                       8.00 ± 0%      8.00 ± 0%     ~     (all equal)
KlogOutput/struct_keys-36                                                           14.0 ± 0%      14.0 ± 0%     ~     (all equal)
KlogOutput/slice_values-36                                                          13.0 ± 0%       6.0 ± 0%  -53.85%  (p=0.008 n=5+5)
KlogOutput/call_depth-36                                                            7.00 ± 0%      7.00 ± 0%     ~     (all equal)
KlogOutput/KObjSlice_nil_entry-36                                                   6.00 ± 0%      6.00 ± 0%     ~     (all equal)
KlogOutput/String()_for_nil-36                                                      11.0 ± 0%      11.0 ± 0%     ~     (all equal)
KlogOutput/KObjSlice_okay-36                                                        6.00 ± 0%      6.00 ± 0%     ~     (all equal)
KlogOutput/odd_WithValues-36                                                        27.0 ± 0%      27.0 ± 0%     ~     (all equal)
KlogOutput/multiple_WithValues-36                                                   30.0 ± 0%      30.0 ± 0%     ~     (all equal)
KlogOutput/preserve_order_of_key/value_pairs-36                                     15.0 ± 0%      15.0 ± 0%     ~     (all equal)
KlogOutput/KObjSlice_ints-36                                                        7.00 ± 0%      7.00 ± 0%     ~     (all equal)
KlogOutput/regular_error_types_as_value-36                                          7.00 ± 0%      7.00 ± 0%     ~     (all equal)
KlogOutput/ignore_MarshalJSON-36                                                    7.00 ± 0%      7.00 ± 0%     ~     (all equal)
KlogOutput/String()_that_panics-36                                                  8.00 ± 0%      8.00 ± 0%     ~     (all equal)
KlogOutput/MarshalLog()_that_panics-36                                              9.00 ± 0%      9.00 ± 0%     ~     (all equal)
KlogOutput/Error()_for_nil-36                                                       10.0 ± 0%      10.0 ± 0%     ~     (all equal)
KlogOutput/log_with_values-36                                                       7.00 ± 0%      7.00 ± 0%     ~     (all equal)
KlogOutput/override_single_value-36                                                 7.00 ± 0%      7.00 ± 0%     ~     (all equal)
KlogOutput/KObjs-36                                                                 12.0 ± 0%       6.0 ± 0%  -50.00%  (p=0.008 n=5+5)
KlogOutput/KObjSlice_nil_arg-36                                                     6.00 ± 0%      6.00 ± 0%     ~     (all equal)
KlogOutput/regular_error_types_when_using_logr.Error-36                             6.00 ± 0%      6.00 ± 0%     ~     (all equal)
KlogOutput/MarshalLog()_for_nil-36                                                  8.00 ± 0%      8.00 ± 0%     ~     (all equal)
KlogOutput/Error()_that_panics-36                                                   7.00 ± 0%      7.00 ± 0%     ~     (all equal)
KlogOutput/verbosity_enabled-36                                                     5.00 ± 0%      5.00 ± 0%     ~     (all equal)
KlogOutput/struct_values-36                                                         11.0 ± 0%       6.0 ± 0%  -45.45%  (p=0.008 n=5+5)
KlogOutput/quotation-36                                                             7.00 ± 0%      7.00 ± 0%     ~     (all equal)
KlogOutput/KObj-36                                                                  6.00 ± 0%      6.00 ± 0%     ~     (all equal)
KlogOutput/MarshalLog()_that_returns_itself-36                                      7.00 ± 0%      6.00 ± 0%  -14.29%  (p=0.008 n=5+5)
KlogOutput/empty_WithValues-36                                                      5.00 ± 0%      5.00 ± 0%     ~     (all equal)
KlogOutput/log_with_multiple_names_and_values-36                                    9.00 ± 0%      9.00 ± 0%     ~     (all equal)
KlogOutput/map_values-36                                                            20.0 ± 0%      18.0 ± 0%  -10.00%  (p=0.008 n=5+5)
KlogOutput/log_with_name_and_values-36                                              8.00 ± 0%      8.00 ± 0%     ~     (all equal)
pkg:k8s.io/klog/v2/internal/benchmarks/contextvalues goos:linux goarch:amd64
NewContext1Percent-36                                                                501 ± 0%       501 ± 0%     ~     (all equal)
NewContext100PercentDisabled-36                                                      600 ± 0%       600 ± 0%     ~     (all equal)
NewContext100Percent-36                                                              600 ± 0%       600 ± 0%     ~     (all equal)
NewContext1PercentValues-36                                                          201 ± 0%       201 ± 0%     ~     (all equal)
NewContext100PercentDisabledValues-36                                                300 ± 0%       300 ± 0%     ~     (all equal)
NewContext100PercentValues-36                                                        300 ± 0%       300 ± 0%     ~     (all equal)
pkg:k8s.io/klog/v2/internal/serialize goos:linux goarch:amd64
MergeKVs/0x0/no-duplicates-36                                                       0.00           0.00          ~     (all equal)
MergeKVs/0x0/all-duplicates-36                                                      0.00           0.00          ~     (all equal)
MergeKVs/0x0/start-duplicate-36                                                     1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/0x0/end-duplicate-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/0x1/no-duplicates-36                                                       0.00           0.00          ~     (all equal)
MergeKVs/0x1/all-duplicates-36                                                      0.00           0.00          ~     (all equal)
MergeKVs/0x1/start-duplicate-36                                                     1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/0x1/end-duplicate-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/0x2/no-duplicates-36                                                       0.00           0.00          ~     (all equal)
MergeKVs/0x2/all-duplicates-36                                                      0.00           0.00          ~     (all equal)
MergeKVs/0x2/start-duplicate-36                                                     1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/0x2/end-duplicate-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/0x3/no-duplicates-36                                                       0.00           0.00          ~     (all equal)
MergeKVs/0x3/all-duplicates-36                                                      0.00           0.00          ~     (all equal)
MergeKVs/0x3/start-duplicate-36                                                     1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/0x3/end-duplicate-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/0x4/no-duplicates-36                                                       0.00           0.00          ~     (all equal)
MergeKVs/0x4/all-duplicates-36                                                      0.00           0.00          ~     (all equal)
MergeKVs/0x4/start-duplicate-36                                                     1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/0x4/end-duplicate-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/0x5/no-duplicates-36                                                       0.00           0.00          ~     (all equal)
MergeKVs/0x5/all-duplicates-36                                                      0.00           0.00          ~     (all equal)
MergeKVs/0x5/start-duplicate-36                                                     1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/0x5/end-duplicate-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/0x6/no-duplicates-36                                                       0.00           0.00          ~     (all equal)
MergeKVs/0x6/all-duplicates-36                                                      0.00           0.00          ~     (all equal)
MergeKVs/0x6/start-duplicate-36                                                     1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/0x6/end-duplicate-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/0x7/no-duplicates-36                                                       0.00           0.00          ~     (all equal)
MergeKVs/0x7/all-duplicates-36                                                      0.00           0.00          ~     (all equal)
MergeKVs/0x7/start-duplicate-36                                                     1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/0x7/end-duplicate-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/0x8/no-duplicates-36                                                       0.00           0.00          ~     (all equal)
MergeKVs/0x8/all-duplicates-36                                                      0.00           0.00          ~     (all equal)
MergeKVs/0x8/start-duplicate-36                                                     2.00 ± 0%      2.00 ± 0%     ~     (all equal)
MergeKVs/0x8/end-duplicate-36                                                       2.00 ± 0%      2.00 ± 0%     ~     (all equal)
MergeKVs/0x9/no-duplicates-36                                                       0.00           0.00          ~     (all equal)
MergeKVs/0x9/all-duplicates-36                                                      0.00           0.00          ~     (all equal)
MergeKVs/0x9/start-duplicate-36                                                     2.00 ± 0%      2.00 ± 0%     ~     (all equal)
MergeKVs/0x9/end-duplicate-36                                                       2.00 ± 0%      2.00 ± 0%     ~     (all equal)
MergeKVs/1x0/no-duplicates-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/1x0/all-duplicates-36                                                      1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/1x0/start-duplicate-36                                                     1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/1x0/end-duplicate-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/1x1/no-duplicates-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/1x1/all-duplicates-36                                                      1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/1x1/start-duplicate-36                                                     1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/1x1/end-duplicate-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/1x2/no-duplicates-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/1x2/all-duplicates-36                                                      1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/1x2/start-duplicate-36                                                     1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/1x2/end-duplicate-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/1x3/no-duplicates-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/1x3/all-duplicates-36                                                      1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/1x3/start-duplicate-36                                                     1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/1x3/end-duplicate-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/1x4/no-duplicates-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/1x4/all-duplicates-36                                                      1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/1x4/start-duplicate-36                                                     1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/1x4/end-duplicate-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/1x5/no-duplicates-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/1x5/all-duplicates-36                                                      1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/1x5/start-duplicate-36                                                     1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/1x5/end-duplicate-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/1x6/no-duplicates-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/1x6/all-duplicates-36                                                      1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/1x6/start-duplicate-36                                                     1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/1x6/end-duplicate-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/1x7/no-duplicates-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/1x7/all-duplicates-36                                                      1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/1x7/start-duplicate-36                                                     1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/1x7/end-duplicate-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/1x8/no-duplicates-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/1x8/all-duplicates-36                                                      1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/1x8/start-duplicate-36                                                     2.00 ± 0%      2.00 ± 0%     ~     (all equal)
MergeKVs/1x8/end-duplicate-36                                                       2.00 ± 0%      2.00 ± 0%     ~     (all equal)
MergeKVs/1x9/no-duplicates-36                                                       2.00 ± 0%      2.00 ± 0%     ~     (all equal)
MergeKVs/1x9/all-duplicates-36                                                      2.00 ± 0%      2.00 ± 0%     ~     (all equal)
MergeKVs/1x9/start-duplicate-36                                                     2.00 ± 0%      2.00 ± 0%     ~     (all equal)
MergeKVs/1x9/end-duplicate-36                                                       2.00 ± 0%      2.00 ± 0%     ~     (all equal)
MergeKVs/2x0/no-duplicates-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/2x0/all-duplicates-36                                                      1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/2x0/start-duplicate-36                                                     1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/2x0/end-duplicate-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/2x1/no-duplicates-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/2x1/all-duplicates-36                                                      1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/2x1/start-duplicate-36                                                     1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/2x1/end-duplicate-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/2x2/no-duplicates-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/2x2/all-duplicates-36                                                      1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/2x2/start-duplicate-36                                                     1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/2x2/end-duplicate-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/2x3/no-duplicates-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/2x3/all-duplicates-36                                                      1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/2x3/start-duplicate-36                                                     1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/2x3/end-duplicate-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/2x4/no-duplicates-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/2x4/all-duplicates-36                                                      1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/2x4/start-duplicate-36                                                     1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/2x4/end-duplicate-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/2x5/no-duplicates-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/2x5/all-duplicates-36                                                      1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/2x5/start-duplicate-36                                                     1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/2x5/end-duplicate-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/2x6/no-duplicates-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/2x6/all-duplicates-36                                                      1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/2x6/start-duplicate-36                                                     1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/2x6/end-duplicate-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/2x7/no-duplicates-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/2x7/all-duplicates-36                                                      1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/2x7/start-duplicate-36                                                     1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/2x7/end-duplicate-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/2x8/no-duplicates-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/2x8/all-duplicates-36                                                      1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/2x8/start-duplicate-36                                                     2.00 ± 0%      2.00 ± 0%     ~     (all equal)
MergeKVs/2x8/end-duplicate-36                                                       2.00 ± 0%      2.00 ± 0%     ~     (all equal)
MergeKVs/2x9/no-duplicates-36                                                       2.00 ± 0%      2.00 ± 0%     ~     (all equal)
MergeKVs/2x9/all-duplicates-36                                                      2.00 ± 0%      2.00 ± 0%     ~     (all equal)
MergeKVs/2x9/start-duplicate-36                                                     2.00 ± 0%      2.00 ± 0%     ~     (all equal)
MergeKVs/2x9/end-duplicate-36                                                       2.00 ± 0%      2.00 ± 0%     ~     (all equal)
MergeKVs/3x0/no-duplicates-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/3x0/all-duplicates-36                                                      1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/3x0/start-duplicate-36                                                     1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/3x0/end-duplicate-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/3x1/no-duplicates-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/3x1/all-duplicates-36                                                      1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/3x1/start-duplicate-36                                                     1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/3x1/end-duplicate-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/3x2/no-duplicates-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/3x2/all-duplicates-36                                                      1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/3x2/start-duplicate-36                                                     1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/3x2/end-duplicate-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/3x3/no-duplicates-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/3x3/all-duplicates-36                                                      1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/3x3/start-duplicate-36                                                     1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/3x3/end-duplicate-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/3x4/no-duplicates-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/3x4/all-duplicates-36                                                      1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/3x4/start-duplicate-36                                                     1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/3x4/end-duplicate-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/3x5/no-duplicates-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/3x5/all-duplicates-36                                                      1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/3x5/start-duplicate-36                                                     1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/3x5/end-duplicate-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/3x6/no-duplicates-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/3x6/all-duplicates-36                                                      1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/3x6/start-duplicate-36                                                     1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/3x6/end-duplicate-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/3x7/no-duplicates-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/3x7/all-duplicates-36                                                      1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/3x7/start-duplicate-36                                                     1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/3x7/end-duplicate-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/3x8/no-duplicates-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/3x8/all-duplicates-36                                                      1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/3x8/start-duplicate-36                                                     2.00 ± 0%      2.00 ± 0%     ~     (all equal)
MergeKVs/3x8/end-duplicate-36                                                       2.00 ± 0%      2.00 ± 0%     ~     (all equal)
MergeKVs/3x9/no-duplicates-36                                                       2.00 ± 0%      2.00 ± 0%     ~     (all equal)
MergeKVs/3x9/all-duplicates-36                                                      2.00 ± 0%      2.00 ± 0%     ~     (all equal)
MergeKVs/3x9/start-duplicate-36                                                     2.00 ± 0%      2.00 ± 0%     ~     (all equal)
MergeKVs/3x9/end-duplicate-36                                                       2.00 ± 0%      2.00 ± 0%     ~     (all equal)
MergeKVs/4x0/no-duplicates-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/4x0/all-duplicates-36                                                      1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/4x0/start-duplicate-36                                                     1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/4x0/end-duplicate-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/4x1/no-duplicates-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/4x1/all-duplicates-36                                                      1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/4x1/start-duplicate-36                                                     1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/4x1/end-duplicate-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/4x2/no-duplicates-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/4x2/all-duplicates-36                                                      1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/4x2/start-duplicate-36                                                     1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/4x2/end-duplicate-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/4x3/no-duplicates-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/4x3/all-duplicates-36                                                      1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/4x3/start-duplicate-36                                                     1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/4x3/end-duplicate-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/4x4/no-duplicates-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/4x4/all-duplicates-36                                                      1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/4x4/start-duplicate-36                                                     1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/4x4/end-duplicate-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/4x5/no-duplicates-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/4x5/all-duplicates-36                                                      1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/4x5/start-duplicate-36                                                     1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/4x5/end-duplicate-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/4x6/no-duplicates-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/4x6/all-duplicates-36                                                      1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/4x6/start-duplicate-36                                                     1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/4x6/end-duplicate-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/4x7/no-duplicates-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/4x7/all-duplicates-36                                                      1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/4x7/start-duplicate-36                                                     1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/4x7/end-duplicate-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/4x8/no-duplicates-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/4x8/all-duplicates-36                                                      1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/4x8/start-duplicate-36                                                     2.00 ± 0%      2.00 ± 0%     ~     (all equal)
MergeKVs/4x8/end-duplicate-36                                                       2.00 ± 0%      2.00 ± 0%     ~     (all equal)
MergeKVs/4x9/no-duplicates-36                                                       2.00 ± 0%      2.00 ± 0%     ~     (all equal)
MergeKVs/4x9/all-duplicates-36                                                      2.00 ± 0%      2.00 ± 0%     ~     (all equal)
MergeKVs/4x9/start-duplicate-36                                                     2.00 ± 0%      2.00 ± 0%     ~     (all equal)
MergeKVs/4x9/end-duplicate-36                                                       2.00 ± 0%      2.00 ± 0%     ~     (all equal)
MergeKVs/5x0/no-duplicates-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/5x0/all-duplicates-36                                                      1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/5x0/start-duplicate-36                                                     1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/5x0/end-duplicate-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/5x1/no-duplicates-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/5x1/all-duplicates-36                                                      1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/5x1/start-duplicate-36                                                     1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/5x1/end-duplicate-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/5x2/no-duplicates-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/5x2/all-duplicates-36                                                      1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/5x2/start-duplicate-36                                                     1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/5x2/end-duplicate-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/5x3/no-duplicates-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/5x3/all-duplicates-36                                                      1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/5x3/start-duplicate-36                                                     1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/5x3/end-duplicate-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/5x4/no-duplicates-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/5x4/all-duplicates-36                                                      1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/5x4/start-duplicate-36                                                     1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/5x4/end-duplicate-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/5x5/no-duplicates-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/5x5/all-duplicates-36                                                      1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/5x5/start-duplicate-36                                                     1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/5x5/end-duplicate-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/5x6/no-duplicates-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/5x6/all-duplicates-36                                                      1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/5x6/start-duplicate-36                                                     1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/5x6/end-duplicate-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/5x7/no-duplicates-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/5x7/all-duplicates-36                                                      1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/5x7/start-duplicate-36                                                     1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/5x7/end-duplicate-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/5x8/no-duplicates-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/5x8/all-duplicates-36                                                      1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/5x8/start-duplicate-36                                                     2.00 ± 0%      2.00 ± 0%     ~     (all equal)
MergeKVs/5x8/end-duplicate-36                                                       2.00 ± 0%      2.00 ± 0%     ~     (all equal)
MergeKVs/5x9/no-duplicates-36                                                       2.00 ± 0%      2.00 ± 0%     ~     (all equal)
MergeKVs/5x9/all-duplicates-36                                                      2.00 ± 0%      2.00 ± 0%     ~     (all equal)
MergeKVs/5x9/start-duplicate-36                                                     2.00 ± 0%      2.00 ± 0%     ~     (all equal)
MergeKVs/5x9/end-duplicate-36                                                       2.00 ± 0%      2.00 ± 0%     ~     (all equal)
MergeKVs/6x0/no-duplicates-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/6x0/all-duplicates-36                                                      1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/6x0/start-duplicate-36                                                     1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/6x0/end-duplicate-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/6x1/no-duplicates-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/6x1/all-duplicates-36                                                      1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/6x1/start-duplicate-36                                                     1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/6x1/end-duplicate-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/6x2/no-duplicates-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/6x2/all-duplicates-36                                                      1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/6x2/start-duplicate-36                                                     1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/6x2/end-duplicate-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/6x3/no-duplicates-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/6x3/all-duplicates-36                                                      1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/6x3/start-duplicate-36                                                     1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/6x3/end-duplicate-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/6x4/no-duplicates-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/6x4/all-duplicates-36                                                      1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/6x4/start-duplicate-36                                                     1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/6x4/end-duplicate-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/6x5/no-duplicates-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/6x5/all-duplicates-36                                                      1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/6x5/start-duplicate-36                                                     1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/6x5/end-duplicate-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/6x6/no-duplicates-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/6x6/all-duplicates-36                                                      1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/6x6/start-duplicate-36                                                     1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/6x6/end-duplicate-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/6x7/no-duplicates-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/6x7/all-duplicates-36                                                      1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/6x7/start-duplicate-36                                                     1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/6x7/end-duplicate-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/6x8/no-duplicates-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/6x8/all-duplicates-36                                                      1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/6x8/start-duplicate-36                                                     2.00 ± 0%      2.00 ± 0%     ~     (all equal)
MergeKVs/6x8/end-duplicate-36                                                       2.00 ± 0%      2.00 ± 0%     ~     (all equal)
MergeKVs/6x9/no-duplicates-36                                                       2.00 ± 0%      2.00 ± 0%     ~     (all equal)
MergeKVs/6x9/all-duplicates-36                                                      2.00 ± 0%      2.00 ± 0%     ~     (all equal)
MergeKVs/6x9/start-duplicate-36                                                     2.00 ± 0%      2.00 ± 0%     ~     (all equal)
MergeKVs/6x9/end-duplicate-36                                                       2.00 ± 0%      2.00 ± 0%     ~     (all equal)
MergeKVs/7x0/no-duplicates-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/7x0/all-duplicates-36                                                      1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/7x0/start-duplicate-36                                                     1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/7x0/end-duplicate-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/7x1/no-duplicates-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/7x1/all-duplicates-36                                                      1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/7x1/start-duplicate-36                                                     1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/7x1/end-duplicate-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/7x2/no-duplicates-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/7x2/all-duplicates-36                                                      1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/7x2/start-duplicate-36                                                     1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/7x2/end-duplicate-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/7x3/no-duplicates-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/7x3/all-duplicates-36                                                      1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/7x3/start-duplicate-36                                                     1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/7x3/end-duplicate-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/7x4/no-duplicates-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/7x4/all-duplicates-36                                                      1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/7x4/start-duplicate-36                                                     1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/7x4/end-duplicate-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/7x5/no-duplicates-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/7x5/all-duplicates-36                                                      1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/7x5/start-duplicate-36                                                     1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/7x5/end-duplicate-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/7x6/no-duplicates-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/7x6/all-duplicates-36                                                      1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/7x6/start-duplicate-36                                                     1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/7x6/end-duplicate-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/7x7/no-duplicates-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/7x7/all-duplicates-36                                                      1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/7x7/start-duplicate-36                                                     1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/7x7/end-duplicate-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/7x8/no-duplicates-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/7x8/all-duplicates-36                                                      1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/7x8/start-duplicate-36                                                     2.00 ± 0%      2.00 ± 0%     ~     (all equal)
MergeKVs/7x8/end-duplicate-36                                                       2.00 ± 0%      2.00 ± 0%     ~     (all equal)
MergeKVs/7x9/no-duplicates-36                                                       2.00 ± 0%      2.00 ± 0%     ~     (all equal)
MergeKVs/7x9/all-duplicates-36                                                      2.00 ± 0%      2.00 ± 0%     ~     (all equal)
MergeKVs/7x9/start-duplicate-36                                                     2.00 ± 0%      2.00 ± 0%     ~     (all equal)
MergeKVs/7x9/end-duplicate-36                                                       2.00 ± 0%      2.00 ± 0%     ~     (all equal)
MergeKVs/8x0/no-duplicates-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/8x0/all-duplicates-36                                                      1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/8x0/start-duplicate-36                                                     1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/8x0/end-duplicate-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/8x1/no-duplicates-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/8x1/all-duplicates-36                                                      1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/8x1/start-duplicate-36                                                     1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/8x1/end-duplicate-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/8x2/no-duplicates-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/8x2/all-duplicates-36                                                      1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/8x2/start-duplicate-36                                                     1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/8x2/end-duplicate-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/8x3/no-duplicates-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/8x3/all-duplicates-36                                                      1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/8x3/start-duplicate-36                                                     1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/8x3/end-duplicate-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/8x4/no-duplicates-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/8x4/all-duplicates-36                                                      1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/8x4/start-duplicate-36                                                     1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/8x4/end-duplicate-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/8x5/no-duplicates-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/8x5/all-duplicates-36                                                      1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/8x5/start-duplicate-36                                                     1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/8x5/end-duplicate-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/8x6/no-duplicates-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/8x6/all-duplicates-36                                                      1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/8x6/start-duplicate-36                                                     1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/8x6/end-duplicate-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/8x7/no-duplicates-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/8x7/all-duplicates-36                                                      1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/8x7/start-duplicate-36                                                     1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/8x7/end-duplicate-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/8x8/no-duplicates-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/8x8/all-duplicates-36                                                      1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/8x8/start-duplicate-36                                                     2.00 ± 0%      2.00 ± 0%     ~     (all equal)
MergeKVs/8x8/end-duplicate-36                                                       2.00 ± 0%      2.00 ± 0%     ~     (all equal)
MergeKVs/8x9/no-duplicates-36                                                       2.00 ± 0%      2.00 ± 0%     ~     (all equal)
MergeKVs/8x9/all-duplicates-36                                                      2.00 ± 0%      2.00 ± 0%     ~     (all equal)
MergeKVs/8x9/start-duplicate-36                                                     2.00 ± 0%      2.00 ± 0%     ~     (all equal)
MergeKVs/8x9/end-duplicate-36                                                       2.00 ± 0%      2.00 ± 0%     ~     (all equal)
MergeKVs/9x0/no-duplicates-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/9x0/all-duplicates-36                                                      1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/9x0/start-duplicate-36                                                     1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/9x0/end-duplicate-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/9x1/no-duplicates-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/9x1/all-duplicates-36                                                      1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/9x1/start-duplicate-36                                                     1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/9x1/end-duplicate-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/9x2/no-duplicates-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/9x2/all-duplicates-36                                                      1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/9x2/start-duplicate-36                                                     1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/9x2/end-duplicate-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/9x3/no-duplicates-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/9x3/all-duplicates-36                                                      1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/9x3/start-duplicate-36                                                     1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/9x3/end-duplicate-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/9x4/no-duplicates-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/9x4/all-duplicates-36                                                      1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/9x4/start-duplicate-36                                                     1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/9x4/end-duplicate-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/9x5/no-duplicates-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/9x5/all-duplicates-36                                                      1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/9x5/start-duplicate-36                                                     1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/9x5/end-duplicate-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/9x6/no-duplicates-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/9x6/all-duplicates-36                                                      1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/9x6/start-duplicate-36                                                     1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/9x6/end-duplicate-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/9x7/no-duplicates-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/9x7/all-duplicates-36                                                      1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/9x7/start-duplicate-36                                                     1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/9x7/end-duplicate-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/9x8/no-duplicates-36                                                       1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/9x8/all-duplicates-36                                                      1.00 ± 0%      1.00 ± 0%     ~     (all equal)
MergeKVs/9x8/start-duplicate-36                                                     2.00 ± 0%      2.00 ± 0%     ~     (all equal)
MergeKVs/9x8/end-duplicate-36                                                       2.00 ± 0%      2.00 ± 0%     ~     (all equal)
MergeKVs/9x9/no-duplicates-36                                                       2.00 ± 0%      2.00 ± 0%     ~     (all equal)
MergeKVs/9x9/all-duplicates-36                                                      2.00 ± 0%      2.00 ± 0%     ~     (all equal)
MergeKVs/9x9/start-duplicate-36                                                     2.00 ± 0%      2.00 ± 0%     ~     (all equal)
MergeKVs/9x9/end-duplicate-36                                                       2.00 ± 0%      2.00 ± 0%     ~     (all equal)
pkg:k8s.io/klog/v2/textlogger goos:linux goarch:amd64
TextloggerOutput/call_depth-36                                                      6.00 ± 0%      6.00 ± 0%     ~     (all equal)
TextloggerOutput/override_single_value-36                                           6.00 ± 0%      6.00 ± 0%     ~     (all equal)
TextloggerOutput/multiple_WithValues-36                                             20.0 ± 0%      20.0 ± 0%     ~     (all equal)
TextloggerOutput/KObjSlice_ints-36                                                  5.00 ± 0%      5.00 ± 0%     ~     (all equal)
TextloggerOutput/struct_keys-36                                                     10.0 ± 0%      10.0 ± 0%     ~     (all equal)
TextloggerOutput/struct_values-36                                                   9.00 ± 0%      4.00 ± 0%  -55.56%  (p=0.008 n=5+5)
TextloggerOutput/verbosity_disabled-36                                              1.00 ± 0%      1.00 ± 0%     ~     (all equal)
TextloggerOutput/KObjSlice_int_arg-36                                               4.00 ± 0%      4.00 ± 0%     ~     (all equal)
TextloggerOutput/KObjSlice_nil_entry-36                                             4.00 ± 0%      4.00 ± 0%     ~     (all equal)
TextloggerOutput/ignore_MarshalJSON-36                                              5.00 ± 0%      5.00 ± 0%     ~     (all equal)
TextloggerOutput/MarshalLog()_that_panics-36                                        7.00 ± 0%      7.00 ± 0%     ~     (all equal)
TextloggerOutput/MarshalLog()_that_returns_itself-36                                5.00 ± 0%      4.00 ± 0%  -20.00%  (p=0.008 n=5+5)
TextloggerOutput/handle_odd-numbers_of_KVs_in_both_log_values_and_Info_args-36      9.00 ± 0%      9.00 ± 0%     ~     (all equal)
TextloggerOutput/KObj-36                                                            4.00 ± 0%      4.00 ± 0%     ~     (all equal)
TextloggerOutput/log_with_name_and_values-36                                        6.00 ± 0%      6.00 ± 0%     ~     (all equal)
TextloggerOutput/MarshalLog()_for_nil-36                                            6.00 ± 0%      6.00 ± 0%     ~     (all equal)
TextloggerOutput/preserve_order_of_key/value_pairs-36                               10.0 ± 0%      10.0 ± 0%     ~     (all equal)
TextloggerOutput/KObjSlice_okay-36                                                  4.00 ± 0%      4.00 ± 0%     ~     (all equal)
TextloggerOutput/map_keys-36                                                        11.0 ± 0%      11.0 ± 0%     ~     (all equal)
TextloggerOutput/other_vmodule-36                                                   1.00 ± 0%      1.00 ± 0%     ~     (all equal)
TextloggerOutput/print_duplicate_keys_in_arguments-36                               6.00 ± 0%      6.00 ± 0%     ~     (all equal)
TextloggerOutput/regular_error_types_when_using_logr.Error-36                       5.00 ± 0%      5.00 ± 0%     ~     (all equal)
TextloggerOutput/Error()_that_panics-36                                             6.00 ± 0%      6.00 ± 0%     ~     (all equal)
TextloggerOutput/log_with_values-36                                                 5.00 ± 0%      5.00 ± 0%     ~     (all equal)
TextloggerOutput/override_WithValues-36                                             11.0 ± 0%      11.0 ± 0%     ~     (all equal)
TextloggerOutput/String()_for_nil-36                                                9.00 ± 0%      9.00 ± 0%     ~     (all equal)
TextloggerOutput/map_values-36                                                      18.0 ± 0%      16.0 ± 0%  -11.11%  (p=0.008 n=5+5)
TextloggerOutput/empty_WithValues-36                                                4.00 ± 0%      4.00 ± 0%     ~     (all equal)
TextloggerOutput/html_characters-36                                                 6.00 ± 0%      6.00 ± 0%     ~     (all equal)
TextloggerOutput/KObjs-36                                                           10.0 ± 0%       4.0 ± 0%  -60.00%  (p=0.008 n=5+5)
TextloggerOutput/Error()_for_nil-36                                                 9.00 ± 0%      9.00 ± 0%     ~     (all equal)
TextloggerOutput/String()_that_panics-36                                            6.00 ± 0%      6.00 ± 0%     ~     (all equal)
TextloggerOutput/handle_integer_keys-36                                             11.0 ± 0%      11.0 ± 0%     ~     (all equal)
TextloggerOutput/vmodule-36                                                         5.00 ± 0%      5.00 ± 0%     ~     (all equal)
TextloggerOutput/log_with_multiple_names_and_values-36                              9.00 ± 0%      9.00 ± 0%     ~     (all equal)
TextloggerOutput/handle_odd-numbers_of_KVs-36                                       6.00 ± 0%      6.00 ± 0%     ~     (all equal)
TextloggerOutput/quotation-36                                                       5.00 ± 0%      5.00 ± 0%     ~     (all equal)
TextloggerOutput/KObjSlice_nil_arg-36                                               4.00 ± 0%      4.00 ± 0%     ~     (all equal)
TextloggerOutput/regular_error_types_as_value-36                                    5.00 ± 0%      5.00 ± 0%     ~     (all equal)
TextloggerOutput/slice_values-36                                                    11.0 ± 0%       4.0 ± 0%  -63.64%  (p=0.008 n=5+5)
TextloggerOutput/verbosity_enabled-36                                               4.00 ± 0%      4.00 ± 0%     ~     (all equal)
TextloggerOutput/odd_WithValues-36                                                  18.0 ± 0%      18.0 ± 0%     ~     (all equal)

@smarterclayton
Copy link

+1, this is great. And from a usability perspective, there are several places in the kubelet where we preferred to log straight JSON instead of the struct for debugging.

@serathius
Copy link

When writing the original proposal we on how objects should be formatted, we were worried about formatter following pointers within structs. This would cause unpredictable performance cost of logging. Cyclic lists could result in infinite loops.

How this change will impact handling pointers? Do we have any tests for that?

@serathius
Copy link

cc @thockin

The output of Sprintf("%+v") is neither readable nor parseable. JSON encoding
is better in both regards.

There are some downsides:
- Unexported fields don't get encoded anymore. However, the same happens
  with other backends (in particular, zapr), so one could also
  argue that making the text format behave like those others
  is good because developers notice early that they custom
  String and MarshalLog methods if they want to log such fields.
- The result KObjs (a slice) now gets encoded as array of structs.
  KObjs already got deprecated a year ago. KObjSlice should be used
  instead.
@pohly
Copy link
Author

pohly commented Apr 27, 2023

When writing the original proposal we on how objects should be formatted, we were worried about formatter following pointers within structs.

Which is exactly what zapr does. Why should the text logger not do the same?

This would cause unpredictable performance cost of logging.

Again, same as with zapr. If this is a problem, then IMHO it's better that the text logger exposes it because then it is more likely to be noticed because text format gets used more, in particular when developers add log calls.

Cyclic lists could result in infinite loops.

That's a valid concern. Go used to crash in such a case, but that got fixed to return an error (https://go-review.googlesource.com/c/go/+/187920, https://go-review.googlesource.com/c/go/+/248358) and such an error then gets logged. I don't think we need to do more than that.

I added a test case for this: https://github.com/kubernetes/klog/compare/409909eb14784b603e221dca5e1d750135271e98..d731661702a8af746c0ac12e04df075d11e67b42

Both text logger and zapr handle it.

@pohly
Copy link
Author

pohly commented Apr 28, 2023

/assign @thockin

Copy link
Member

@thockin thockin left a comment

Choose a reason for hiding this comment

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

I think this is OK, but I have lost touch with this code. The printf format was always awful, so +1

@thockin
Copy link
Member

thockin commented Apr 28, 2023

/lgtm
/approve

@k8s-ci-robot k8s-ci-robot added the lgtm "Looks good to me", indicates that a PR is ready to be merged. label Apr 28, 2023
@k8s-ci-robot
Copy link

[APPROVALNOTIFIER] This PR is APPROVED

This pull-request has been approved by: pohly, thockin

The full list of commands accepted by this bot can be found here.

The pull request process is described here

Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@k8s-ci-robot k8s-ci-robot added the approved Indicates a PR has been approved by an approver from all required OWNERS files. label Apr 28, 2023
@k8s-ci-robot k8s-ci-robot merged commit 6ded808 into kubernetes:main Apr 28, 2023
samcday referenced this pull request in hetznercloud/hcloud-cloud-controller-manager May 12, 2023
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [k8s.io/klog/v2](https://github.com/kubernetes/klog) | require |
minor | `v2.90.1` -> `v2.100.1` |

---

### Release Notes

<details>
<summary>kubernetes/klog</summary>

###
[`v2.100.1`](https://github.com/kubernetes/klog/releases/tag/v2.100.1):
Prepare klog release for Kubernetes v1.28 (Take 1)

[Compare
Source](https://github.com/kubernetes/klog/compare/v2.90.1...v2.100.1)

#### What's Changed

- expose logBridge via NewStandardLog() by
[@&#8203;mikedanese](https://github.com/mikedanese) in
[https://github.com/kubernetes/klog/pull/369](https://github.com/kubernetes/klog/pull/369)
- add Format wrapper by [@&#8203;pohly](https://github.com/pohly) in
[https://github.com/kubernetes/klog/pull/374](https://github.com/kubernetes/klog/pull/374)
- JSON as fallback encoding by
[@&#8203;pohly](https://github.com/pohly) in
[https://github.com/kubernetes/klog/pull/375](https://github.com/kubernetes/klog/pull/375)

#### New Contributors

- [@&#8203;mikedanese](https://github.com/mikedanese) made their first
contribution in
[https://github.com/kubernetes/klog/pull/369](https://github.com/kubernetes/klog/pull/369)

**Full Changelog**:
kubernetes/klog@v2.90.1...v2.100.1

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://app.renovatebot.com/dashboard#github/hetznercloud/hcloud-cloud-controller-manager).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNS42My4xIiwidXBkYXRlZEluVmVyIjoiMzUuNzEuNCIsInRhcmdldEJyYW5jaCI6Im1haW4ifQ==-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
panslava added a commit to panslava/ingress-gce that referenced this pull request Dec 8, 2023
- klog changed formatting from Sprintf to json.Encode kubernetes/klog#375, so current code was returning error log
panslava added a commit to panslava/ingress-gce that referenced this pull request Dec 8, 2023
- klog changed formatting from Sprintf to json.Encode kubernetes/klog#375, so current code was returning error log
panslava added a commit to panslava/ingress-gce that referenced this pull request Dec 8, 2023
- klog changed formatting from Sprintf to json.Encode kubernetes/klog#375, so current code was returning error log
panslava added a commit to panslava/ingress-gce that referenced this pull request Dec 8, 2023
- klog changed formatting from Sprintf to json.Encode kubernetes/klog#375, so current code was returning error log
panslava added a commit to panslava/ingress-gce that referenced this pull request Dec 9, 2023
- klog changed formatting from Sprintf to json.Encode kubernetes/klog#375, so current code was returning error log
panslava added a commit to panslava/ingress-gce that referenced this pull request Dec 9, 2023
- klog changed formatting from Sprintf to json.Encode kubernetes/klog#375, so current code was returning error log
TylerHelmuth referenced this pull request in open-telemetry/opentelemetry-collector-contrib Dec 19, 2023
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [k8s.io/klog](https://github.com/kubernetes/klog) | require | major
| `v1.0.0` -> `v2.110.1` |

---

> [!WARNING]
> Some dependencies could not be looked up. Check the Dependency
Dashboard for more information.

---

### Release Notes

<details>
<summary>kubernetes/klog (k8s.io/klog)</summary>

###
[`v2.110.1`](https://github.com/kubernetes/klog/releases/tag/v2.110.1):
Prepare klog release for Kubernetes v1.29 (Take 1)

[Compare
Source](https://github.com/kubernetes/klog/compare/v2.100.1...v2.110.1)

#### What's Changed

- fix: SetLogger via klog.SetLogger will output an unexpected newline by
[@&#8203;aimuz](https://github.com/aimuz) in
[https://github.com/kubernetes/klog/pull/378](https://github.com/kubernetes/klog/pull/378)
- resolve comments warning by
[@&#8203;lowang-bh](https://github.com/lowang-bh) in
[https://github.com/kubernetes/klog/pull/379](https://github.com/kubernetes/klog/pull/379)
- stderrthreshold: fix flag comment by
[@&#8203;pohly](https://github.com/pohly) in
[https://github.com/kubernetes/klog/pull/376](https://github.com/kubernetes/klog/pull/376)
- enable "go vet" checks for parameters by
[@&#8203;pohly](https://github.com/pohly) in
[https://github.com/kubernetes/klog/pull/390](https://github.com/kubernetes/klog/pull/390)
- promote experimental code to stable by
[@&#8203;pohly](https://github.com/pohly) in
[https://github.com/kubernetes/klog/pull/392](https://github.com/kubernetes/klog/pull/392)
- golangci-lint action by [@&#8203;pohly](https://github.com/pohly) in
[https://github.com/kubernetes/klog/pull/380](https://github.com/kubernetes/klog/pull/380)
- output: handle WithName like zapr does by
[@&#8203;pohly](https://github.com/pohly) in
[https://github.com/kubernetes/klog/pull/391](https://github.com/kubernetes/klog/pull/391)
- slog support + logr 1.3.0 update by
[@&#8203;pohly](https://github.com/pohly) in
[https://github.com/kubernetes/klog/pull/384](https://github.com/kubernetes/klog/pull/384)

#### New Contributors

- [@&#8203;aimuz](https://github.com/aimuz) made their first
contribution in
[https://github.com/kubernetes/klog/pull/378](https://github.com/kubernetes/klog/pull/378)
- [@&#8203;lowang-bh](https://github.com/lowang-bh) made their first
contribution in
[https://github.com/kubernetes/klog/pull/379](https://github.com/kubernetes/klog/pull/379)

**Full Changelog**:
kubernetes/klog@v2.100.1...v2.110.1

###
[`v2.100.1`](https://github.com/kubernetes/klog/releases/tag/v2.100.1):
Prepare klog release for Kubernetes v1.28 (Take 1)

[Compare
Source](https://github.com/kubernetes/klog/compare/v2.90.1...v2.100.1)

#### What's Changed

- expose logBridge via NewStandardLog() by
[@&#8203;mikedanese](https://github.com/mikedanese) in
[https://github.com/kubernetes/klog/pull/369](https://github.com/kubernetes/klog/pull/369)
- add Format wrapper by [@&#8203;pohly](https://github.com/pohly) in
[https://github.com/kubernetes/klog/pull/374](https://github.com/kubernetes/klog/pull/374)
- JSON as fallback encoding by
[@&#8203;pohly](https://github.com/pohly) in
[https://github.com/kubernetes/klog/pull/375](https://github.com/kubernetes/klog/pull/375)

#### New Contributors

- [@&#8203;mikedanese](https://github.com/mikedanese) made their first
contribution in
[https://github.com/kubernetes/klog/pull/369](https://github.com/kubernetes/klog/pull/369)

**Full Changelog**:
kubernetes/klog@v2.90.1...v2.100.1

###
[`v2.90.1`](https://github.com/kubernetes/klog/releases/tag/v2.90.1):
Prepare klog release for Kubernetes v1.27 (Take 2)

[Compare
Source](https://github.com/kubernetes/klog/compare/v2.90.0...v2.90.1)

#### What's Changed

- buffer: restore dropping of too large buffers by
[@&#8203;pohly](https://github.com/pohly) in
[https://github.com/kubernetes/klog/pull/366](https://github.com/kubernetes/klog/pull/366)
- ktesting improvements by [@&#8203;pohly](https://github.com/pohly)
in
[https://github.com/kubernetes/klog/pull/365](https://github.com/kubernetes/klog/pull/365)
- ktesting + textlogger config api by
[@&#8203;pohly](https://github.com/pohly) in
[https://github.com/kubernetes/klog/pull/368](https://github.com/kubernetes/klog/pull/368)
- textlogger write through by
[@&#8203;pohly](https://github.com/pohly) in
[https://github.com/kubernetes/klog/pull/363](https://github.com/kubernetes/klog/pull/363)

**Full Changelog**:
kubernetes/klog@v2.90.0...v2.90.1

###
[`v2.90.0`](https://github.com/kubernetes/klog/releases/tag/v2.90.0):
Prepare klog release for Kubernetes v1.27 (Take 1)

[Compare
Source](https://github.com/kubernetes/klog/compare/v2.80.1...v2.90.0)

#### What's Changed

- klog: benchmark the overhead when logging is off by
[@&#8203;pohly](https://github.com/pohly) in
[https://github.com/kubernetes/klog/pull/355](https://github.com/kubernetes/klog/pull/355)
- improve textlogger by [@&#8203;pohly](https://github.com/pohly) in
[https://github.com/kubernetes/klog/pull/362](https://github.com/kubernetes/klog/pull/362)

**Full Changelog**:
kubernetes/klog@v2.80.1...v2.90.0

##### There are some API differences from previous version

    k8s.io/klog/v2/klogr contains incompatible changes:
     - klogger.Enabled: removed
     - klogger.Error: removed
     - klogger.Info: removed

    k8s.io/klog/v2/test contains incompatible changes:
     - InitKlog: changed from func() to func(testing.TB) *flag.FlagSet

###
[`v2.80.1`](https://github.com/kubernetes/klog/releases/tag/v2.80.1):
Prepare klog release for Kubernetes v1.26 (Take 2)

[Compare
Source](https://github.com/kubernetes/klog/compare/v2.80.0...v2.80.1)

#### What's Changed

- InitFlags concurrency fix by
[@&#8203;pohly](https://github.com/pohly) in
[https://github.com/kubernetes/klog/pull/349](https://github.com/kubernetes/klog/pull/349)

**Full Changelog**:
kubernetes/klog@v2.80.0...v2.80.1

###
[`v2.80.0`](https://github.com/kubernetes/klog/releases/tag/v2.80.0):
Prepare klog release for Kubernetes v1.26 (Take 1)

[Compare
Source](https://github.com/kubernetes/klog/compare/v2.70.1...v2.80.0)

#### What's Changed

- OWNERS: add harshanarayana by
[@&#8203;pohly](https://github.com/pohly) in
[https://github.com/kubernetes/klog/pull/342](https://github.com/kubernetes/klog/pull/342)
- kvlistformat: fix the issue with display marshalled value for non
string type by
[@&#8203;harshanarayana](https://github.com/harshanarayana) in
[https://github.com/kubernetes/klog/pull/344](https://github.com/kubernetes/klog/pull/344)
- Bump version of golang to 1.19 and drop older versions by
[@&#8203;dims](https://github.com/dims) in
[https://github.com/kubernetes/klog/pull/345](https://github.com/kubernetes/klog/pull/345)

**Full Changelog**:
kubernetes/klog@v2.70.1...v2.80.0

###
[`v2.70.1`](https://github.com/kubernetes/klog/releases/tag/v2.70.1):
Prepare klog release for Kubernetes v1.25 (Take 2)

[Compare
Source](https://github.com/kubernetes/klog/compare/v2.70.0...v2.70.1)

#### What's Changed

- ktesting: handle test completion by
[@&#8203;pohly](https://github.com/pohly) in
[https://github.com/kubernetes/klog/pull/337](https://github.com/kubernetes/klog/pull/337)
- contextual logging: enable by default again by
[@&#8203;pohly](https://github.com/pohly) in
[https://github.com/kubernetes/klog/pull/341](https://github.com/kubernetes/klog/pull/341)

**Full Changelog**:
kubernetes/klog@v2.70.0...v2.70.1

###
[`v2.70.0`](https://github.com/kubernetes/klog/releases/tag/v2.70.0):
Prepare klog release for Kubernetes v1.25 (Take 1)

[Compare
Source](https://github.com/kubernetes/klog/compare/v2.60.1...v2.70.0)

#### What's Changed

- logcheck: contextual logging + enhanced checks by
[@&#8203;pohly](https://github.com/pohly) in
[https://github.com/kubernetes/klog/pull/297](https://github.com/kubernetes/klog/pull/297)
- hack/tools: drop dependency on golangci-lint by
[@&#8203;pohly](https://github.com/pohly) in
[https://github.com/kubernetes/klog/pull/313](https://github.com/kubernetes/klog/pull/313)
- StopFlushDaemon: document flushing on shutdown by
[@&#8203;pohly](https://github.com/pohly) in
[https://github.com/kubernetes/klog/pull/314](https://github.com/kubernetes/klog/pull/314)
- logcheck: fix detection of invalid \* regexp in filter by
[@&#8203;pohly](https://github.com/pohly) in
[https://github.com/kubernetes/klog/pull/315](https://github.com/kubernetes/klog/pull/315)
- README.md: clarify -logtostderr by
[@&#8203;pohly](https://github.com/pohly) in
[https://github.com/kubernetes/klog/pull/319](https://github.com/kubernetes/klog/pull/319)
- Trim duplicates by [@&#8203;pohly](https://github.com/pohly) in
[https://github.com/kubernetes/klog/pull/324](https://github.com/kubernetes/klog/pull/324)
- replace KObjs with KObjSlice by
[@&#8203;pohly](https://github.com/pohly) in
[https://github.com/kubernetes/klog/pull/322](https://github.com/kubernetes/klog/pull/322)
- support logr.Marshaler by [@&#8203;pohly](https://github.com/pohly)
in
[https://github.com/kubernetes/klog/pull/325](https://github.com/kubernetes/klog/pull/325)
- internal: remove unused TrimDuplicates by
[@&#8203;pohly](https://github.com/pohly) in
[https://github.com/kubernetes/klog/pull/326](https://github.com/kubernetes/klog/pull/326)
- save and restore state by [@&#8203;pohly](https://github.com/pohly)
in
[https://github.com/kubernetes/klog/pull/320](https://github.com/kubernetes/klog/pull/320)
- GitHub: use apidiff with more recent Go by
[@&#8203;pohly](https://github.com/pohly) in
[https://github.com/kubernetes/klog/pull/329](https://github.com/kubernetes/klog/pull/329)
- remove hack/tools by [@&#8203;pohly](https://github.com/pohly) in
[https://github.com/kubernetes/klog/pull/330](https://github.com/kubernetes/klog/pull/330)
- GIT-331: fix shadowing key from the kv pair by
[@&#8203;harshanarayana](https://github.com/harshanarayana) in
[https://github.com/kubernetes/klog/pull/332](https://github.com/kubernetes/klog/pull/332)
- klog.Fatal backtrace revert by
[@&#8203;pohly](https://github.com/pohly) in
[https://github.com/kubernetes/klog/pull/328](https://github.com/kubernetes/klog/pull/328)
- ktesting: capture log data in memory by
[@&#8203;pohly](https://github.com/pohly) in
[https://github.com/kubernetes/klog/pull/327](https://github.com/kubernetes/klog/pull/327)
- GIT-275: add tests for int and struct keys by
[@&#8203;harshanarayana](https://github.com/harshanarayana) in
[https://github.com/kubernetes/klog/pull/333](https://github.com/kubernetes/klog/pull/333)

#### New Contributors

- [@&#8203;harshanarayana](https://github.com/harshanarayana) made
their first contribution in
[https://github.com/kubernetes/klog/pull/332](https://github.com/kubernetes/klog/pull/332)

**Full Changelog**:
kubernetes/klog@v2.60.1...v2.70.0

###
[`v2.60.1`](https://github.com/kubernetes/klog/releases/tag/v2.60.1):
Prepare klog release for Kubernetes v1.24 (Take 6)

[Compare
Source](https://github.com/kubernetes/klog/compare/v2.60.0...v2.60.1)

#### What's Changed

- Cleanup OWNERS file by
[@&#8203;serathius](https://github.com/serathius) in
[https://github.com/kubernetes/klog/pull/309](https://github.com/kubernetes/klog/pull/309)
- dependencies: avoid k8s.io/utils, fork clock code instead by
[@&#8203;pohly](https://github.com/pohly) in
[https://github.com/kubernetes/klog/pull/310](https://github.com/kubernetes/klog/pull/310)
- promote contextual logging APIs to stable by
[@&#8203;pohly](https://github.com/pohly) in
[https://github.com/kubernetes/klog/pull/311](https://github.com/kubernetes/klog/pull/311)

**Full Changelog**:
kubernetes/klog@v2.60.0...v2.60.1

###
[`v2.60.0`](https://github.com/kubernetes/klog/releases/tag/v2.60.0):
Prepare klog release for Kubernetes v1.24 (Take 5)

[Compare
Source](https://github.com/kubernetes/klog/compare/v2.50.2...v2.60.0)

#### What's Changed

- SetContextualLogger: remove unintentionally merged API call by
[@&#8203;pohly](https://github.com/pohly) in
[https://github.com/kubernetes/klog/pull/308](https://github.com/kubernetes/klog/pull/308)

**Full Changelog**:
kubernetes/klog@v2.50.2...v2.60.0

###
[`v2.50.2`](https://github.com/kubernetes/klog/compare/v2.50.1...v2.50.2)

[Compare
Source](https://github.com/kubernetes/klog/compare/v2.50.1...v2.50.2)

###
[`v2.50.1`](https://github.com/kubernetes/klog/releases/tag/v2.50.1):
Prepare klog release for Kubernetes v1.24 (Take 4)

[Compare
Source](https://github.com/kubernetes/klog/compare/v2.50.0...v2.50.1)

#### What's Changed

- SetLoggerWithOptions: support flushing by
[@&#8203;pohly](https://github.com/pohly) in
[https://github.com/kubernetes/klog/pull/306](https://github.com/kubernetes/klog/pull/306)

**Full Changelog**:
kubernetes/klog@v2.50.0...v2.50.1

###
[`v2.50.0`](https://github.com/kubernetes/klog/releases/tag/v2.50.0):
Prepare klog release for Kubernetes v1.24 (Take 3)

[Compare
Source](https://github.com/kubernetes/klog/compare/v2.40.1...v2.50.0)

#### What's Changed

- Panic on empty info with custom logr by
[@&#8203;jklaw90](https://github.com/jklaw90) in
[https://github.com/kubernetes/klog/pull/283](https://github.com/kubernetes/klog/pull/283)
- Add missing Depth logging functions. by
[@&#8203;s3rj1k](https://github.com/s3rj1k) in
[https://github.com/kubernetes/klog/pull/280](https://github.com/kubernetes/klog/pull/280)
- fix typo in klog.go by
[@&#8203;cocaccola](https://github.com/cocaccola) in
[https://github.com/kubernetes/klog/pull/270](https://github.com/kubernetes/klog/pull/270)
- Update README.md by
[@&#8203;noaabarki](https://github.com/noaabarki) in
[https://github.com/kubernetes/klog/pull/281](https://github.com/kubernetes/klog/pull/281)
- log filter: ignored by V, used during log call by
[@&#8203;pohly](https://github.com/pohly) in
[https://github.com/kubernetes/klog/pull/290](https://github.com/kubernetes/klog/pull/290)
- SetLogger/ClearLogger/SetLogFilter cleanup by
[@&#8203;pohly](https://github.com/pohly) in
[https://github.com/kubernetes/klog/pull/289](https://github.com/kubernetes/klog/pull/289)
- fixes for PR
[#&#8203;280](https://github.com/kubernetes/klog/issues/280),
refactoring, textlogger, unit test by
[@&#8203;pohly](https://github.com/pohly) in
[https://github.com/kubernetes/klog/pull/287](https://github.com/kubernetes/klog/pull/287)
- klogr verbosity by [@&#8203;pohly](https://github.com/pohly) in
[https://github.com/kubernetes/klog/pull/295](https://github.com/kubernetes/klog/pull/295)
- test: fix Go version matrix by
[@&#8203;pohly](https://github.com/pohly) in
[https://github.com/kubernetes/klog/pull/298](https://github.com/kubernetes/klog/pull/298)
- handle panics in MarshalLog, Error, String by
[@&#8203;pohly](https://github.com/pohly) in
[https://github.com/kubernetes/klog/pull/299](https://github.com/kubernetes/klog/pull/299)
- Fix goroutine leak: make flushDaemon stoppable by
[@&#8203;katexochen](https://github.com/katexochen) in
[https://github.com/kubernetes/klog/pull/293](https://github.com/kubernetes/klog/pull/293)
- structured logging: replacing Fatal/Exit/etc. without loss of flushing
by [@&#8203;pohly](https://github.com/pohly) in
[https://github.com/kubernetes/klog/pull/303](https://github.com/kubernetes/klog/pull/303)
- contextual logging by [@&#8203;pohly](https://github.com/pohly) in
[https://github.com/kubernetes/klog/pull/296](https://github.com/kubernetes/klog/pull/296)
- remove side effects of tests by
[@&#8203;pohly](https://github.com/pohly) in
[https://github.com/kubernetes/klog/pull/305](https://github.com/kubernetes/klog/pull/305)
- tests: stop testing with Go 1.14 by
[@&#8203;pohly](https://github.com/pohly) in
[https://github.com/kubernetes/klog/pull/304](https://github.com/kubernetes/klog/pull/304)

#### New Contributors

- [@&#8203;jklaw90](https://github.com/jklaw90) made their first
contribution in
[https://github.com/kubernetes/klog/pull/283](https://github.com/kubernetes/klog/pull/283)
- [@&#8203;s3rj1k](https://github.com/s3rj1k) made their first
contribution in
[https://github.com/kubernetes/klog/pull/280](https://github.com/kubernetes/klog/pull/280)
- [@&#8203;cocaccola](https://github.com/cocaccola) made their first
contribution in
[https://github.com/kubernetes/klog/pull/270](https://github.com/kubernetes/klog/pull/270)
- [@&#8203;noaabarki](https://github.com/noaabarki) made their first
contribution in
[https://github.com/kubernetes/klog/pull/281](https://github.com/kubernetes/klog/pull/281)
- [@&#8203;katexochen](https://github.com/katexochen) made their first
contribution in
[https://github.com/kubernetes/klog/pull/293](https://github.com/kubernetes/klog/pull/293)

**Full Changelog**:
kubernetes/klog@v2.40.1...v2.50.0

###
[`v2.40.1`](https://github.com/kubernetes/klog/releases/tag/v2.40.1):
Prepare klog release for Kubernetes v1.24 (Take 2)

[Compare
Source](https://github.com/kubernetes/klog/compare/v2.40.0...v2.40.1)

#### What's Changed

- Using OS targeted go files to separate out the username logic. by
[@&#8203;phillipsj](https://github.com/phillipsj) in
[https://github.com/kubernetes/klog/pull/271](https://github.com/kubernetes/klog/pull/271)
- Recover from nil pointers when logging by
[@&#8203;dims](https://github.com/dims) in
[https://github.com/kubernetes/klog/pull/279](https://github.com/kubernetes/klog/pull/279)

#### New Contributors

- [@&#8203;phillipsj](https://github.com/phillipsj) made their first
contribution in
[https://github.com/kubernetes/klog/pull/271](https://github.com/kubernetes/klog/pull/271)

**Full Changelog**:
kubernetes/klog@v2.40.0...v2.40.1

###
[`v2.40.0`](https://github.com/kubernetes/klog/releases/tag/v2.40.0):
Prepare klog release for Kubernetes v1.24

[Compare
Source](https://github.com/kubernetes/klog/compare/v2.30.0...v2.40.0)

#### What's Changed

- structured logging: support values with line breaks by
[@&#8203;pohly](https://github.com/pohly) in
[https://github.com/kubernetes/klog/pull/273](https://github.com/kubernetes/klog/pull/273)
- Fix klog lock release on panic error by
[@&#8203;astraw99](https://github.com/astraw99) in
[https://github.com/kubernetes/klog/pull/272](https://github.com/kubernetes/klog/pull/272)
- add format test for KObjs by
[@&#8203;pohly](https://github.com/pohly) in
[https://github.com/kubernetes/klog/pull/276](https://github.com/kubernetes/klog/pull/276)
- add Verbose.InfoSDepth by [@&#8203;pohly](https://github.com/pohly)
in
[https://github.com/kubernetes/klog/pull/277](https://github.com/kubernetes/klog/pull/277)

#### Known Issues

-
[https://github.com/kubernetes/klog/issues/278](https://github.com/kubernetes/klog/issues/278)

#### New Contributors

- [@&#8203;astraw99](https://github.com/astraw99) made their first
contribution in
[https://github.com/kubernetes/klog/pull/272](https://github.com/kubernetes/klog/pull/272)

**Full Changelog**:
kubernetes/klog@v2.30.0...v2.40.0

###
[`v2.30.0`](https://github.com/kubernetes/klog/releases/tag/v2.30.0):
Prepare klog release for Kubernetes v1.23 (take 2)

[Compare
Source](https://github.com/kubernetes/klog/compare/v2.20.0...v2.30.0)

#### What's Changed

- Fix logcheck exit function by
[@&#8203;luyou86](https://github.com/luyou86) in
[https://github.com/kubernetes/klog/pull/265](https://github.com/kubernetes/klog/pull/265)
- custom marshaler for ObjectRef by
[@&#8203;pohly](https://github.com/pohly) in
[https://github.com/kubernetes/klog/pull/266](https://github.com/kubernetes/klog/pull/266)

#### New Contributors

- [@&#8203;luyou86](https://github.com/luyou86) made their first
contribution in
[https://github.com/kubernetes/klog/pull/265](https://github.com/kubernetes/klog/pull/265)

**Full Changelog**:
kubernetes/klog@v2.20.0...v2.30.0

###
[`v2.20.0`](https://github.com/kubernetes/klog/releases/tag/v2.20.0):
Prepare klog release for Kubernetes v1.23

[Compare
Source](https://github.com/kubernetes/klog/compare/v2.10.0...v2.20.0)

Changes are here :
kubernetes/klog@v2.10.0...v2.20.0

since we moved to logr v1.0.0, there are incompatible changes:

    - klogger.Enabled: changed from func() bool to func(int) bool
- klogger.Info: changed from func(string, ...interface{}) to func(int,
string, ...interface{})
    - klogger.V: removed
- klogger.WithCallDepth: changed from func(int)
github.com/go-logr/logr.Logger to func(int)
github.com/go-logr/logr.LogSink
- klogger.WithName: changed from func(string)
github.com/go-logr/logr.Logger to func(string)
github.com/go-logr/logr.LogSink
- klogger.WithValues: changed from func(...interface{})
github.com/go-logr/logr.Logger to func(...interface{})
github.com/go-logr/logr.LogSink

[`83653a6`](https://github.com/kubernetes/klog/commit/83653a6deebf)
Update to newest versions of golang 1.17.x
[`d648c2e`](https://github.com/kubernetes/klog/commit/d648c2e42d30)
fix file-based filtering symbolization
[`8ee3d65`](https://github.com/kubernetes/klog/commit/8ee3d652c96b)
export ClearLogger
[`4171f3c`](https://github.com/kubernetes/klog/commit/4171f3c1be1b)
Switching to logr tag v1.0.0
[`9ab3c2b`](https://github.com/kubernetes/klog/commit/9ab3c2b56cb2)
add serathius as approvers of klog

###
[`v2.10.0`](https://github.com/kubernetes/klog/releases/tag/v2.10.0):
One more change to support 1.22 release

[Compare
Source](https://github.com/kubernetes/klog/compare/v2.9.0...v2.10.0)

Changes are here :
kubernetes/klog@v2.9.0...v2.10.0

new function added:

    func KObjs(arg interface{}) []ObjectRef

###
[`v2.9.0`](https://github.com/kubernetes/klog/releases/tag/v2.9.0):
Prepare release for Kubernetes v1.22

[Compare
Source](https://github.com/kubernetes/klog/compare/v2.8.0...v2.9.0)

Changes are here :
kubernetes/klog@v2.8.0...v2.9.0

[`6a9ef3f`](https://github.com/kubernetes/klog/commit/6a9ef3fa9a15)
fix typo
[`59f7cb5`](https://github.com/kubernetes/klog/commit/59f7cb505f58)
fix byte array display in InfoS and ErrorS
[`cf22f1e`](https://github.com/kubernetes/klog/commit/cf22f1e79721)
Call logr with call depth
[`e95c7e3`](https://github.com/kubernetes/klog/commit/e95c7e303755)
make SetLogger thread-safe
[`2728fe1`](https://github.com/kubernetes/klog/commit/2728fe192acc)
check usage of format specifier in structured log func
[`a18bc97`](https://github.com/kubernetes/klog/commit/a18bc976a212)
Fix by pr suggestions
[`4e4135c`](https://github.com/kubernetes/klog/commit/4e4135c3dd8a)
Add check for InfoS & ErrorS parameters

###
[`v2.8.0`](https://github.com/kubernetes/klog/releases/tag/v2.8.0):
Bug fixes for structured logging for Kubernetes v1.21

[Compare
Source](https://github.com/kubernetes/klog/compare/v2.7.0...v2.8.0)

###
[`v2.7.0`](https://github.com/kubernetes/klog/releases/tag/v2.7.0):
Miscellaneous fixes for structured logging for Kubernetes v1.21

[Compare
Source](https://github.com/kubernetes/klog/compare/v2.6.0...v2.7.0)

Changes are here :
kubernetes/klog@v2.6.0...v2.7.0

###
[`v2.6.0`](https://github.com/kubernetes/klog/releases/tag/v2.6.0):
Adding a linter for Kubernetes v1.21

[Compare
Source](https://github.com/kubernetes/klog/compare/v2.5.0...v2.6.0)

Changes are here :
kubernetes/klog@v2.5.0...v2.6.0

please see
https://github.com/kubernetes/klog/tree/master/hack/tools/logcheck

###
[`v2.5.0`](https://github.com/kubernetes/klog/releases/tag/v2.5.0):
Prepare release for Kubernetes v1.21

[Compare
Source](https://github.com/kubernetes/klog/compare/v2.4.0...v2.5.0)

Changes are here :
kubernetes/klog@v2.4.0...v2.5.0

klog.go has new API:

+func ErrorSDepth(depth int, err error, msg string, keysAndValues
...interface{}) {
+func InfoSDepth(depth int, msg string, keysAndValues ...interface{}) {

klogr/klogr.go has new API:

    func (l klogger) WithCallDepth(depth int) logr.Logger {
    func NewWithOptions(options ...Option) logr.Logger {
    func WithFormat(format Format) Option {

###
[`v2.4.0`](https://github.com/kubernetes/klog/releases/tag/v2.4.0):
Prepare release for Kubernetes v1.20

[Compare
Source](https://github.com/kubernetes/klog/compare/v2.3.0...v2.4.0)

Changes are here :
kubernetes/klog@v2.3.0...v2.4.0

###
[`v2.3.0`](https://github.com/kubernetes/klog/releases/tag/v2.3.0):
Fix Typo-ed Method Error -&gt; ErrorS

[Compare
Source](https://github.com/kubernetes/klog/compare/v2.2.0...v2.3.0)

Changes are here :
kubernetes/klog@v2.2.0...v2.3.0

###
[`v2.2.0`](https://github.com/kubernetes/klog/releases/tag/v2.2.0):
Dependency update and bugfix for InfoS

[Compare
Source](https://github.com/kubernetes/klog/compare/2.1.0...v2.2.0)

- [`2e691eb`](https://github.com/kubernetes/klog/commit/2e691eb3eeb3)
Fix missing fields in verbose InfoS
- [`966c986`](https://github.com/kubernetes/klog/commit/966c98681ca0)
feat use go-logr v0.2.0

Changes are here :
kubernetes/klog@v2.1.0...v2.2.0

###
[`v2.1.0`](https://github.com/kubernetes/klog/releases/tag/v2.1.0):
Better support for Structured Logging

[Compare
Source](https://github.com/kubernetes/klog/compare/v2.0.0...2.1.0)

We are now enforcing API compatibility, added Windows based tests, and
have tweaked the structured logging methods after some real world
experience updating kubernetes main repo.

- [`bbd9ca1`](https://github.com/kubernetes/klog/commit/bbd9ca1) Add
tests for error in InfoS
- [`1ccc0e1`](https://github.com/kubernetes/klog/commit/1ccc0e1) fix
imported bug time encode format form kvlistFormat
- [`dd4d1a6`](https://github.com/kubernetes/klog/commit/dd4d1a6) fix
typo in README.md
- [`49123d4`](https://github.com/kubernetes/klog/commit/49123d4)
ErrorS(nil, ...) should call loggr.Error(nil, ...)
- [`5b199cd`](https://github.com/kubernetes/klog/commit/5b199cd) Fix
documentation for V(level)
- [`d1eb30f`](https://github.com/kubernetes/klog/commit/d1eb30f) Add
apidiff script to check go signature changes
- [`dc505bf`](https://github.com/kubernetes/klog/commit/dc505bf)
Switch slack channel to #klog
- [`a47ebb9`](https://github.com/kubernetes/klog/commit/a47ebb9) Add
example for co-existence of klog v1 and v2
- [`134f148`](https://github.com/kubernetes/klog/commit/134f148)
logName(): lazily lookup userName instead of on init()
- [`db06a1b`](https://github.com/kubernetes/klog/commit/db06a1b) fix
serialization of special html chars
- [`5727d2a`](https://github.com/kubernetes/klog/commit/5727d2a) Fix
Windows integration tests
- [`edbc1d3`](https://github.com/kubernetes/klog/commit/edbc1d3)
test(\*): TestRollover failed randomly on Windows
- [`6f99060`](https://github.com/kubernetes/klog/commit/6f99060) Add
LogToStderr, a programatic way to log exclusively to stderr or not

###
[`v2.0.0`](https://github.com/kubernetes/klog/releases/tag/v2.0.0):
Release to support Kubernetes v1.19

[Compare
Source](https://github.com/kubernetes/klog/compare/v1.0.0...v2.0.0)

Beware of type change: `Verbose`

New Methods:

-   `SetLogger` (override logger to set a custom implementation)
-   `InfoS` (structured logging)
-   `ErrorS` (structured logging)

Changes are here :
kubernetes/klog@v2.0.0-rc.1...v2.0.0

</details>

---

### Configuration

📅 **Schedule**: Branch creation - "on tuesday" (UTC), Automerge - At any
time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/open-telemetry/opentelemetry-collector-contrib).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy44Ny4yIiwidXBkYXRlZEluVmVyIjoiMzcuODcuMiIsInRhcmdldEJyYW5jaCI6Im1haW4ifQ==-->

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: opentelemetrybot <107717825+opentelemetrybot@users.noreply.github.com>
Co-authored-by: Yang Song <songy23@users.noreply.github.com>
Co-authored-by: Tyler Helmuth <12352919+TylerHelmuth@users.noreply.github.com>
cparkins referenced this pull request in AmadeusITGroup/opentelemetry-collector-contrib Jan 10, 2024
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [k8s.io/klog](https://github.com/kubernetes/klog) | require | major
| `v1.0.0` -> `v2.110.1` |

---

> [!WARNING]
> Some dependencies could not be looked up. Check the Dependency
Dashboard for more information.

---

### Release Notes

<details>
<summary>kubernetes/klog (k8s.io/klog)</summary>

###
[`v2.110.1`](https://github.com/kubernetes/klog/releases/tag/v2.110.1):
Prepare klog release for Kubernetes v1.29 (Take 1)

[Compare
Source](https://github.com/kubernetes/klog/compare/v2.100.1...v2.110.1)

#### What's Changed

- fix: SetLogger via klog.SetLogger will output an unexpected newline by
[@&open-telemetry#8203;aimuz](https://github.com/aimuz) in
[https://github.com/kubernetes/klog/pull/378](https://github.com/kubernetes/klog/pull/378)
- resolve comments warning by
[@&open-telemetry#8203;lowang-bh](https://github.com/lowang-bh) in
[https://github.com/kubernetes/klog/pull/379](https://github.com/kubernetes/klog/pull/379)
- stderrthreshold: fix flag comment by
[@&open-telemetry#8203;pohly](https://github.com/pohly) in
[https://github.com/kubernetes/klog/pull/376](https://github.com/kubernetes/klog/pull/376)
- enable "go vet" checks for parameters by
[@&open-telemetry#8203;pohly](https://github.com/pohly) in
[https://github.com/kubernetes/klog/pull/390](https://github.com/kubernetes/klog/pull/390)
- promote experimental code to stable by
[@&open-telemetry#8203;pohly](https://github.com/pohly) in
[https://github.com/kubernetes/klog/pull/392](https://github.com/kubernetes/klog/pull/392)
- golangci-lint action by [@&open-telemetry#8203;pohly](https://github.com/pohly) in
[https://github.com/kubernetes/klog/pull/380](https://github.com/kubernetes/klog/pull/380)
- output: handle WithName like zapr does by
[@&open-telemetry#8203;pohly](https://github.com/pohly) in
[https://github.com/kubernetes/klog/pull/391](https://github.com/kubernetes/klog/pull/391)
- slog support + logr 1.3.0 update by
[@&open-telemetry#8203;pohly](https://github.com/pohly) in
[https://github.com/kubernetes/klog/pull/384](https://github.com/kubernetes/klog/pull/384)

#### New Contributors

- [@&open-telemetry#8203;aimuz](https://github.com/aimuz) made their first
contribution in
[https://github.com/kubernetes/klog/pull/378](https://github.com/kubernetes/klog/pull/378)
- [@&open-telemetry#8203;lowang-bh](https://github.com/lowang-bh) made their first
contribution in
[https://github.com/kubernetes/klog/pull/379](https://github.com/kubernetes/klog/pull/379)

**Full Changelog**:
kubernetes/klog@v2.100.1...v2.110.1

###
[`v2.100.1`](https://github.com/kubernetes/klog/releases/tag/v2.100.1):
Prepare klog release for Kubernetes v1.28 (Take 1)

[Compare
Source](https://github.com/kubernetes/klog/compare/v2.90.1...v2.100.1)

#### What's Changed

- expose logBridge via NewStandardLog() by
[@&open-telemetry#8203;mikedanese](https://github.com/mikedanese) in
[https://github.com/kubernetes/klog/pull/369](https://github.com/kubernetes/klog/pull/369)
- add Format wrapper by [@&open-telemetry#8203;pohly](https://github.com/pohly) in
[https://github.com/kubernetes/klog/pull/374](https://github.com/kubernetes/klog/pull/374)
- JSON as fallback encoding by
[@&open-telemetry#8203;pohly](https://github.com/pohly) in
[https://github.com/kubernetes/klog/pull/375](https://github.com/kubernetes/klog/pull/375)

#### New Contributors

- [@&open-telemetry#8203;mikedanese](https://github.com/mikedanese) made their first
contribution in
[https://github.com/kubernetes/klog/pull/369](https://github.com/kubernetes/klog/pull/369)

**Full Changelog**:
kubernetes/klog@v2.90.1...v2.100.1

###
[`v2.90.1`](https://github.com/kubernetes/klog/releases/tag/v2.90.1):
Prepare klog release for Kubernetes v1.27 (Take 2)

[Compare
Source](https://github.com/kubernetes/klog/compare/v2.90.0...v2.90.1)

#### What's Changed

- buffer: restore dropping of too large buffers by
[@&open-telemetry#8203;pohly](https://github.com/pohly) in
[https://github.com/kubernetes/klog/pull/366](https://github.com/kubernetes/klog/pull/366)
- ktesting improvements by [@&open-telemetry#8203;pohly](https://github.com/pohly)
in
[https://github.com/kubernetes/klog/pull/365](https://github.com/kubernetes/klog/pull/365)
- ktesting + textlogger config api by
[@&open-telemetry#8203;pohly](https://github.com/pohly) in
[https://github.com/kubernetes/klog/pull/368](https://github.com/kubernetes/klog/pull/368)
- textlogger write through by
[@&open-telemetry#8203;pohly](https://github.com/pohly) in
[https://github.com/kubernetes/klog/pull/363](https://github.com/kubernetes/klog/pull/363)

**Full Changelog**:
kubernetes/klog@v2.90.0...v2.90.1

###
[`v2.90.0`](https://github.com/kubernetes/klog/releases/tag/v2.90.0):
Prepare klog release for Kubernetes v1.27 (Take 1)

[Compare
Source](https://github.com/kubernetes/klog/compare/v2.80.1...v2.90.0)

#### What's Changed

- klog: benchmark the overhead when logging is off by
[@&open-telemetry#8203;pohly](https://github.com/pohly) in
[https://github.com/kubernetes/klog/pull/355](https://github.com/kubernetes/klog/pull/355)
- improve textlogger by [@&open-telemetry#8203;pohly](https://github.com/pohly) in
[https://github.com/kubernetes/klog/pull/362](https://github.com/kubernetes/klog/pull/362)

**Full Changelog**:
kubernetes/klog@v2.80.1...v2.90.0

##### There are some API differences from previous version

    k8s.io/klog/v2/klogr contains incompatible changes:
     - klogger.Enabled: removed
     - klogger.Error: removed
     - klogger.Info: removed

    k8s.io/klog/v2/test contains incompatible changes:
     - InitKlog: changed from func() to func(testing.TB) *flag.FlagSet

###
[`v2.80.1`](https://github.com/kubernetes/klog/releases/tag/v2.80.1):
Prepare klog release for Kubernetes v1.26 (Take 2)

[Compare
Source](https://github.com/kubernetes/klog/compare/v2.80.0...v2.80.1)

#### What's Changed

- InitFlags concurrency fix by
[@&open-telemetry#8203;pohly](https://github.com/pohly) in
[https://github.com/kubernetes/klog/pull/349](https://github.com/kubernetes/klog/pull/349)

**Full Changelog**:
kubernetes/klog@v2.80.0...v2.80.1

###
[`v2.80.0`](https://github.com/kubernetes/klog/releases/tag/v2.80.0):
Prepare klog release for Kubernetes v1.26 (Take 1)

[Compare
Source](https://github.com/kubernetes/klog/compare/v2.70.1...v2.80.0)

#### What's Changed

- OWNERS: add harshanarayana by
[@&open-telemetry#8203;pohly](https://github.com/pohly) in
[https://github.com/kubernetes/klog/pull/342](https://github.com/kubernetes/klog/pull/342)
- kvlistformat: fix the issue with display marshalled value for non
string type by
[@&open-telemetry#8203;harshanarayana](https://github.com/harshanarayana) in
[https://github.com/kubernetes/klog/pull/344](https://github.com/kubernetes/klog/pull/344)
- Bump version of golang to 1.19 and drop older versions by
[@&open-telemetry#8203;dims](https://github.com/dims) in
[https://github.com/kubernetes/klog/pull/345](https://github.com/kubernetes/klog/pull/345)

**Full Changelog**:
kubernetes/klog@v2.70.1...v2.80.0

###
[`v2.70.1`](https://github.com/kubernetes/klog/releases/tag/v2.70.1):
Prepare klog release for Kubernetes v1.25 (Take 2)

[Compare
Source](https://github.com/kubernetes/klog/compare/v2.70.0...v2.70.1)

#### What's Changed

- ktesting: handle test completion by
[@&open-telemetry#8203;pohly](https://github.com/pohly) in
[https://github.com/kubernetes/klog/pull/337](https://github.com/kubernetes/klog/pull/337)
- contextual logging: enable by default again by
[@&open-telemetry#8203;pohly](https://github.com/pohly) in
[https://github.com/kubernetes/klog/pull/341](https://github.com/kubernetes/klog/pull/341)

**Full Changelog**:
kubernetes/klog@v2.70.0...v2.70.1

###
[`v2.70.0`](https://github.com/kubernetes/klog/releases/tag/v2.70.0):
Prepare klog release for Kubernetes v1.25 (Take 1)

[Compare
Source](https://github.com/kubernetes/klog/compare/v2.60.1...v2.70.0)

#### What's Changed

- logcheck: contextual logging + enhanced checks by
[@&open-telemetry#8203;pohly](https://github.com/pohly) in
[https://github.com/kubernetes/klog/pull/297](https://github.com/kubernetes/klog/pull/297)
- hack/tools: drop dependency on golangci-lint by
[@&open-telemetry#8203;pohly](https://github.com/pohly) in
[https://github.com/kubernetes/klog/pull/313](https://github.com/kubernetes/klog/pull/313)
- StopFlushDaemon: document flushing on shutdown by
[@&open-telemetry#8203;pohly](https://github.com/pohly) in
[https://github.com/kubernetes/klog/pull/314](https://github.com/kubernetes/klog/pull/314)
- logcheck: fix detection of invalid \* regexp in filter by
[@&open-telemetry#8203;pohly](https://github.com/pohly) in
[https://github.com/kubernetes/klog/pull/315](https://github.com/kubernetes/klog/pull/315)
- README.md: clarify -logtostderr by
[@&open-telemetry#8203;pohly](https://github.com/pohly) in
[https://github.com/kubernetes/klog/pull/319](https://github.com/kubernetes/klog/pull/319)
- Trim duplicates by [@&open-telemetry#8203;pohly](https://github.com/pohly) in
[https://github.com/kubernetes/klog/pull/324](https://github.com/kubernetes/klog/pull/324)
- replace KObjs with KObjSlice by
[@&open-telemetry#8203;pohly](https://github.com/pohly) in
[https://github.com/kubernetes/klog/pull/322](https://github.com/kubernetes/klog/pull/322)
- support logr.Marshaler by [@&open-telemetry#8203;pohly](https://github.com/pohly)
in
[https://github.com/kubernetes/klog/pull/325](https://github.com/kubernetes/klog/pull/325)
- internal: remove unused TrimDuplicates by
[@&open-telemetry#8203;pohly](https://github.com/pohly) in
[https://github.com/kubernetes/klog/pull/326](https://github.com/kubernetes/klog/pull/326)
- save and restore state by [@&open-telemetry#8203;pohly](https://github.com/pohly)
in
[https://github.com/kubernetes/klog/pull/320](https://github.com/kubernetes/klog/pull/320)
- GitHub: use apidiff with more recent Go by
[@&open-telemetry#8203;pohly](https://github.com/pohly) in
[https://github.com/kubernetes/klog/pull/329](https://github.com/kubernetes/klog/pull/329)
- remove hack/tools by [@&open-telemetry#8203;pohly](https://github.com/pohly) in
[https://github.com/kubernetes/klog/pull/330](https://github.com/kubernetes/klog/pull/330)
- GIT-331: fix shadowing key from the kv pair by
[@&open-telemetry#8203;harshanarayana](https://github.com/harshanarayana) in
[https://github.com/kubernetes/klog/pull/332](https://github.com/kubernetes/klog/pull/332)
- klog.Fatal backtrace revert by
[@&open-telemetry#8203;pohly](https://github.com/pohly) in
[https://github.com/kubernetes/klog/pull/328](https://github.com/kubernetes/klog/pull/328)
- ktesting: capture log data in memory by
[@&open-telemetry#8203;pohly](https://github.com/pohly) in
[https://github.com/kubernetes/klog/pull/327](https://github.com/kubernetes/klog/pull/327)
- GIT-275: add tests for int and struct keys by
[@&open-telemetry#8203;harshanarayana](https://github.com/harshanarayana) in
[https://github.com/kubernetes/klog/pull/333](https://github.com/kubernetes/klog/pull/333)

#### New Contributors

- [@&open-telemetry#8203;harshanarayana](https://github.com/harshanarayana) made
their first contribution in
[https://github.com/kubernetes/klog/pull/332](https://github.com/kubernetes/klog/pull/332)

**Full Changelog**:
kubernetes/klog@v2.60.1...v2.70.0

###
[`v2.60.1`](https://github.com/kubernetes/klog/releases/tag/v2.60.1):
Prepare klog release for Kubernetes v1.24 (Take 6)

[Compare
Source](https://github.com/kubernetes/klog/compare/v2.60.0...v2.60.1)

#### What's Changed

- Cleanup OWNERS file by
[@&open-telemetry#8203;serathius](https://github.com/serathius) in
[https://github.com/kubernetes/klog/pull/309](https://github.com/kubernetes/klog/pull/309)
- dependencies: avoid k8s.io/utils, fork clock code instead by
[@&open-telemetry#8203;pohly](https://github.com/pohly) in
[https://github.com/kubernetes/klog/pull/310](https://github.com/kubernetes/klog/pull/310)
- promote contextual logging APIs to stable by
[@&open-telemetry#8203;pohly](https://github.com/pohly) in
[https://github.com/kubernetes/klog/pull/311](https://github.com/kubernetes/klog/pull/311)

**Full Changelog**:
kubernetes/klog@v2.60.0...v2.60.1

###
[`v2.60.0`](https://github.com/kubernetes/klog/releases/tag/v2.60.0):
Prepare klog release for Kubernetes v1.24 (Take 5)

[Compare
Source](https://github.com/kubernetes/klog/compare/v2.50.2...v2.60.0)

#### What's Changed

- SetContextualLogger: remove unintentionally merged API call by
[@&open-telemetry#8203;pohly](https://github.com/pohly) in
[https://github.com/kubernetes/klog/pull/308](https://github.com/kubernetes/klog/pull/308)

**Full Changelog**:
kubernetes/klog@v2.50.2...v2.60.0

###
[`v2.50.2`](https://github.com/kubernetes/klog/compare/v2.50.1...v2.50.2)

[Compare
Source](https://github.com/kubernetes/klog/compare/v2.50.1...v2.50.2)

###
[`v2.50.1`](https://github.com/kubernetes/klog/releases/tag/v2.50.1):
Prepare klog release for Kubernetes v1.24 (Take 4)

[Compare
Source](https://github.com/kubernetes/klog/compare/v2.50.0...v2.50.1)

#### What's Changed

- SetLoggerWithOptions: support flushing by
[@&open-telemetry#8203;pohly](https://github.com/pohly) in
[https://github.com/kubernetes/klog/pull/306](https://github.com/kubernetes/klog/pull/306)

**Full Changelog**:
kubernetes/klog@v2.50.0...v2.50.1

###
[`v2.50.0`](https://github.com/kubernetes/klog/releases/tag/v2.50.0):
Prepare klog release for Kubernetes v1.24 (Take 3)

[Compare
Source](https://github.com/kubernetes/klog/compare/v2.40.1...v2.50.0)

#### What's Changed

- Panic on empty info with custom logr by
[@&open-telemetry#8203;jklaw90](https://github.com/jklaw90) in
[https://github.com/kubernetes/klog/pull/283](https://github.com/kubernetes/klog/pull/283)
- Add missing Depth logging functions. by
[@&open-telemetry#8203;s3rj1k](https://github.com/s3rj1k) in
[https://github.com/kubernetes/klog/pull/280](https://github.com/kubernetes/klog/pull/280)
- fix typo in klog.go by
[@&open-telemetry#8203;cocaccola](https://github.com/cocaccola) in
[https://github.com/kubernetes/klog/pull/270](https://github.com/kubernetes/klog/pull/270)
- Update README.md by
[@&open-telemetry#8203;noaabarki](https://github.com/noaabarki) in
[https://github.com/kubernetes/klog/pull/281](https://github.com/kubernetes/klog/pull/281)
- log filter: ignored by V, used during log call by
[@&open-telemetry#8203;pohly](https://github.com/pohly) in
[https://github.com/kubernetes/klog/pull/290](https://github.com/kubernetes/klog/pull/290)
- SetLogger/ClearLogger/SetLogFilter cleanup by
[@&open-telemetry#8203;pohly](https://github.com/pohly) in
[https://github.com/kubernetes/klog/pull/289](https://github.com/kubernetes/klog/pull/289)
- fixes for PR
[#&open-telemetry#8203;280](https://github.com/kubernetes/klog/issues/280),
refactoring, textlogger, unit test by
[@&open-telemetry#8203;pohly](https://github.com/pohly) in
[https://github.com/kubernetes/klog/pull/287](https://github.com/kubernetes/klog/pull/287)
- klogr verbosity by [@&open-telemetry#8203;pohly](https://github.com/pohly) in
[https://github.com/kubernetes/klog/pull/295](https://github.com/kubernetes/klog/pull/295)
- test: fix Go version matrix by
[@&open-telemetry#8203;pohly](https://github.com/pohly) in
[https://github.com/kubernetes/klog/pull/298](https://github.com/kubernetes/klog/pull/298)
- handle panics in MarshalLog, Error, String by
[@&open-telemetry#8203;pohly](https://github.com/pohly) in
[https://github.com/kubernetes/klog/pull/299](https://github.com/kubernetes/klog/pull/299)
- Fix goroutine leak: make flushDaemon stoppable by
[@&open-telemetry#8203;katexochen](https://github.com/katexochen) in
[https://github.com/kubernetes/klog/pull/293](https://github.com/kubernetes/klog/pull/293)
- structured logging: replacing Fatal/Exit/etc. without loss of flushing
by [@&open-telemetry#8203;pohly](https://github.com/pohly) in
[https://github.com/kubernetes/klog/pull/303](https://github.com/kubernetes/klog/pull/303)
- contextual logging by [@&open-telemetry#8203;pohly](https://github.com/pohly) in
[https://github.com/kubernetes/klog/pull/296](https://github.com/kubernetes/klog/pull/296)
- remove side effects of tests by
[@&open-telemetry#8203;pohly](https://github.com/pohly) in
[https://github.com/kubernetes/klog/pull/305](https://github.com/kubernetes/klog/pull/305)
- tests: stop testing with Go 1.14 by
[@&open-telemetry#8203;pohly](https://github.com/pohly) in
[https://github.com/kubernetes/klog/pull/304](https://github.com/kubernetes/klog/pull/304)

#### New Contributors

- [@&open-telemetry#8203;jklaw90](https://github.com/jklaw90) made their first
contribution in
[https://github.com/kubernetes/klog/pull/283](https://github.com/kubernetes/klog/pull/283)
- [@&open-telemetry#8203;s3rj1k](https://github.com/s3rj1k) made their first
contribution in
[https://github.com/kubernetes/klog/pull/280](https://github.com/kubernetes/klog/pull/280)
- [@&open-telemetry#8203;cocaccola](https://github.com/cocaccola) made their first
contribution in
[https://github.com/kubernetes/klog/pull/270](https://github.com/kubernetes/klog/pull/270)
- [@&open-telemetry#8203;noaabarki](https://github.com/noaabarki) made their first
contribution in
[https://github.com/kubernetes/klog/pull/281](https://github.com/kubernetes/klog/pull/281)
- [@&open-telemetry#8203;katexochen](https://github.com/katexochen) made their first
contribution in
[https://github.com/kubernetes/klog/pull/293](https://github.com/kubernetes/klog/pull/293)

**Full Changelog**:
kubernetes/klog@v2.40.1...v2.50.0

###
[`v2.40.1`](https://github.com/kubernetes/klog/releases/tag/v2.40.1):
Prepare klog release for Kubernetes v1.24 (Take 2)

[Compare
Source](https://github.com/kubernetes/klog/compare/v2.40.0...v2.40.1)

#### What's Changed

- Using OS targeted go files to separate out the username logic. by
[@&open-telemetry#8203;phillipsj](https://github.com/phillipsj) in
[https://github.com/kubernetes/klog/pull/271](https://github.com/kubernetes/klog/pull/271)
- Recover from nil pointers when logging by
[@&open-telemetry#8203;dims](https://github.com/dims) in
[https://github.com/kubernetes/klog/pull/279](https://github.com/kubernetes/klog/pull/279)

#### New Contributors

- [@&open-telemetry#8203;phillipsj](https://github.com/phillipsj) made their first
contribution in
[https://github.com/kubernetes/klog/pull/271](https://github.com/kubernetes/klog/pull/271)

**Full Changelog**:
kubernetes/klog@v2.40.0...v2.40.1

###
[`v2.40.0`](https://github.com/kubernetes/klog/releases/tag/v2.40.0):
Prepare klog release for Kubernetes v1.24

[Compare
Source](https://github.com/kubernetes/klog/compare/v2.30.0...v2.40.0)

#### What's Changed

- structured logging: support values with line breaks by
[@&open-telemetry#8203;pohly](https://github.com/pohly) in
[https://github.com/kubernetes/klog/pull/273](https://github.com/kubernetes/klog/pull/273)
- Fix klog lock release on panic error by
[@&open-telemetry#8203;astraw99](https://github.com/astraw99) in
[https://github.com/kubernetes/klog/pull/272](https://github.com/kubernetes/klog/pull/272)
- add format test for KObjs by
[@&open-telemetry#8203;pohly](https://github.com/pohly) in
[https://github.com/kubernetes/klog/pull/276](https://github.com/kubernetes/klog/pull/276)
- add Verbose.InfoSDepth by [@&open-telemetry#8203;pohly](https://github.com/pohly)
in
[https://github.com/kubernetes/klog/pull/277](https://github.com/kubernetes/klog/pull/277)

#### Known Issues

-
[https://github.com/kubernetes/klog/issues/278](https://github.com/kubernetes/klog/issues/278)

#### New Contributors

- [@&open-telemetry#8203;astraw99](https://github.com/astraw99) made their first
contribution in
[https://github.com/kubernetes/klog/pull/272](https://github.com/kubernetes/klog/pull/272)

**Full Changelog**:
kubernetes/klog@v2.30.0...v2.40.0

###
[`v2.30.0`](https://github.com/kubernetes/klog/releases/tag/v2.30.0):
Prepare klog release for Kubernetes v1.23 (take 2)

[Compare
Source](https://github.com/kubernetes/klog/compare/v2.20.0...v2.30.0)

#### What's Changed

- Fix logcheck exit function by
[@&open-telemetry#8203;luyou86](https://github.com/luyou86) in
[https://github.com/kubernetes/klog/pull/265](https://github.com/kubernetes/klog/pull/265)
- custom marshaler for ObjectRef by
[@&open-telemetry#8203;pohly](https://github.com/pohly) in
[https://github.com/kubernetes/klog/pull/266](https://github.com/kubernetes/klog/pull/266)

#### New Contributors

- [@&open-telemetry#8203;luyou86](https://github.com/luyou86) made their first
contribution in
[https://github.com/kubernetes/klog/pull/265](https://github.com/kubernetes/klog/pull/265)

**Full Changelog**:
kubernetes/klog@v2.20.0...v2.30.0

###
[`v2.20.0`](https://github.com/kubernetes/klog/releases/tag/v2.20.0):
Prepare klog release for Kubernetes v1.23

[Compare
Source](https://github.com/kubernetes/klog/compare/v2.10.0...v2.20.0)

Changes are here :
kubernetes/klog@v2.10.0...v2.20.0

since we moved to logr v1.0.0, there are incompatible changes:

    - klogger.Enabled: changed from func() bool to func(int) bool
- klogger.Info: changed from func(string, ...interface{}) to func(int,
string, ...interface{})
    - klogger.V: removed
- klogger.WithCallDepth: changed from func(int)
github.com/go-logr/logr.Logger to func(int)
github.com/go-logr/logr.LogSink
- klogger.WithName: changed from func(string)
github.com/go-logr/logr.Logger to func(string)
github.com/go-logr/logr.LogSink
- klogger.WithValues: changed from func(...interface{})
github.com/go-logr/logr.Logger to func(...interface{})
github.com/go-logr/logr.LogSink

[`83653a6`](https://github.com/kubernetes/klog/commit/83653a6deebf)
Update to newest versions of golang 1.17.x
[`d648c2e`](https://github.com/kubernetes/klog/commit/d648c2e42d30)
fix file-based filtering symbolization
[`8ee3d65`](https://github.com/kubernetes/klog/commit/8ee3d652c96b)
export ClearLogger
[`4171f3c`](https://github.com/kubernetes/klog/commit/4171f3c1be1b)
Switching to logr tag v1.0.0
[`9ab3c2b`](https://github.com/kubernetes/klog/commit/9ab3c2b56cb2)
add serathius as approvers of klog

###
[`v2.10.0`](https://github.com/kubernetes/klog/releases/tag/v2.10.0):
One more change to support 1.22 release

[Compare
Source](https://github.com/kubernetes/klog/compare/v2.9.0...v2.10.0)

Changes are here :
kubernetes/klog@v2.9.0...v2.10.0

new function added:

    func KObjs(arg interface{}) []ObjectRef

###
[`v2.9.0`](https://github.com/kubernetes/klog/releases/tag/v2.9.0):
Prepare release for Kubernetes v1.22

[Compare
Source](https://github.com/kubernetes/klog/compare/v2.8.0...v2.9.0)

Changes are here :
kubernetes/klog@v2.8.0...v2.9.0

[`6a9ef3f`](https://github.com/kubernetes/klog/commit/6a9ef3fa9a15)
fix typo
[`59f7cb5`](https://github.com/kubernetes/klog/commit/59f7cb505f58)
fix byte array display in InfoS and ErrorS
[`cf22f1e`](https://github.com/kubernetes/klog/commit/cf22f1e79721)
Call logr with call depth
[`e95c7e3`](https://github.com/kubernetes/klog/commit/e95c7e303755)
make SetLogger thread-safe
[`2728fe1`](https://github.com/kubernetes/klog/commit/2728fe192acc)
check usage of format specifier in structured log func
[`a18bc97`](https://github.com/kubernetes/klog/commit/a18bc976a212)
Fix by pr suggestions
[`4e4135c`](https://github.com/kubernetes/klog/commit/4e4135c3dd8a)
Add check for InfoS & ErrorS parameters

###
[`v2.8.0`](https://github.com/kubernetes/klog/releases/tag/v2.8.0):
Bug fixes for structured logging for Kubernetes v1.21

[Compare
Source](https://github.com/kubernetes/klog/compare/v2.7.0...v2.8.0)

###
[`v2.7.0`](https://github.com/kubernetes/klog/releases/tag/v2.7.0):
Miscellaneous fixes for structured logging for Kubernetes v1.21

[Compare
Source](https://github.com/kubernetes/klog/compare/v2.6.0...v2.7.0)

Changes are here :
kubernetes/klog@v2.6.0...v2.7.0

###
[`v2.6.0`](https://github.com/kubernetes/klog/releases/tag/v2.6.0):
Adding a linter for Kubernetes v1.21

[Compare
Source](https://github.com/kubernetes/klog/compare/v2.5.0...v2.6.0)

Changes are here :
kubernetes/klog@v2.5.0...v2.6.0

please see
https://github.com/kubernetes/klog/tree/master/hack/tools/logcheck

###
[`v2.5.0`](https://github.com/kubernetes/klog/releases/tag/v2.5.0):
Prepare release for Kubernetes v1.21

[Compare
Source](https://github.com/kubernetes/klog/compare/v2.4.0...v2.5.0)

Changes are here :
kubernetes/klog@v2.4.0...v2.5.0

klog.go has new API:

+func ErrorSDepth(depth int, err error, msg string, keysAndValues
...interface{}) {
+func InfoSDepth(depth int, msg string, keysAndValues ...interface{}) {

klogr/klogr.go has new API:

    func (l klogger) WithCallDepth(depth int) logr.Logger {
    func NewWithOptions(options ...Option) logr.Logger {
    func WithFormat(format Format) Option {

###
[`v2.4.0`](https://github.com/kubernetes/klog/releases/tag/v2.4.0):
Prepare release for Kubernetes v1.20

[Compare
Source](https://github.com/kubernetes/klog/compare/v2.3.0...v2.4.0)

Changes are here :
kubernetes/klog@v2.3.0...v2.4.0

###
[`v2.3.0`](https://github.com/kubernetes/klog/releases/tag/v2.3.0):
Fix Typo-ed Method Error -&gt; ErrorS

[Compare
Source](https://github.com/kubernetes/klog/compare/v2.2.0...v2.3.0)

Changes are here :
kubernetes/klog@v2.2.0...v2.3.0

###
[`v2.2.0`](https://github.com/kubernetes/klog/releases/tag/v2.2.0):
Dependency update and bugfix for InfoS

[Compare
Source](https://github.com/kubernetes/klog/compare/2.1.0...v2.2.0)

- [`2e691eb`](https://github.com/kubernetes/klog/commit/2e691eb3eeb3)
Fix missing fields in verbose InfoS
- [`966c986`](https://github.com/kubernetes/klog/commit/966c98681ca0)
feat use go-logr v0.2.0

Changes are here :
kubernetes/klog@v2.1.0...v2.2.0

###
[`v2.1.0`](https://github.com/kubernetes/klog/releases/tag/v2.1.0):
Better support for Structured Logging

[Compare
Source](https://github.com/kubernetes/klog/compare/v2.0.0...2.1.0)

We are now enforcing API compatibility, added Windows based tests, and
have tweaked the structured logging methods after some real world
experience updating kubernetes main repo.

- [`bbd9ca1`](https://github.com/kubernetes/klog/commit/bbd9ca1) Add
tests for error in InfoS
- [`1ccc0e1`](https://github.com/kubernetes/klog/commit/1ccc0e1) fix
imported bug time encode format form kvlistFormat
- [`dd4d1a6`](https://github.com/kubernetes/klog/commit/dd4d1a6) fix
typo in README.md
- [`49123d4`](https://github.com/kubernetes/klog/commit/49123d4)
ErrorS(nil, ...) should call loggr.Error(nil, ...)
- [`5b199cd`](https://github.com/kubernetes/klog/commit/5b199cd) Fix
documentation for V(level)
- [`d1eb30f`](https://github.com/kubernetes/klog/commit/d1eb30f) Add
apidiff script to check go signature changes
- [`dc505bf`](https://github.com/kubernetes/klog/commit/dc505bf)
Switch slack channel to #klog
- [`a47ebb9`](https://github.com/kubernetes/klog/commit/a47ebb9) Add
example for co-existence of klog v1 and v2
- [`134f148`](https://github.com/kubernetes/klog/commit/134f148)
logName(): lazily lookup userName instead of on init()
- [`db06a1b`](https://github.com/kubernetes/klog/commit/db06a1b) fix
serialization of special html chars
- [`5727d2a`](https://github.com/kubernetes/klog/commit/5727d2a) Fix
Windows integration tests
- [`edbc1d3`](https://github.com/kubernetes/klog/commit/edbc1d3)
test(\*): TestRollover failed randomly on Windows
- [`6f99060`](https://github.com/kubernetes/klog/commit/6f99060) Add
LogToStderr, a programatic way to log exclusively to stderr or not

###
[`v2.0.0`](https://github.com/kubernetes/klog/releases/tag/v2.0.0):
Release to support Kubernetes v1.19

[Compare
Source](https://github.com/kubernetes/klog/compare/v1.0.0...v2.0.0)

Beware of type change: `Verbose`

New Methods:

-   `SetLogger` (override logger to set a custom implementation)
-   `InfoS` (structured logging)
-   `ErrorS` (structured logging)

Changes are here :
kubernetes/klog@v2.0.0-rc.1...v2.0.0

</details>

---

### Configuration

📅 **Schedule**: Branch creation - "on tuesday" (UTC), Automerge - At any
time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/open-telemetry/opentelemetry-collector-contrib).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy44Ny4yIiwidXBkYXRlZEluVmVyIjoiMzcuODcuMiIsInRhcmdldEJyYW5jaCI6Im1haW4ifQ==-->

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: opentelemetrybot <107717825+opentelemetrybot@users.noreply.github.com>
Co-authored-by: Yang Song <songy23@users.noreply.github.com>
Co-authored-by: Tyler Helmuth <12352919+TylerHelmuth@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
approved Indicates a PR has been approved by an approver from all required OWNERS files. cncf-cla: yes Indicates the PR's author has signed the CNCF CLA. lgtm "Looks good to me", indicates that a PR is ready to be merged. needs-triage Indicates an issue or PR lacks a `triage/foo` label and requires one. size/L Denotes a PR that changes 100-499 lines, ignoring generated files.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants