Skip to content

GH-47774: [C++] Force-inline Status::~Status() to improve reading performance - #50749

Merged
pitrou merged 3 commits into
apache:mainfrom
zhf999:status-destruction
Oct 27, 2026
Merged

pitrou merged 3 commits into
apache:mainfrom
zhf999:status-destruction

Conversation

@zhf999

@zhf999 zhf999 commented Jul 31, 2026 •

Copy link
Copy Markdown
Contributor

Rationale for this change

Status is returned by nearly every API on hot paths (e.g. IPC/Parquet reading), so its destructor runs extremely frequently. The destructor body is already optimized for the common success case: it only checks state_ != NULL (with ARROW_PREDICT_FALSE) and returns immediately for an OK status, delegating the rare error cleanup to the out-of-line DeleteState().

However, without an explicit inlining hint, some compilers/optimization levels may not inline this destructor, turning the trivial state_ == NULL fast path into a real function call at every call site. Forcing it inline removes this call overhead on hot read paths and improves read throughput.

In our perf test (reads a parquet file of 6.7GB), Status::~Status cost about 20 seconds, as the following flamegraph shows:
image

After inlining Status::~Status, the hotspot disappeared. End-to-end latency was also reduced by 20 seconds, as expected.

image

What changes are included in this PR?

  • Annotate Status::~Status() in cpp/src/arrow/status.h with ARROW_FORCE_INLINE (__attribute__((always_inline)) inline on GCC/Clang, __forceinline on MSVC), so the cheap null-check fast path is always inlined while the cold error path still goes through the non-inlined DeleteState().

Are these changes tested?

Yes, by existing tests. This change does not alter any behavior of Status; the existing Status unit tests and the full C++ test suite cover it. The performance improvement can be observed with the existing read-path benchmarks.

Are there any user-facing changes?

No. This is an internal performance optimization with no API or behavior change.

Copilot AI review requested due to automatic review settings July 31, 2026 06:31
@zhf999
zhf999 requested a review from pitrou as a code owner July 31, 2026 06:31

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

@github-actions

Copy link
Copy Markdown

⚠️ GitHub issue #47774 has been automatically assigned in GitHub to PR creator.

@HuaHuaY

HuaHuaY commented Jul 31, 2026

Copy link
Copy Markdown
Contributor

@ursabot please benchmark lang=C++

@rok

rok commented Jul 31, 2026

Copy link
Copy Markdown
Member

Benchmark runs are scheduled for commit c445460. Watch https://buildkite.com/apache-arrow and https://conbench.arrow-dev.org for updates. A comment will be posted here when the runs are complete.

@HuaHuaY

HuaHuaY commented Jul 31, 2026

Copy link
Copy Markdown
Contributor

This PR looks interesting. I call the bot to run the benchmark and let's see whether there's a significant impact.

@conbench-apache-arrow

Copy link
Copy Markdown

Thanks for your patience. Conbench analyzed the 4 benchmarking runs that have been run so far on PR commit c445460.

There were 35 benchmark results indicating a performance regression:

The full Conbench report has more details.

@conbench-apache-arrow

Copy link
Copy Markdown

Thanks for your patience. Conbench analyzed the 4 benchmarking runs that have been run so far on PR commit c445460.

There were 35 benchmark results indicating a performance regression:

The full Conbench report has more details.

@conbench-apache-arrow

Copy link
Copy Markdown

Thanks for your patience. Conbench analyzed the 4 benchmarking runs that have been run so far on PR commit c445460.

There were 35 benchmark results indicating a performance regression:

The full Conbench report has more details.

@fanruan-tuco

fanruan-tuco commented Aug 5, 2026 •

Copy link
Copy Markdown

The representative benchmark is:
FloatRowMajorMatrixConversionFixture/
ConvertToSparseCSRMatrixInt64

The Conbench result is:

  • Regression: -31.1%

The remote benchmark was run on Skylake (about 2017)
For comparison, I ran the same benchmark locally on:

  • CPU: Intel Core i9-13900K
  • Microarchitecture: Raptor Lake (about 2021)
  • 24 cores / 32 threads
  • Compiler: GCC 13.3.0

The local A/B results were:

  • Round 1: +0.04%
  • Round 2: -0.29%
  • Round 3: +0.71%

The local result was therefore effectively unchanged

@fanruan-tuco

fanruan-tuco commented Aug 5, 2026 •

Copy link
Copy Markdown

I am not a CPU microarchitecture expert, so the following is only a hypothesis. I also used AI assistance while investigating it.

The possible issue is that forcing Status::~Status() to be always inlined changes the code layout of many callers. In the affected sparse-matrix conversion path, the hot loop appears to move by approximately 16 bytes while the loop
instructions remain almost identical. On Skylake, this could interact with instruction-cache/uop-cache behavior and 32-byte branch alignment, causing a large frontend penalty. This would also explain why I see a significant regression
on the Skylake-based m5 instance but no meaningful regression on my Raptor Lake system.

I would like to learn and provide more info about my local run if asks

@HuaHuaY

HuaHuaY commented Aug 5, 2026 •

Copy link
Copy Markdown
Contributor

There are significant improvements in some benchmarks, such as BM_ReadBinaryColumn and BM_ReadBinaryViewColumn at cpp/src/parquet/arrow/reader_writer_benchmark.cc. However, there are also some performance regressions, maybe forcing the inlining of destructors affected the instruction layout. Such as BinaryMathOpMultiply128, there isn't any Status but performance dropped by 49.59% in c6a benchmark.

machine z-score z < -3 z > 3 Not significant
m5 / Skylake 4704 202 500 4002
c6a / Zen 3 4614 464 563 3587
t4g / Neoverse N1 4487 276 249 3962
Mac / M1 4467 29 18 4420
total 18272 971(5.31%) 1330(7.28%) 15971(87.41%)

I use AI to summarize the results.

@pitrou Please take a look and help analyze whether these benchmark results are acceptable.

@HuaHuaY

HuaHuaY commented Oct 26, 2026

Copy link
Copy Markdown
Contributor

Ping @pitrou. I think it is a simple yet interesting change.

@pitrou
pitrou force-pushed the status-destruction branch from c445460 to 14c8d55 Compare October 26, 2026 14:33
Copilot AI balanced review requested due to automatic review settings October 26, 2026 14:33

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Copilot was unable to review this pull request because the user who requested the review has insufficient remaining quota.

@pitrou

pitrou commented Oct 26, 2026

Copy link
Copy Markdown
Member

@ursabot please benchmark

@rok

rok commented Oct 26, 2026

Copy link
Copy Markdown
Member

Benchmark runs are scheduled for commit 14c8d55. Watch https://buildkite.com/apache-arrow and https://conbench.arrow-dev.org for updates. A comment will be posted here when the runs are complete.

@pitrou

pitrou commented Oct 26, 2026

Copy link
Copy Markdown
Member

@github-actions crossbow submit -g cpp

@github-actions

Copy link
Copy Markdown

Revision: 14c8d55

Submitted crossbow builds: ursacomputing/crossbow @ actions-edf0518985

Task Status
example-cpp-minimal-build-static GitHub Actions
example-cpp-minimal-build-static-system-dependency GitHub Actions
example-cpp-tutorial GitHub Actions
test-build-cpp-fuzz GitHub Actions
test-conda-cpp GitHub Actions
test-conda-cpp-valgrind GitHub Actions
test-debian-13-cpp-amd64 GitHub Actions
test-debian-13-cpp-i386 GitHub Actions
test-debian-experimental-cpp-gcc-15 GitHub Actions
test-fedora-42-cpp GitHub Actions
test-ubuntu-22.04-cpp GitHub Actions
test-ubuntu-22.04-cpp-bundled GitHub Actions
test-ubuntu-22.04-cpp-emscripten GitHub Actions
test-ubuntu-22.04-cpp-no-threading GitHub Actions
test-ubuntu-24.04-cpp GitHub Actions
test-ubuntu-24.04-cpp-gcc-13-bundled GitHub Actions
test-ubuntu-24.04-cpp-gcc-14 GitHub Actions
test-ubuntu-24.04-cpp-minimal-with-formats GitHub Actions
test-ubuntu-24.04-cpp-thread-sanitizer GitHub Actions

@pitrou

pitrou commented Oct 26, 2026 •

Copy link
Copy Markdown
Member

I pushed an improvement to minimize the force-inlined portion of the destructor.

I see healthy benefits locally against git main (only running Parquet benchmarks here):

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Non-regressions: (146)
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
                                                                                 benchmark        baseline       contender  change %                                                                                                                                                                                                                                    counters
                                         BM_ArrowBinaryPlain/DecodeArrowNonNull_Dense/1024 473.553 MiB/sec 852.798 MiB/sec    80.085                                           {'family_index': 18, 'per_family_instance_index': 0, 'run_name': 'BM_ArrowBinaryPlain/DecodeArrowNonNull_Dense/1024', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 21669}
                                                BM_ArrowBinaryPlain/DecodeArrow_Dense/1024 477.469 MiB/sec 851.577 MiB/sec    78.352                                                  {'family_index': 17, 'per_family_instance_index': 0, 'run_name': 'BM_ArrowBinaryPlain/DecodeArrow_Dense/1024', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 21630}
                                         BM_ArrowBinaryPlain/DecodeArrowNonNull_Dense/4096 477.719 MiB/sec 810.202 MiB/sec    69.598                                            {'family_index': 18, 'per_family_instance_index': 1, 'run_name': 'BM_ArrowBinaryPlain/DecodeArrowNonNull_Dense/4096', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 5371}
                                                BM_ArrowBinaryPlain/DecodeArrow_Dense/4096 478.649 MiB/sec 810.894 MiB/sec    69.413                                                   {'family_index': 17, 'per_family_instance_index': 1, 'run_name': 'BM_ArrowBinaryPlain/DecodeArrow_Dense/4096', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 5354}
                                          BM_ArrowBinaryPlain/DecodeArrowNonNull_Dict/1024 203.770 MiB/sec 289.432 MiB/sec    42.038                                             {'family_index': 20, 'per_family_instance_index': 0, 'run_name': 'BM_ArrowBinaryPlain/DecodeArrowNonNull_Dict/1024', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 8741}
                                                 BM_ArrowBinaryPlain/DecodeArrow_Dict/1024 206.740 MiB/sec 289.166 MiB/sec    39.870                                                    {'family_index': 19, 'per_family_instance_index': 0, 'run_name': 'BM_ArrowBinaryPlain/DecodeArrow_Dict/1024', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 8797}
                                          BM_ArrowBinaryDict/DecodeArrowNonNull_Dense/1024 320.689 MiB/sec 444.468 MiB/sec    38.598                                            {'family_index': 24, 'per_family_instance_index': 0, 'run_name': 'BM_ArrowBinaryDict/DecodeArrowNonNull_Dense/1024', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 13340}
                                                BM_ArrowBinaryPlain/DecodeArrow_Dict/65536 162.582 MiB/sec 223.580 MiB/sec    37.518                                                    {'family_index': 19, 'per_family_instance_index': 3, 'run_name': 'BM_ArrowBinaryPlain/DecodeArrow_Dict/65536', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 111}
                                                 BM_ArrowBinaryDict/DecodeArrow_Dense/1024 321.983 MiB/sec 441.791 MiB/sec    37.209                                                   {'family_index': 23, 'per_family_instance_index': 0, 'run_name': 'BM_ArrowBinaryDict/DecodeArrow_Dense/1024', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 13466}
                                               BM_ArrowBinaryPlain/DecodeArrow_Dense/65536 458.196 MiB/sec 623.525 MiB/sec    36.082                                                   {'family_index': 17, 'per_family_instance_index': 3, 'run_name': 'BM_ArrowBinaryPlain/DecodeArrow_Dense/65536', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 345}
                                        BM_ArrowBinaryPlain/DecodeArrowNonNull_Dense/65536 459.367 MiB/sec 625.107 MiB/sec    36.080                                            {'family_index': 18, 'per_family_instance_index': 3, 'run_name': 'BM_ArrowBinaryPlain/DecodeArrowNonNull_Dense/65536', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 345}
                                               BM_ArrowBinaryPlain/DecodeArrow_Dense/32768 462.618 MiB/sec 628.093 MiB/sec    35.769                                                   {'family_index': 17, 'per_family_instance_index': 2, 'run_name': 'BM_ArrowBinaryPlain/DecodeArrow_Dense/32768', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 686}
                                        BM_ArrowBinaryPlain/DecodeArrowNonNull_Dense/32768 462.845 MiB/sec 627.744 MiB/sec    35.627                                            {'family_index': 18, 'per_family_instance_index': 2, 'run_name': 'BM_ArrowBinaryPlain/DecodeArrowNonNull_Dense/32768', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 626}
                                                 BM_ArrowBinaryPlain/DecodeArrow_Dict/4096 200.277 MiB/sec 269.128 MiB/sec    34.378                                                    {'family_index': 19, 'per_family_instance_index': 1, 'run_name': 'BM_ArrowBinaryPlain/DecodeArrow_Dict/4096', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 2321}
                                          BM_ArrowBinaryPlain/DecodeArrowNonNull_Dict/4096 200.206 MiB/sec 266.286 MiB/sec    33.006                                             {'family_index': 20, 'per_family_instance_index': 1, 'run_name': 'BM_ArrowBinaryPlain/DecodeArrowNonNull_Dict/4096', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 2324}
                                         BM_ArrowBinaryPlain/DecodeArrowNonNull_Dict/65536 168.882 MiB/sec 224.418 MiB/sec    32.885                                             {'family_index': 20, 'per_family_instance_index': 3, 'run_name': 'BM_ArrowBinaryPlain/DecodeArrowNonNull_Dict/65536', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 114}
                                          BM_ArrowBinaryDict/DecodeArrowNonNull_Dense/4096 319.144 MiB/sec 418.789 MiB/sec    31.223                                             {'family_index': 24, 'per_family_instance_index': 1, 'run_name': 'BM_ArrowBinaryDict/DecodeArrowNonNull_Dense/4096', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 3591}
                                                BM_ArrowBinaryPlain/DecodeArrow_Dict/32768 171.364 MiB/sec 223.769 MiB/sec    30.581                                                    {'family_index': 19, 'per_family_instance_index': 2, 'run_name': 'BM_ArrowBinaryPlain/DecodeArrow_Dict/32768', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 256}
                                         BM_ArrowBinaryPlain/DecodeArrowNonNull_Dict/32768 171.123 MiB/sec 223.090 MiB/sec    30.368                                             {'family_index': 20, 'per_family_instance_index': 2, 'run_name': 'BM_ArrowBinaryPlain/DecodeArrowNonNull_Dict/32768', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 254}
                                           BM_ArrowBinaryDict/DecodeArrowNonNull_Dict/1024 209.749 MiB/sec 268.922 MiB/sec    28.211                                              {'family_index': 26, 'per_family_instance_index': 0, 'run_name': 'BM_ArrowBinaryDict/DecodeArrowNonNull_Dict/1024', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 9113}
                                                  BM_ArrowBinaryDict/DecodeArrow_Dict/1024 210.414 MiB/sec 269.223 MiB/sec    27.949                                                     {'family_index': 25, 'per_family_instance_index': 0, 'run_name': 'BM_ArrowBinaryDict/DecodeArrow_Dict/1024', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 9339}
                                                 BM_ArrowBinaryDict/DecodeArrow_Dense/4096 329.116 MiB/sec 419.092 MiB/sec    27.338                                                    {'family_index': 23, 'per_family_instance_index': 1, 'run_name': 'BM_ArrowBinaryDict/DecodeArrow_Dense/4096', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 3836}
                                          BM_ArrowBinaryDict/DecodeArrowNonNull_Dict/65536 162.720 MiB/sec 197.644 MiB/sec    21.462                                              {'family_index': 26, 'per_family_instance_index': 3, 'run_name': 'BM_ArrowBinaryDict/DecodeArrowNonNull_Dict/65536', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 119}
                                           BM_ArrowBinaryDict/DecodeArrowNonNull_Dict/4096 215.177 MiB/sec 256.163 MiB/sec    19.048                                              {'family_index': 26, 'per_family_instance_index': 1, 'run_name': 'BM_ArrowBinaryDict/DecodeArrowNonNull_Dict/4096', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 2480}
                                         BM_ArrowBinaryDict/DecodeArrowNonNull_Dense/65536 300.673 MiB/sec 355.000 MiB/sec    18.069                                             {'family_index': 24, 'per_family_instance_index': 3, 'run_name': 'BM_ArrowBinaryDict/DecodeArrowNonNull_Dense/65536', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 229}
                                                  BM_ArrowBinaryDict/DecodeArrow_Dict/4096 216.986 MiB/sec 255.958 MiB/sec    17.960                                                     {'family_index': 25, 'per_family_instance_index': 1, 'run_name': 'BM_ArrowBinaryDict/DecodeArrow_Dict/4096', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 2520}
                                         BM_ArrowBinaryDict/DecodeArrowNonNull_Dense/32768 311.040 MiB/sec 363.989 MiB/sec    17.023                                             {'family_index': 24, 'per_family_instance_index': 2, 'run_name': 'BM_ArrowBinaryDict/DecodeArrowNonNull_Dense/32768', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 453}
                                                BM_ArrowBinaryDict/DecodeArrow_Dense/65536 304.985 MiB/sec 356.240 MiB/sec    16.806                                                    {'family_index': 23, 'per_family_instance_index': 3, 'run_name': 'BM_ArrowBinaryDict/DecodeArrow_Dense/65536', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 230}
                                             BM_ArrowBinaryViewDict/DecodeArrow_Dense/4096 281.543 MiB/sec 328.685 MiB/sec    16.744                                                {'family_index': 27, 'per_family_instance_index': 1, 'run_name': 'BM_ArrowBinaryViewDict/DecodeArrow_Dense/4096', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 3267}
                                          BM_ArrowBinaryDict/DecodeArrowNonNull_Dict/32768 180.424 MiB/sec 209.983 MiB/sec    16.383                                              {'family_index': 26, 'per_family_instance_index': 2, 'run_name': 'BM_ArrowBinaryDict/DecodeArrowNonNull_Dict/32768', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 272}
                                      BM_ArrowBinaryViewDict/DecodeArrowNonNull_Dense/1024 275.443 MiB/sec 319.933 MiB/sec    16.152                                        {'family_index': 28, 'per_family_instance_index': 0, 'run_name': 'BM_ArrowBinaryViewDict/DecodeArrowNonNull_Dense/1024', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 12171}
                                                 BM_ArrowBinaryDict/DecodeArrow_Dict/32768 180.987 MiB/sec 210.185 MiB/sec    16.133                                                     {'family_index': 25, 'per_family_instance_index': 2, 'run_name': 'BM_ArrowBinaryDict/DecodeArrow_Dict/32768', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 271}
                                            BM_ArrowBinaryViewDict/DecodeArrow_Dense/32768 272.720 MiB/sec 316.379 MiB/sec    16.009                                                {'family_index': 27, 'per_family_instance_index': 2, 'run_name': 'BM_ArrowBinaryViewDict/DecodeArrow_Dense/32768', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 406}
                                                BM_ArrowBinaryDict/DecodeArrow_Dense/32768 314.717 MiB/sec 364.399 MiB/sec    15.786                                                    {'family_index': 23, 'per_family_instance_index': 2, 'run_name': 'BM_ArrowBinaryDict/DecodeArrow_Dense/32768', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 450}
                                            BM_ArrowBinaryViewDict/DecodeArrow_Dense/65536 272.220 MiB/sec 314.476 MiB/sec    15.523                                                {'family_index': 27, 'per_family_instance_index': 3, 'run_name': 'BM_ArrowBinaryViewDict/DecodeArrow_Dense/65536', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 204}
                                            BM_ArrowBinaryViewPlain/DecodeArrow_Dense/1024 297.415 MiB/sec 343.068 MiB/sec    15.350                                              {'family_index': 21, 'per_family_instance_index': 0, 'run_name': 'BM_ArrowBinaryViewPlain/DecodeArrow_Dense/1024', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 12187}
                                            BM_ArrowBinaryViewPlain/DecodeArrow_Dense/4096 298.004 MiB/sec 343.591 MiB/sec    15.297                                               {'family_index': 21, 'per_family_instance_index': 1, 'run_name': 'BM_ArrowBinaryViewPlain/DecodeArrow_Dense/4096', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 3389}
                                    BM_ArrowBinaryViewPlain/DecodeArrowNonNull_Dense/32768 292.009 MiB/sec 336.433 MiB/sec    15.213                                        {'family_index': 22, 'per_family_instance_index': 2, 'run_name': 'BM_ArrowBinaryViewPlain/DecodeArrowNonNull_Dense/32768', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 418}
                                     BM_ArrowBinaryViewPlain/DecodeArrowNonNull_Dense/1024 297.599 MiB/sec 342.661 MiB/sec    15.142                                       {'family_index': 22, 'per_family_instance_index': 0, 'run_name': 'BM_ArrowBinaryViewPlain/DecodeArrowNonNull_Dense/1024', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 11420}
                                           BM_ArrowBinaryViewPlain/DecodeArrow_Dense/65536 290.591 MiB/sec 334.169 MiB/sec    14.996                                               {'family_index': 21, 'per_family_instance_index': 3, 'run_name': 'BM_ArrowBinaryViewPlain/DecodeArrow_Dense/65536', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 217}
                                                 BM_ArrowBinaryDict/DecodeArrow_Dict/65536 171.533 MiB/sec 196.923 MiB/sec    14.802                                                     {'family_index': 25, 'per_family_instance_index': 3, 'run_name': 'BM_ArrowBinaryDict/DecodeArrow_Dict/65536', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 125}
                                     BM_ArrowBinaryViewDict/DecodeArrowNonNull_Dense/65536 273.046 MiB/sec 313.393 MiB/sec    14.776                                         {'family_index': 28, 'per_family_instance_index': 3, 'run_name': 'BM_ArrowBinaryViewDict/DecodeArrowNonNull_Dense/65536', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 204}
                                             BM_ArrowBinaryViewDict/DecodeArrow_Dense/1024 275.806 MiB/sec 316.391 MiB/sec    14.715                                               {'family_index': 27, 'per_family_instance_index': 0, 'run_name': 'BM_ArrowBinaryViewDict/DecodeArrow_Dense/1024', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 12359}
                                           BM_ArrowBinaryViewPlain/DecodeArrow_Dense/32768 292.576 MiB/sec 335.394 MiB/sec    14.635                                               {'family_index': 21, 'per_family_instance_index': 2, 'run_name': 'BM_ArrowBinaryViewPlain/DecodeArrow_Dense/32768', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 421}
                                    BM_ArrowBinaryViewPlain/DecodeArrowNonNull_Dense/65536 290.524 MiB/sec 332.256 MiB/sec    14.364                                        {'family_index': 22, 'per_family_instance_index': 3, 'run_name': 'BM_ArrowBinaryViewPlain/DecodeArrowNonNull_Dense/65536', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 217}
                                      BM_ArrowBinaryViewDict/DecodeArrowNonNull_Dense/4096 283.122 MiB/sec 323.662 MiB/sec    14.319                                         {'family_index': 28, 'per_family_instance_index': 1, 'run_name': 'BM_ArrowBinaryViewDict/DecodeArrowNonNull_Dense/4096', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 3290}
                                     BM_ArrowBinaryViewPlain/DecodeArrowNonNull_Dense/4096 298.417 MiB/sec 340.739 MiB/sec    14.182                                        {'family_index': 22, 'per_family_instance_index': 1, 'run_name': 'BM_ArrowBinaryViewPlain/DecodeArrowNonNull_Dense/4096', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 3386}
                                     BM_ArrowBinaryViewDict/DecodeArrowNonNull_Dense/32768 276.317 MiB/sec 310.027 MiB/sec    12.200                                         {'family_index': 28, 'per_family_instance_index': 2, 'run_name': 'BM_ArrowBinaryViewDict/DecodeArrowNonNull_Dense/32768', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 411}
                                                 BM_DeltaBitPackingDecode_Int32_Fixed/1024   9.685 GiB/sec  10.373 GiB/sec     7.106                                                  {'family_index': 11, 'per_family_instance_index': 0, 'run_name': 'BM_DeltaBitPackingDecode_Int32_Fixed/1024', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 702092}
  BM_DecodeArrowBooleanPlain/DecodeArrowWithNull/num_values:1024/null_in_ten_thousand:5000  26.708 MiB/sec  27.777 MiB/sec     4.004   {'family_index': 34, 'per_family_instance_index': 12, 'run_name': 'BM_DecodeArrowBooleanPlain/DecodeArrowWithNull/num_values:1024/null_in_ten_thousand:5000', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 60661}
                                               BM_ByteStreamSplitDecode_Float_Generic/1024  20.772 GiB/sec  21.507 GiB/sec     3.537                                                {'family_index': 0, 'per_family_instance_index': 0, 'run_name': 'BM_ByteStreamSplitDecode_Float_Generic/1024', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 1517608}
                                                BM_DecodeArrowBooleanRle/DecodeArrow/65536 229.210 MiB/sec 236.429 MiB/sec     3.150                                                   {'family_index': 29, 'per_family_instance_index': 3, 'run_name': 'BM_DecodeArrowBooleanRle/DecodeArrow/65536', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 7873}
                                         BM_DecodeArrowBooleanRle/DecodeArrowNonNull/32768 229.513 MiB/sec 236.633 MiB/sec     3.102                                           {'family_index': 30, 'per_family_instance_index': 2, 'run_name': 'BM_DecodeArrowBooleanRle/DecodeArrowNonNull/32768', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 16440}
   BM_DecodeArrowBooleanRle/DecodeArrowWithNull/num_values:16384/null_in_ten_thousand:1000  20.387 MiB/sec  21.011 MiB/sec     3.058     {'family_index': 31, 'per_family_instance_index': 10, 'run_name': 'BM_DecodeArrowBooleanRle/DecodeArrowWithNull/num_values:16384/null_in_ten_thousand:1000', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 2962}
   BM_DecodeArrowBooleanRle/DecodeArrowWithNull/num_values:65536/null_in_ten_thousand:1000  19.355 MiB/sec  19.933 MiB/sec     2.988      {'family_index': 31, 'per_family_instance_index': 11, 'run_name': 'BM_DecodeArrowBooleanRle/DecodeArrowWithNull/num_values:65536/null_in_ten_thousand:1000', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 701}
                                                BM_DecodeArrowBooleanRle/DecodeArrow/32768 229.808 MiB/sec 236.481 MiB/sec     2.904                                                  {'family_index': 29, 'per_family_instance_index': 2, 'run_name': 'BM_DecodeArrowBooleanRle/DecodeArrow/32768', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 16487}
                                         BM_DecodeArrowBooleanRle/DecodeArrowNonNull/65536 229.830 MiB/sec 236.308 MiB/sec     2.818                                            {'family_index': 30, 'per_family_instance_index': 3, 'run_name': 'BM_DecodeArrowBooleanRle/DecodeArrowNonNull/65536', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 8008}
                                            BM_ByteStreamSplitDecode_FLBA_Generic<7>/65536   3.406 GiB/sec   3.499 GiB/sec     2.755                                                {'family_index': 3, 'per_family_instance_index': 1, 'run_name': 'BM_ByteStreamSplitDecode_FLBA_Generic<7>/65536', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 2243}
 BM_DecodeArrowBooleanPlain/DecodeArrowWithNull/num_values:65536/null_in_ten_thousand:1000  18.647 MiB/sec  19.152 MiB/sec     2.713    {'family_index': 34, 'per_family_instance_index': 11, 'run_name': 'BM_DecodeArrowBooleanPlain/DecodeArrowWithNull/num_values:65536/null_in_ten_thousand:1000', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 662}
    BM_DecodeArrowBooleanRle/DecodeArrowWithNull/num_values:16384/null_in_ten_thousand:100  23.133 MiB/sec  23.745 MiB/sec     2.644       {'family_index': 31, 'per_family_instance_index': 6, 'run_name': 'BM_DecodeArrowBooleanRle/DecodeArrowWithNull/num_values:16384/null_in_ten_thousand:100', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 3249}
                                              BM_ByteStreamSplitDecode_Float_Generic/65536  20.747 GiB/sec  21.272 GiB/sec     2.531                                                 {'family_index': 0, 'per_family_instance_index': 1, 'run_name': 'BM_ByteStreamSplitDecode_Float_Generic/65536', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 23599}
    BM_DecodeArrowBooleanRle/DecodeArrowWithNull/num_values:65536/null_in_ten_thousand:100  21.505 MiB/sec  22.009 MiB/sec     2.345        {'family_index': 31, 'per_family_instance_index': 7, 'run_name': 'BM_DecodeArrowBooleanRle/DecodeArrowWithNull/num_values:65536/null_in_ten_thousand:100', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 759}
                                                 BM_DeltaBitPackingDecode_Int32_Fixed/4096  11.794 GiB/sec  12.062 GiB/sec     2.274                                                  {'family_index': 11, 'per_family_instance_index': 1, 'run_name': 'BM_DeltaBitPackingDecode_Int32_Fixed/4096', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 216418}
                                             BM_ByteStreamSplitDecode_FLBA_Generic<7>/1024   3.444 GiB/sec   3.522 GiB/sec     2.273                                               {'family_index': 3, 'per_family_instance_index': 0, 'run_name': 'BM_ByteStreamSplitDecode_FLBA_Generic<7>/1024', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 144683}
      BM_DecodeArrowBooleanRle/DecodeArrowWithNull/num_values:16384/null_in_ten_thousand:1 228.676 MiB/sec 233.345 MiB/sec     2.042        {'family_index': 31, 'per_family_instance_index': 2, 'run_name': 'BM_DecodeArrowBooleanRle/DecodeArrowWithNull/num_values:16384/null_in_ten_thousand:1', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 32445}
 BM_DecodeArrowBooleanPlain/DecodeArrowWithNull/num_values:16384/null_in_ten_thousand:1000  20.442 MiB/sec  20.848 MiB/sec     1.983   {'family_index': 34, 'per_family_instance_index': 10, 'run_name': 'BM_DecodeArrowBooleanPlain/DecodeArrowWithNull/num_values:16384/null_in_ten_thousand:1000', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 2934}
 BM_DecodeArrowBooleanPlain/DecodeArrowWithNull/num_values:16384/null_in_ten_thousand:5000  18.947 MiB/sec  19.303 MiB/sec     1.877   {'family_index': 34, 'per_family_instance_index': 14, 'run_name': 'BM_DecodeArrowBooleanPlain/DecodeArrowWithNull/num_values:16384/null_in_ten_thousand:5000', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 2691}
                                          BM_DecodeArrowBooleanRle/DecodeArrowNonNull/4096 206.789 MiB/sec 210.636 MiB/sec     1.861                                           {'family_index': 30, 'per_family_instance_index': 1, 'run_name': 'BM_DecodeArrowBooleanRle/DecodeArrowNonNull/4096', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 115273}
  BM_DecodeArrowBooleanPlain/DecodeArrowWithNull/num_values:4096/null_in_ten_thousand:5000  28.871 MiB/sec  29.384 MiB/sec     1.776   {'family_index': 34, 'per_family_instance_index': 13, 'run_name': 'BM_DecodeArrowBooleanPlain/DecodeArrowWithNull/num_values:4096/null_in_ten_thousand:5000', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 16553}
     BM_DecodeArrowBooleanPlain/DecodeArrowWithNull/num_values:4096/null_in_ten_thousand:1   1.235 GiB/sec   1.257 GiB/sec     1.764      {'family_index': 34, 'per_family_instance_index': 1, 'run_name': 'BM_DecodeArrowBooleanPlain/DecodeArrowWithNull/num_values:4096/null_in_ten_thousand:1', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 733291}
     BM_DecodeArrowBooleanPlain/DecodeArrowWithNull/num_values:1024/null_in_ten_thousand:1 341.618 MiB/sec 347.112 MiB/sec     1.608      {'family_index': 34, 'per_family_instance_index': 0, 'run_name': 'BM_DecodeArrowBooleanPlain/DecodeArrowWithNull/num_values:1024/null_in_ten_thousand:1', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 774121}
   BM_DecodeArrowBooleanRle/DecodeArrowWithNull/num_values:16384/null_in_ten_thousand:5000  18.043 MiB/sec  18.324 MiB/sec     1.555     {'family_index': 31, 'per_family_instance_index': 14, 'run_name': 'BM_DecodeArrowBooleanRle/DecodeArrowWithNull/num_values:16384/null_in_ten_thousand:5000', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 2541}
       BM_DecodeArrowBooleanRle/DecodeArrowWithNull/num_values:4096/null_in_ten_thousand:1 206.516 MiB/sec 209.667 MiB/sec     1.526        {'family_index': 31, 'per_family_instance_index': 1, 'run_name': 'BM_DecodeArrowBooleanRle/DecodeArrowWithNull/num_values:4096/null_in_ten_thousand:1', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 115420}
      BM_DecodeArrowBooleanRle/DecodeArrowWithNull/num_values:65536/null_in_ten_thousand:1  21.604 MiB/sec  21.922 MiB/sec     1.470          {'family_index': 31, 'per_family_instance_index': 3, 'run_name': 'BM_DecodeArrowBooleanRle/DecodeArrowWithNull/num_values:65536/null_in_ten_thousand:1', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 793}
                                                  BM_DeltaBitPackingDecode_Int32_Wide/1024   2.855 GiB/sec   2.896 GiB/sec     1.458                                                   {'family_index': 15, 'per_family_instance_index': 0, 'run_name': 'BM_DeltaBitPackingDecode_Int32_Wide/1024', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 203301}
                                            BM_ByteStreamSplitDecode_FLBA_Generic<16>/1024   3.445 GiB/sec   3.489 GiB/sec     1.303                                               {'family_index': 4, 'per_family_instance_index': 0, 'run_name': 'BM_ByteStreamSplitDecode_FLBA_Generic<16>/1024', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 61894}
                                               BM_ByteStreamSplitDecode_Float_Scalar/65536   3.427 GiB/sec   3.469 GiB/sec     1.233                                                   {'family_index': 6, 'per_family_instance_index': 1, 'run_name': 'BM_ByteStreamSplitDecode_Float_Scalar/65536', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 3954}
                                            BM_ByteStreamSplitDecode_FLBA_Generic<2>/65536  54.917 GiB/sec  55.568 GiB/sec     1.185                                              {'family_index': 2, 'per_family_instance_index': 1, 'run_name': 'BM_ByteStreamSplitDecode_FLBA_Generic<2>/65536', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 123131}
  BM_DecodeArrowBooleanPlain/DecodeArrowWithNull/num_values:1024/null_in_ten_thousand:1000  32.209 MiB/sec  32.571 MiB/sec     1.123    {'family_index': 34, 'per_family_instance_index': 8, 'run_name': 'BM_DecodeArrowBooleanPlain/DecodeArrowWithNull/num_values:1024/null_in_ten_thousand:1000', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 73632}
                                              BM_ByteStreamSplitDecode_Double_Generic/1024  11.581 GiB/sec  11.704 GiB/sec     1.062                                                {'family_index': 1, 'per_family_instance_index': 0, 'run_name': 'BM_ByteStreamSplitDecode_Double_Generic/1024', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 422890}
                                           BM_ByteStreamSplitDecode_FLBA_Generic<16>/65536   3.178 GiB/sec   3.211 GiB/sec     1.044                                                {'family_index': 4, 'per_family_instance_index': 1, 'run_name': 'BM_ByteStreamSplitDecode_FLBA_Generic<16>/65536', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 891}
                                                BM_DeltaBitPackingDecode_Int64_Narrow/1024   7.596 GiB/sec   7.662 GiB/sec     0.867                                                 {'family_index': 14, 'per_family_instance_index': 0, 'run_name': 'BM_DeltaBitPackingDecode_Int64_Narrow/1024', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 272867}
                                                 BM_ByteStreamSplitDecode_Int16_Sse2/65536  51.449 GiB/sec  51.883 GiB/sec     0.843                                                   {'family_index': 8, 'per_family_instance_index': 1, 'run_name': 'BM_ByteStreamSplitDecode_Int16_Sse2/65536', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 118451}
                                                BM_DeltaBitPackingDecode_Int32_Narrow/1024   2.960 GiB/sec   2.983 GiB/sec     0.788                                                 {'family_index': 13, 'per_family_instance_index': 0, 'run_name': 'BM_DeltaBitPackingDecode_Int32_Narrow/1024', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 216091}
       BM_DecodeArrowBooleanRle/DecodeArrowWithNull/num_values:1024/null_in_ten_thousand:1 146.008 MiB/sec 147.044 MiB/sec     0.709        {'family_index': 31, 'per_family_instance_index': 0, 'run_name': 'BM_DecodeArrowBooleanRle/DecodeArrowWithNull/num_values:1024/null_in_ten_thousand:1', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 331960}
                                                 BM_DecodeArrowBooleanRle/DecodeArrow/1024 147.226 MiB/sec 148.254 MiB/sec     0.698                                                  {'family_index': 29, 'per_family_instance_index': 0, 'run_name': 'BM_DecodeArrowBooleanRle/DecodeArrow/1024', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 333052}
                                                BM_ByteStreamSplitDecode_Int16_Scalar/1024   3.457 GiB/sec   3.481 GiB/sec     0.687                                                  {'family_index': 5, 'per_family_instance_index': 0, 'run_name': 'BM_ByteStreamSplitDecode_Int16_Scalar/1024', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 507067}
                                             BM_ByteStreamSplitDecode_FLBA_Generic<2>/1024  61.997 GiB/sec  62.397 GiB/sec     0.646                                              {'family_index': 2, 'per_family_instance_index': 0, 'run_name': 'BM_ByteStreamSplitDecode_FLBA_Generic<2>/1024', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 8924315}
                                               BM_ByteStreamSplitDecode_Int16_Scalar/65536   3.455 GiB/sec   3.477 GiB/sec     0.630                                                   {'family_index': 5, 'per_family_instance_index': 1, 'run_name': 'BM_ByteStreamSplitDecode_Int16_Scalar/65536', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 7820}
                                                  BM_ByteStreamSplitDecode_Int16_Sse2/1024  52.389 GiB/sec  52.708 GiB/sec     0.609                                                   {'family_index': 8, 'per_family_instance_index': 0, 'run_name': 'BM_ByteStreamSplitDecode_Int16_Sse2/1024', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 7643824}
    BM_DecodeArrowBooleanRle/DecodeArrowWithNull/num_values:1024/null_in_ten_thousand:5000  33.038 MiB/sec  33.238 MiB/sec     0.605     {'family_index': 31, 'per_family_instance_index': 12, 'run_name': 'BM_DecodeArrowBooleanRle/DecodeArrowWithNull/num_values:1024/null_in_ten_thousand:5000', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 73585}
                                                BM_ByteStreamSplitDecode_Double_Sse2/65536   8.500 GiB/sec   8.551 GiB/sec     0.594                                                   {'family_index': 10, 'per_family_instance_index': 1, 'run_name': 'BM_ByteStreamSplitDecode_Double_Sse2/65536', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 4886}
                                                  BM_ByteStreamSplitDecode_Float_Sse2/1024  17.636 GiB/sec  17.731 GiB/sec     0.536                                                   {'family_index': 9, 'per_family_instance_index': 0, 'run_name': 'BM_ByteStreamSplitDecode_Float_Sse2/1024', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 1280194}
     BM_DecodeArrowBooleanRle/DecodeArrowWithNull/num_values:1024/null_in_ten_thousand:100  36.364 MiB/sec  36.554 MiB/sec     0.524       {'family_index': 31, 'per_family_instance_index': 4, 'run_name': 'BM_DecodeArrowBooleanRle/DecodeArrowWithNull/num_values:1024/null_in_ten_thousand:100', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 79388}
                                               BM_DeltaBitPackingDecode_Int32_Narrow/65536   3.166 GiB/sec   3.181 GiB/sec     0.480                                                  {'family_index': 13, 'per_family_instance_index': 3, 'run_name': 'BM_DeltaBitPackingDecode_Int32_Narrow/65536', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 3529}
                                             BM_ByteStreamSplitDecode_Double_Generic/65536  11.447 GiB/sec  11.501 GiB/sec     0.470                                                 {'family_index': 1, 'per_family_instance_index': 1, 'run_name': 'BM_ByteStreamSplitDecode_Double_Generic/65536', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 6552}
   BM_DecodeArrowBooleanRle/DecodeArrowWithNull/num_values:1024/null_in_ten_thousand:10000 357.720 MiB/sec 359.340 MiB/sec     0.453   {'family_index': 31, 'per_family_instance_index': 16, 'run_name': 'BM_DecodeArrowBooleanRle/DecodeArrowWithNull/num_values:1024/null_in_ten_thousand:10000', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 816391}
  BM_DecodeArrowBooleanPlain/DecodeArrowWithNull/num_values:4096/null_in_ten_thousand:1000  34.477 MiB/sec  34.633 MiB/sec     0.452    {'family_index': 34, 'per_family_instance_index': 9, 'run_name': 'BM_DecodeArrowBooleanPlain/DecodeArrowWithNull/num_values:4096/null_in_ten_thousand:1000', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 19780}
                                                BM_DeltaBitPackingDecode_Int32_Fixed/32768  12.543 GiB/sec  12.599 GiB/sec     0.450                                                  {'family_index': 11, 'per_family_instance_index': 2, 'run_name': 'BM_DeltaBitPackingDecode_Int32_Fixed/32768', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 28724}
                                       BM_DecodeArrowBooleanPlain/DecodeArrowNonNull/65536   8.772 GiB/sec   8.812 GiB/sec     0.447                                        {'family_index': 33, 'per_family_instance_index': 3, 'run_name': 'BM_DecodeArrowBooleanPlain/DecodeArrowNonNull/65536', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 327163}
                                                 BM_DeltaBitPackingDecode_Int64_Fixed/4096  13.415 GiB/sec  13.468 GiB/sec     0.396                                                  {'family_index': 12, 'per_family_instance_index': 1, 'run_name': 'BM_DeltaBitPackingDecode_Int64_Fixed/4096', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 121394}
                                          BM_DecodeArrowBooleanRle/DecodeArrowNonNull/1024 147.203 MiB/sec 147.786 MiB/sec     0.395                                           {'family_index': 30, 'per_family_instance_index': 0, 'run_name': 'BM_DecodeArrowBooleanRle/DecodeArrowNonNull/1024', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 333578}
                                                 BM_ByteStreamSplitDecode_Double_Sse2/1024   8.714 GiB/sec   8.747 GiB/sec     0.378                                                  {'family_index': 10, 'per_family_instance_index': 0, 'run_name': 'BM_ByteStreamSplitDecode_Double_Sse2/1024', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 319056}
                                               BM_DeltaBitPackingDecode_Int32_Narrow/32768   3.173 GiB/sec   3.185 GiB/sec     0.372                                                  {'family_index': 13, 'per_family_instance_index': 2, 'run_name': 'BM_DeltaBitPackingDecode_Int32_Narrow/32768', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 6946}
                                                BM_DeltaBitPackingDecode_Int64_Fixed/32768  13.729 GiB/sec  13.777 GiB/sec     0.350                                                  {'family_index': 12, 'per_family_instance_index': 2, 'run_name': 'BM_DeltaBitPackingDecode_Int64_Fixed/32768', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 15760}
                                              BM_DecodeArrowBooleanPlain/DecodeArrow/32768   6.088 GiB/sec   6.108 GiB/sec     0.325                                               {'family_index': 32, 'per_family_instance_index': 2, 'run_name': 'BM_DecodeArrowBooleanPlain/DecodeArrow/32768', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 447361}
   BM_DecodeArrowBooleanRle/DecodeArrowWithNull/num_values:65536/null_in_ten_thousand:5000  15.546 MiB/sec  15.588 MiB/sec     0.268      {'family_index': 31, 'per_family_instance_index': 15, 'run_name': 'BM_DecodeArrowBooleanRle/DecodeArrowWithNull/num_values:65536/null_in_ten_thousand:5000', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 559}
  BM_DecodeArrowBooleanRle/DecodeArrowWithNull/num_values:16384/null_in_ten_thousand:10000   4.482 GiB/sec   4.494 GiB/sec     0.247  {'family_index': 31, 'per_family_instance_index': 18, 'run_name': 'BM_DecodeArrowBooleanRle/DecodeArrowWithNull/num_values:16384/null_in_ten_thousand:10000', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 665808}
                                                 BM_DeltaBitPackingDecode_Int64_Fixed/1024  12.618 GiB/sec  12.647 GiB/sec     0.230                                                  {'family_index': 12, 'per_family_instance_index': 0, 'run_name': 'BM_DeltaBitPackingDecode_Int64_Fixed/1024', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 456998}
                                                BM_DeltaBitPackingDecode_Int32_Narrow/4096   3.137 GiB/sec   3.142 GiB/sec     0.151                                                  {'family_index': 13, 'per_family_instance_index': 1, 'run_name': 'BM_DeltaBitPackingDecode_Int32_Narrow/4096', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 57422}
    BM_DecodeArrowBooleanPlain/DecodeArrowWithNull/num_values:16384/null_in_ten_thousand:1   3.880 GiB/sec   3.885 GiB/sec     0.149     {'family_index': 34, 'per_family_instance_index': 2, 'run_name': 'BM_DecodeArrowBooleanPlain/DecodeArrowWithNull/num_values:16384/null_in_ten_thousand:1', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 566527}
                                                BM_ByteStreamSplitDecode_Float_Scalar/1024   3.484 GiB/sec   3.488 GiB/sec     0.115                                                  {'family_index': 6, 'per_family_instance_index': 0, 'run_name': 'BM_ByteStreamSplitDecode_Float_Scalar/1024', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 253297}
                                               BM_ByteStreamSplitDecode_Double_Scalar/1024   3.481 GiB/sec   3.484 GiB/sec     0.091                                                 {'family_index': 7, 'per_family_instance_index': 0, 'run_name': 'BM_ByteStreamSplitDecode_Double_Scalar/1024', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 124457}
                                                  BM_DeltaBitPackingDecode_Int32_Wide/4096   2.977 GiB/sec   2.977 GiB/sec     0.006                                                    {'family_index': 15, 'per_family_instance_index': 1, 'run_name': 'BM_DeltaBitPackingDecode_Int32_Wide/4096', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 50434}
                                                BM_DeltaBitPackingDecode_Int32_Fixed/65536  12.627 GiB/sec  12.618 GiB/sec    -0.070                                                  {'family_index': 11, 'per_family_instance_index': 3, 'run_name': 'BM_DeltaBitPackingDecode_Int32_Fixed/65536', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 14499}
                                                BM_DeltaBitPackingDecode_Int64_Narrow/4096   7.957 GiB/sec   7.951 GiB/sec    -0.073                                                  {'family_index': 14, 'per_family_instance_index': 1, 'run_name': 'BM_DeltaBitPackingDecode_Int64_Narrow/4096', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 70621}
                                                 BM_DeltaBitPackingDecode_Int32_Wide/65536   3.003 GiB/sec   2.996 GiB/sec    -0.257                                                    {'family_index': 15, 'per_family_instance_index': 3, 'run_name': 'BM_DeltaBitPackingDecode_Int32_Wide/65536', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 3398}
                                                 BM_ByteStreamSplitDecode_Float_Sse2/65536  17.783 GiB/sec  17.730 GiB/sec    -0.295                                                    {'family_index': 9, 'per_family_instance_index': 1, 'run_name': 'BM_ByteStreamSplitDecode_Float_Sse2/65536', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 20291}
   BM_DecodeArrowBooleanRle/DecodeArrowWithNull/num_values:4096/null_in_ten_thousand:10000   1.343 GiB/sec   1.339 GiB/sec    -0.336   {'family_index': 31, 'per_family_instance_index': 17, 'run_name': 'BM_DecodeArrowBooleanRle/DecodeArrowWithNull/num_values:4096/null_in_ten_thousand:10000', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 777653}
BM_DecodeArrowBooleanPlain/DecodeArrowWithNull/num_values:65536/null_in_ten_thousand:10000 390.364 MiB/sec 388.984 MiB/sec    -0.354 {'family_index': 34, 'per_family_instance_index': 19, 'run_name': 'BM_DecodeArrowBooleanPlain/DecodeArrowWithNull/num_values:65536/null_in_ten_thousand:10000', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 13587}
                                                 BM_DeltaBitPackingDecode_Int32_Wide/32768   3.020 GiB/sec   3.007 GiB/sec    -0.429                                                    {'family_index': 15, 'per_family_instance_index': 2, 'run_name': 'BM_DeltaBitPackingDecode_Int32_Wide/32768', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 6272}
                                              BM_ByteStreamSplitDecode_Double_Scalar/65536   3.350 GiB/sec   3.336 GiB/sec    -0.435                                                  {'family_index': 7, 'per_family_instance_index': 1, 'run_name': 'BM_ByteStreamSplitDecode_Double_Scalar/65536', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 1902}
                                                 BM_DecodeArrowBooleanRle/DecodeArrow/4096 206.328 MiB/sec 205.420 MiB/sec    -0.440                                                  {'family_index': 29, 'per_family_instance_index': 1, 'run_name': 'BM_DecodeArrowBooleanRle/DecodeArrow/4096', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 114574}
                                               BM_DeltaBitPackingDecode_Int64_Narrow/32768   8.147 GiB/sec   8.110 GiB/sec    -0.452                                                  {'family_index': 14, 'per_family_instance_index': 2, 'run_name': 'BM_DeltaBitPackingDecode_Int64_Narrow/32768', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 9267}
                                                BM_DeltaBitPackingDecode_Int64_Fixed/65536  13.757 GiB/sec  13.695 GiB/sec    -0.454                                                   {'family_index': 12, 'per_family_instance_index': 3, 'run_name': 'BM_DeltaBitPackingDecode_Int64_Fixed/65536', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 7824}
                                               BM_DecodeArrowBooleanPlain/DecodeArrow/4096   1.254 GiB/sec   1.248 GiB/sec    -0.477                                                {'family_index': 32, 'per_family_instance_index': 1, 'run_name': 'BM_DecodeArrowBooleanPlain/DecodeArrow/4096', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 693870}
BM_DecodeArrowBooleanPlain/DecodeArrowWithNull/num_values:16384/null_in_ten_thousand:10000 369.470 MiB/sec 367.562 MiB/sec    -0.516 {'family_index': 34, 'per_family_instance_index': 18, 'run_name': 'BM_DecodeArrowBooleanPlain/DecodeArrowWithNull/num_values:16384/null_in_ten_thousand:10000', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 52580}
                                                 BM_DeltaBitPackingDecode_Int64_Wide/65536   6.659 GiB/sec   6.622 GiB/sec    -0.553                                                    {'family_index': 16, 'per_family_instance_index': 3, 'run_name': 'BM_DeltaBitPackingDecode_Int64_Wide/65536', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 3828}
 BM_DecodeArrowBooleanPlain/DecodeArrowWithNull/num_values:65536/null_in_ten_thousand:5000  16.013 MiB/sec  15.923 MiB/sec    -0.562    {'family_index': 34, 'per_family_instance_index': 15, 'run_name': 'BM_DecodeArrowBooleanPlain/DecodeArrowWithNull/num_values:65536/null_in_ten_thousand:5000', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 571}
                                        BM_DecodeArrowBooleanPlain/DecodeArrowNonNull/1024 346.122 MiB/sec 344.154 MiB/sec    -0.569                                         {'family_index': 33, 'per_family_instance_index': 0, 'run_name': 'BM_DecodeArrowBooleanPlain/DecodeArrowNonNull/1024', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 791768}
                                                 BM_DeltaBitPackingDecode_Int64_Wide/32768   6.704 GiB/sec   6.663 GiB/sec    -0.607                                                    {'family_index': 16, 'per_family_instance_index': 2, 'run_name': 'BM_DeltaBitPackingDecode_Int64_Wide/32768', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 7154}
                                                  BM_DeltaBitPackingDecode_Int64_Wide/4096   6.657 GiB/sec   6.605 GiB/sec    -0.781                                                    {'family_index': 16, 'per_family_instance_index': 1, 'run_name': 'BM_DeltaBitPackingDecode_Int64_Wide/4096', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 57287}
                                                  BM_DeltaBitPackingDecode_Int64_Wide/1024   6.345 GiB/sec   6.290 GiB/sec    -0.866                                                   {'family_index': 16, 'per_family_instance_index': 0, 'run_name': 'BM_DeltaBitPackingDecode_Int64_Wide/1024', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 229716}
    BM_DecodeArrowBooleanRle/DecodeArrowWithNull/num_values:4096/null_in_ten_thousand:5000  36.039 MiB/sec  35.703 MiB/sec    -0.933     {'family_index': 31, 'per_family_instance_index': 13, 'run_name': 'BM_DecodeArrowBooleanRle/DecodeArrowWithNull/num_values:4096/null_in_ten_thousand:5000', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 20290}
                                               BM_DecodeArrowBooleanPlain/DecodeArrow/1024 347.766 MiB/sec 344.150 MiB/sec    -1.040                                                {'family_index': 32, 'per_family_instance_index': 0, 'run_name': 'BM_DecodeArrowBooleanPlain/DecodeArrow/1024', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 755848}
 BM_DecodeArrowBooleanPlain/DecodeArrowWithNull/num_values:4096/null_in_ten_thousand:10000 311.075 MiB/sec 307.616 MiB/sec    -1.112 {'family_index': 34, 'per_family_instance_index': 17, 'run_name': 'BM_DecodeArrowBooleanPlain/DecodeArrowWithNull/num_values:4096/null_in_ten_thousand:10000', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 177767}
    BM_DecodeArrowBooleanRle/DecodeArrowWithNull/num_values:4096/null_in_ten_thousand:1000  37.637 MiB/sec  37.194 MiB/sec    -1.177      {'family_index': 31, 'per_family_instance_index': 9, 'run_name': 'BM_DecodeArrowBooleanRle/DecodeArrowWithNull/num_values:4096/null_in_ten_thousand:1000', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 21154}
                                               BM_DeltaBitPackingDecode_Int64_Narrow/65536   8.145 GiB/sec   8.043 GiB/sec    -1.244                                                  {'family_index': 14, 'per_family_instance_index': 3, 'run_name': 'BM_DeltaBitPackingDecode_Int64_Narrow/65536', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 4518}
                                       BM_DecodeArrowBooleanPlain/DecodeArrowNonNull/32768   6.209 GiB/sec   6.130 GiB/sec    -1.266                                        {'family_index': 33, 'per_family_instance_index': 2, 'run_name': 'BM_DecodeArrowBooleanPlain/DecodeArrowNonNull/32768', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 455003}
     BM_DecodeArrowBooleanRle/DecodeArrowWithNull/num_values:4096/null_in_ten_thousand:100  40.139 MiB/sec  39.524 MiB/sec    -1.532       {'family_index': 31, 'per_family_instance_index': 5, 'run_name': 'BM_DecodeArrowBooleanRle/DecodeArrowWithNull/num_values:4096/null_in_ten_thousand:100', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 22776}
 BM_DecodeArrowBooleanPlain/DecodeArrowWithNull/num_values:1024/null_in_ten_thousand:10000 188.973 MiB/sec 185.543 MiB/sec    -1.815 {'family_index': 34, 'per_family_instance_index': 16, 'run_name': 'BM_DecodeArrowBooleanPlain/DecodeArrowWithNull/num_values:1024/null_in_ten_thousand:10000', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 425734}
  BM_DecodeArrowBooleanRle/DecodeArrowWithNull/num_values:65536/null_in_ten_thousand:10000  12.679 GiB/sec  12.447 GiB/sec    -1.828  {'family_index': 31, 'per_family_instance_index': 19, 'run_name': 'BM_DecodeArrowBooleanRle/DecodeArrowWithNull/num_values:65536/null_in_ten_thousand:10000', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 465449}
                                        BM_DecodeArrowBooleanPlain/DecodeArrowNonNull/4096   1.245 GiB/sec   1.219 GiB/sec    -2.037                                         {'family_index': 33, 'per_family_instance_index': 1, 'run_name': 'BM_DecodeArrowBooleanPlain/DecodeArrowNonNull/4096', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 718357}
    BM_DecodeArrowBooleanRle/DecodeArrowWithNull/num_values:1024/null_in_ten_thousand:1000  35.208 MiB/sec  34.472 MiB/sec    -2.090      {'family_index': 31, 'per_family_instance_index': 8, 'run_name': 'BM_DecodeArrowBooleanRle/DecodeArrowWithNull/num_values:1024/null_in_ten_thousand:1000', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 77209}
  BM_DecodeArrowBooleanPlain/DecodeArrowWithNull/num_values:65536/null_in_ten_thousand:100  33.520 MiB/sec  32.785 MiB/sec    -2.193     {'family_index': 34, 'per_family_instance_index': 7, 'run_name': 'BM_DecodeArrowBooleanPlain/DecodeArrowWithNull/num_values:65536/null_in_ten_thousand:100', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 1203}
                                              BM_DecodeArrowBooleanPlain/DecodeArrow/65536   8.805 GiB/sec   8.570 GiB/sec    -2.669                                               {'family_index': 32, 'per_family_instance_index': 3, 'run_name': 'BM_DecodeArrowBooleanPlain/DecodeArrow/65536', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 322262}

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Regressions: (4)
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
                                                                               benchmark        baseline       contender  change %                                                                                                                                                                                                                                 counters
 BM_DecodeArrowBooleanPlain/DecodeArrowWithNull/num_values:4096/null_in_ten_thousand:100  61.943 MiB/sec  58.571 MiB/sec    -5.444  {'family_index': 34, 'per_family_instance_index': 5, 'run_name': 'BM_DecodeArrowBooleanPlain/DecodeArrowWithNull/num_values:4096/null_in_ten_thousand:100', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 36012}
BM_DecodeArrowBooleanPlain/DecodeArrowWithNull/num_values:16384/null_in_ten_thousand:100  51.264 MiB/sec  47.488 MiB/sec    -7.367  {'family_index': 34, 'per_family_instance_index': 6, 'run_name': 'BM_DecodeArrowBooleanPlain/DecodeArrowWithNull/num_values:16384/null_in_ten_thousand:100', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 6610}
 BM_DecodeArrowBooleanPlain/DecodeArrowWithNull/num_values:1024/null_in_ten_thousand:100  75.267 MiB/sec  69.425 MiB/sec    -7.762 {'family_index': 34, 'per_family_instance_index': 4, 'run_name': 'BM_DecodeArrowBooleanPlain/DecodeArrowWithNull/num_values:1024/null_in_ten_thousand:100', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 173108}
  BM_DecodeArrowBooleanPlain/DecodeArrowWithNull/num_values:65536/null_in_ten_thousand:1 141.042 MiB/sec 109.236 MiB/sec   -22.551    {'family_index': 34, 'per_family_instance_index': 3, 'run_name': 'BM_DecodeArrowBooleanPlain/DecodeArrowWithNull/num_values:65536/null_in_ten_thousand:1', 'repetitions': 1, 'repetition_index': 0, 'threads': 1, 'iterations': 5117}

@pitrou

pitrou commented Oct 26, 2026

Copy link
Copy Markdown
Member

I also see significant improvements in the JSON and CSV components, interestingly:

@github-actions

Copy link
Copy Markdown

⚠️ GitHub issue #47774 has been automatically assigned in GitHub to PR creator.

@pitrou

pitrou commented Oct 27, 2026

Copy link
Copy Markdown
Member

The continuous benchmarking results are a bit difficult to interpret but they seem more on the speedup than slowdown side generally.

@github-actions github-actions Bot added awaiting committer review Awaiting committer review and removed awaiting review Awaiting review labels Oct 27, 2026
@pitrou pitrou changed the title GH-47774: [C++] Force-inlince Status::~Status() to improve reading performance GH-47774: [C++] Force-inline Status::~Status() to improve reading performance Oct 27, 2026
@github-actions

Copy link
Copy Markdown

⚠️ GitHub issue #47774 has been automatically assigned in GitHub to PR creator.

Comment thread cpp/src/arrow/status.h
Copilot AI balanced review requested due to automatic review settings October 27, 2026 09:52

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Copilot was unable to review this pull request because the user who requested the review has insufficient remaining quota.

@pitrou
pitrou merged commit 9a18992 into apache:main Oct 27, 2026
61 of 62 checks passed
@pitrou pitrou removed the awaiting committer review Awaiting committer review label Oct 27, 2026
@pitrou pitrou mentioned this pull request Oct 27, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants