Skip to content

perf(parquet): cache dictionary key lookups when writing dictionary arrays - #10862

Open
lyang24 wants to merge 1 commit into
apache:mainfrom
lyang24:perf/dict-key-cache
Open

perf(parquet): cache dictionary key lookups when writing dictionary arrays#10862
lyang24 wants to merge 1 commit into
apache:mainfrom
lyang24:perf/dict-key-cache

Conversation

@lyang24

@lyang24 lyang24 commented Aug 26, 2026

Copy link
Copy Markdown
Contributor

Which issue does this PR close?

N/A — small, self-contained perf fix. Happy to open one if you'd prefer it tracked.

Rationale for this change

When the input column is already a DictionaryArray, the writer throws that structure away before encoding it. downcast_dict_op! hands a TypedDictionaryArray to encode, which only sees T: ArrayAccessor — so values.value(idx) flattens key → value, and DictEncoder::encode interns once per row. That re-derives, for every row, a mapping the input dictionary already carried: an ahash of the value bytes, a hash table probe, and a byte comparison against the dictionary page.

I found this profiling compaction in GreptimeDB, where mito2 stores each SST's primary key as a Dictionary(UInt32, Binary) column. Rows are sorted by primary key, so keys arrive in long runs — and 82% of the time spent encoding that column was in Interner::intern, re-hashing values the dictionary had already deduplicated.

What changes are included in this PR?

downcast_op! takes a second op, and the Dictionary arms dispatch to it. The new encode_dict keeps the keys visible and resolves each one through a small direct-mapped cache from input dictionary key to interned key. A hit is one comparison and no hashing; the slot also stores the value length so the loop maintains variable_length_bytes without touching the dictionary at all.

The cache is a fixed 24 KiB regardless of dictionary size, which is what lets the lookup be unconditional. I tried an exact per-dictionary remap table first and it needed a size heuristic to avoid regressing high-cardinality columns — a fixed cache degrades on its own instead: columns whose keys repeat hit nearly always, columns with no repetition miss and pay one predictable integer compare per row.

Slots are generation-stamped so a new call invalidates the cache without clearing it. That's required, not an optimization — a key only means anything relative to one input dictionary, and consecutive batches can carry different ones.

Duplicate and unused dictionary entries stay correct: duplicates intern to the same key, unused entries are never interned.

Statistics and bloom filter updates moved into a shared helper so the two entry points can't drift.

Scope: only Dictionary(_, Utf8 | LargeUtf8 | Binary | LargeBinary | FixedSizeBinary) inputs. All other byte array types keep the existing path, and if parquet dictionary encoding is off the fallback encoder is used as before.

Are these changes tested?

Existing tests cover the round trips. Added arrow_writer_dictionary_key_cache_handles_collisions_and_rebinding for the two ways a direct-mapped cache can go wrong: keys colliding in the same slot, and a later batch binding the same key to a different value. Removing either the slot tag check or the generation check makes it fail.

arrow_writer benchmarks, 1,048,576 rows per batch. Running two binaries alternately rather than --save-baseline, because this machine drifted ~13% on string_dictionary/zstd over half an hour and the first comparison I did was mostly measuring that:

string_dictionary_low_cardinality_20/default -47% / -42%
string_dictionary_low_cardinality_20/zstd -39% / -45%
string_dictionary_low_cardinality_100/default -36% / -41%
string_dictionary_low_cardinality_400/default -21% .. -31%
string_dictionary/default -3.3% .. -4.9%
string_dictionary/zstd -1.5% .. -2.2%
string_dictionary/bloom_filter -0.5% / +1.9%

string_dictionary is the high-cardinality case, where the cache mostly misses — it's there to show the miss path doesn't cost anything, not as a win.

Are there any user-facing changes?

no

@Rich-T-kid

Copy link
Copy Markdown
Contributor

run benchmark arrow-writer

@github-actions github-actions Bot added the parquet Changes to the parquet crate label Aug 26, 2026
@adriangbot

Copy link
Copy Markdown

🤖 Arrow criterion benchmark running (GKE) | trigger
Instance: c4a-highmem-16 (12 vCPU / 65 GiB) | Linux bench-c5427810124-1986-4q9pn 6.12.85+ #1 SMP Sat Jun 27 09:31:30 UTC 2026 aarch64 GNU/Linux

CPU Details (lscpu)
Architecture:                            aarch64
CPU op-mode(s):                          64-bit
Byte Order:                              Little Endian
CPU(s):                                  16
On-line CPU(s) list:                     0-15
Vendor ID:                               ARM
Model name:                              Neoverse-V2
Model:                                   1
Thread(s) per core:                      1
Core(s) per cluster:                     16
Socket(s):                               -
Cluster(s):                              1
Stepping:                                r0p1
BogoMIPS:                                2000.00
Flags:                                   fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm jscvt fcma lrcpc dcpop sha3 sm3 sm4 asimddp sha512 sve asimdfhm dit uscat ilrcpc flagm sb paca pacg dcpodp sve2 sveaes svepmull svebitperm svesha3 svesm4 flagm2 frint svei8mm svebf16 i8mm bf16 dgh rng bti
L1d cache:                               1 MiB (16 instances)
L1i cache:                               1 MiB (16 instances)
L2 cache:                                32 MiB (16 instances)
L3 cache:                                80 MiB (1 instance)
NUMA node(s):                            1
NUMA node0 CPU(s):                       0-15
Vulnerability Gather data sampling:      Not affected
Vulnerability Indirect target selection: Not affected
Vulnerability Itlb multihit:             Not affected
Vulnerability L1tf:                      Not affected
Vulnerability Mds:                       Not affected
Vulnerability Meltdown:                  Not affected
Vulnerability Mmio stale data:           Not affected
Vulnerability Reg file data sampling:    Not affected
Vulnerability Retbleed:                  Not affected
Vulnerability Spec rstack overflow:      Not affected
Vulnerability Spec store bypass:         Mitigation; Speculative Store Bypass disabled via prctl
Vulnerability Spectre v1:                Mitigation; __user pointer sanitization
Vulnerability Spectre v2:                Mitigation; CSV2, BHB
Vulnerability Srbds:                     Not affected
Vulnerability Tsa:                       Not affected
Vulnerability Tsx async abort:           Not affected
Vulnerability Vmscape:                   Not affected

Comparing perf/dict-key-cache (2bd95a9) to cd7c6b8 (merge-base) diff

Run configuration
run benchmark arrow-writer

BENCH_COMMAND=cargo bench --features=arrow,async,test_common,experimental,object_store --bench arrow-writer
Results will be posted here when complete


File an issue against this benchmark runner

@adriangbot

Copy link
Copy Markdown

Benchmark for this request failed before finishing (Kubernetes reason: BackoffLimitExceeded).

Benchmarks requested: arrow-writer

Kubernetes message
Job has reached the specified backoff limit

File an issue against this benchmark runner

@Rich-T-kid

Copy link
Copy Markdown
Contributor

run benchmark arrow-writer

@adriangbot

Copy link
Copy Markdown

🤖 Arrow criterion benchmark running (GKE) | trigger
Instance: c4a-highmem-16 (12 vCPU / 65 GiB) | Linux bench-c5428898819-1990-s4j54 6.12.85+ #1 SMP Sat Jun 27 09:31:30 UTC 2026 aarch64 GNU/Linux

CPU Details (lscpu)
Architecture:                            aarch64
CPU op-mode(s):                          64-bit
Byte Order:                              Little Endian
CPU(s):                                  16
On-line CPU(s) list:                     0-15
Vendor ID:                               ARM
Model name:                              Neoverse-V2
Model:                                   1
Thread(s) per core:                      1
Core(s) per cluster:                     16
Socket(s):                               -
Cluster(s):                              1
Stepping:                                r0p1
BogoMIPS:                                2000.00
Flags:                                   fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm jscvt fcma lrcpc dcpop sha3 sm3 sm4 asimddp sha512 sve asimdfhm dit uscat ilrcpc flagm sb paca pacg dcpodp sve2 sveaes svepmull svebitperm svesha3 svesm4 flagm2 frint svei8mm svebf16 i8mm bf16 dgh rng bti
L1d cache:                               1 MiB (16 instances)
L1i cache:                               1 MiB (16 instances)
L2 cache:                                32 MiB (16 instances)
L3 cache:                                80 MiB (1 instance)
NUMA node(s):                            1
NUMA node0 CPU(s):                       0-15
Vulnerability Gather data sampling:      Not affected
Vulnerability Indirect target selection: Not affected
Vulnerability Itlb multihit:             Not affected
Vulnerability L1tf:                      Not affected
Vulnerability Mds:                       Not affected
Vulnerability Meltdown:                  Not affected
Vulnerability Mmio stale data:           Not affected
Vulnerability Reg file data sampling:    Not affected
Vulnerability Retbleed:                  Not affected
Vulnerability Spec rstack overflow:      Not affected
Vulnerability Spec store bypass:         Mitigation; Speculative Store Bypass disabled via prctl
Vulnerability Spectre v1:                Mitigation; __user pointer sanitization
Vulnerability Spectre v2:                Mitigation; CSV2, BHB
Vulnerability Srbds:                     Not affected
Vulnerability Tsa:                       Not affected
Vulnerability Tsx async abort:           Not affected
Vulnerability Vmscape:                   Not affected

Comparing perf/dict-key-cache (2bd95a9) to cd7c6b8 (merge-base) diff

Run configuration
run benchmark arrow-writer

BENCH_COMMAND=cargo bench --features=arrow,async,test_common,experimental,object_store --bench arrow-writer
Results will be posted here when complete


File an issue against this benchmark runner

@adriangbot

Copy link
Copy Markdown

Benchmark for this request failed before finishing (Kubernetes reason: BackoffLimitExceeded).

Benchmarks requested: arrow-writer

Kubernetes message
Job has reached the specified backoff limit

File an issue against this benchmark runner

@etseidl

etseidl commented Aug 26, 2026

Copy link
Copy Markdown
Contributor

run benchmark arrow_writer

env:
    BENCH_FILTER: dict

@adriangbot

Copy link
Copy Markdown

🤖 Arrow criterion benchmark running (GKE) | trigger
Instance: c4a-highmem-16 (12 vCPU / 65 GiB) | Linux bench-c5430490424-1996-jw6bq 6.12.85+ #1 SMP Sat Jun 27 09:31:30 UTC 2026 aarch64 GNU/Linux

CPU Details (lscpu)
Architecture:                            aarch64
CPU op-mode(s):                          64-bit
Byte Order:                              Little Endian
CPU(s):                                  16
On-line CPU(s) list:                     0-15
Vendor ID:                               ARM
Model name:                              Neoverse-V2
Model:                                   1
Thread(s) per core:                      1
Core(s) per cluster:                     16
Socket(s):                               -
Cluster(s):                              1
Stepping:                                r0p1
BogoMIPS:                                2000.00
Flags:                                   fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm jscvt fcma lrcpc dcpop sha3 sm3 sm4 asimddp sha512 sve asimdfhm dit uscat ilrcpc flagm sb paca pacg dcpodp sve2 sveaes svepmull svebitperm svesha3 svesm4 flagm2 frint svei8mm svebf16 i8mm bf16 dgh rng bti
L1d cache:                               1 MiB (16 instances)
L1i cache:                               1 MiB (16 instances)
L2 cache:                                32 MiB (16 instances)
L3 cache:                                80 MiB (1 instance)
NUMA node(s):                            1
NUMA node0 CPU(s):                       0-15
Vulnerability Gather data sampling:      Not affected
Vulnerability Indirect target selection: Not affected
Vulnerability Itlb multihit:             Not affected
Vulnerability L1tf:                      Not affected
Vulnerability Mds:                       Not affected
Vulnerability Meltdown:                  Not affected
Vulnerability Mmio stale data:           Not affected
Vulnerability Reg file data sampling:    Not affected
Vulnerability Retbleed:                  Not affected
Vulnerability Spec rstack overflow:      Not affected
Vulnerability Spec store bypass:         Mitigation; Speculative Store Bypass disabled via prctl
Vulnerability Spectre v1:                Mitigation; __user pointer sanitization
Vulnerability Spectre v2:                Mitigation; CSV2, BHB
Vulnerability Srbds:                     Not affected
Vulnerability Tsa:                       Not affected
Vulnerability Tsx async abort:           Not affected
Vulnerability Vmscape:                   Not affected

Comparing perf/dict-key-cache (2bd95a9) to cd7c6b8 (merge-base) diff

Run configuration
run benchmark arrow_writer
env:
  BENCH_FILTER: "dict"

BENCH_COMMAND=cargo bench --features=arrow,async,test_common,experimental,object_store --bench arrow_writer
Results will be posted here when complete


File an issue against this benchmark runner

@adriangbot

Copy link
Copy Markdown

🤖 Arrow criterion benchmark completed (GKE) | trigger

Instance: c4a-highmem-16 (12 vCPU / 65 GiB)

Comparing perf/dict-key-cache (2bd95a9) to cd7c6b8 (merge-base) diff

Run configuration
run benchmark arrow_writer
env:
  BENCH_FILTER: "dict"
CPU Details (lscpu)
Architecture:                            aarch64
CPU op-mode(s):                          64-bit
Byte Order:                              Little Endian
CPU(s):                                  16
On-line CPU(s) list:                     0-15
Vendor ID:                               ARM
Model name:                              Neoverse-V2
Model:                                   1
Thread(s) per core:                      1
Core(s) per cluster:                     16
Socket(s):                               -
Cluster(s):                              1
Stepping:                                r0p1
BogoMIPS:                                2000.00
Flags:                                   fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm jscvt fcma lrcpc dcpop sha3 sm3 sm4 asimddp sha512 sve asimdfhm dit uscat ilrcpc flagm sb paca pacg dcpodp sve2 sveaes svepmull svebitperm svesha3 svesm4 flagm2 frint svei8mm svebf16 i8mm bf16 dgh rng bti
L1d cache:                               1 MiB (16 instances)
L1i cache:                               1 MiB (16 instances)
L2 cache:                                32 MiB (16 instances)
L3 cache:                                80 MiB (1 instance)
NUMA node(s):                            1
NUMA node0 CPU(s):                       0-15
Vulnerability Gather data sampling:      Not affected
Vulnerability Indirect target selection: Not affected
Vulnerability Itlb multihit:             Not affected
Vulnerability L1tf:                      Not affected
Vulnerability Mds:                       Not affected
Vulnerability Meltdown:                  Not affected
Vulnerability Mmio stale data:           Not affected
Vulnerability Reg file data sampling:    Not affected
Vulnerability Retbleed:                  Not affected
Vulnerability Spec rstack overflow:      Not affected
Vulnerability Spec store bypass:         Mitigation; Speculative Store Bypass disabled via prctl
Vulnerability Spectre v1:                Mitigation; __user pointer sanitization
Vulnerability Spectre v2:                Mitigation; CSV2, BHB
Vulnerability Srbds:                     Not affected
Vulnerability Tsa:                       Not affected
Vulnerability Tsx async abort:           Not affected
Vulnerability Vmscape:                   Not affected
Details

group                                                           main                                   perf_dict-key-cache
-----                                                           ----                                   -------------------
string_dictionary/bloom_filter                                  1.00    104.9±3.50ms     2.5 GB/sec    1.01    105.9±2.41ms     2.4 GB/sec
string_dictionary/cdc                                           1.16     55.7±1.49ms     4.6 GB/sec    1.00     48.2±0.81ms     5.4 GB/sec
string_dictionary/default                                       1.00     55.7±1.06ms     4.6 GB/sec    1.07     59.7±1.42ms     4.3 GB/sec
string_dictionary/number_distinct_values                        1.20     92.7±1.31ms     2.8 GB/sec    1.00     77.5±3.79ms     3.3 GB/sec
string_dictionary/parquet_2                                     1.04     63.0±0.68ms     4.1 GB/sec    1.00     60.8±5.44ms     4.2 GB/sec
string_dictionary/zstd                                          1.00    218.1±1.53ms  1211.1 MB/sec    1.02    223.4±5.18ms  1182.5 MB/sec
string_dictionary/zstd_parquet_2                                1.00    198.3±6.08ms  1332.1 MB/sec    1.01    199.9±5.31ms  1321.6 MB/sec
string_dictionary_low_cardinality_100/bloom_filter              1.46     33.3±0.16ms   120.2 MB/sec    1.00     22.8±0.13ms   175.6 MB/sec
string_dictionary_low_cardinality_100/cdc                       1.65     26.9±0.15ms   148.7 MB/sec    1.00     16.3±0.15ms   245.6 MB/sec
string_dictionary_low_cardinality_100/default                   1.74     24.5±0.15ms   163.2 MB/sec    1.00     14.1±0.12ms   284.0 MB/sec
string_dictionary_low_cardinality_100/number_distinct_values    1.28     40.3±0.20ms    99.3 MB/sec    1.00     31.5±3.94ms   127.0 MB/sec
string_dictionary_low_cardinality_100/parquet_2                 1.75     24.5±0.16ms   163.4 MB/sec    1.00     14.0±0.11ms   285.8 MB/sec
string_dictionary_low_cardinality_100/zstd                      1.73     24.9±0.14ms   160.8 MB/sec    1.00     14.4±0.12ms   278.9 MB/sec
string_dictionary_low_cardinality_100/zstd_parquet_2            1.73     24.9±0.16ms   160.9 MB/sec    1.00     14.3±0.12ms   279.2 MB/sec
string_dictionary_low_cardinality_20/bloom_filter               1.61     33.1±0.14ms   120.9 MB/sec    1.00     20.6±0.11ms   194.1 MB/sec
string_dictionary_low_cardinality_20/cdc                        1.81     27.1±0.13ms   148.0 MB/sec    1.00     14.9±0.12ms   268.4 MB/sec
string_dictionary_low_cardinality_20/default                    1.97     24.7±0.13ms   162.1 MB/sec    1.00     12.6±0.12ms   318.6 MB/sec
string_dictionary_low_cardinality_20/number_distinct_values     1.35     40.3±0.19ms    99.5 MB/sec    1.00     29.8±3.92ms   134.6 MB/sec
string_dictionary_low_cardinality_20/parquet_2                  1.96     24.7±0.14ms   162.2 MB/sec    1.00     12.6±0.10ms   318.5 MB/sec
string_dictionary_low_cardinality_20/zstd                       1.96     24.9±0.13ms   161.1 MB/sec    1.00     12.7±0.11ms   316.0 MB/sec
string_dictionary_low_cardinality_20/zstd_parquet_2             1.96     24.8±0.14ms   161.3 MB/sec    1.00     12.7±0.10ms   316.3 MB/sec
string_dictionary_low_cardinality_400/bloom_filter              1.24     34.3±0.17ms   116.9 MB/sec    1.00     27.6±0.15ms   145.3 MB/sec
string_dictionary_low_cardinality_400/cdc                       1.34     27.5±0.18ms   146.0 MB/sec    1.00     20.6±0.16ms   195.0 MB/sec
string_dictionary_low_cardinality_400/default                   1.36     25.0±0.16ms   160.7 MB/sec    1.00     18.4±0.14ms   218.0 MB/sec
string_dictionary_low_cardinality_400/number_distinct_values    1.14     40.9±0.21ms    98.2 MB/sec    1.00     35.9±3.91ms   111.9 MB/sec
string_dictionary_low_cardinality_400/parquet_2                 1.36     25.0±0.18ms   160.3 MB/sec    1.00     18.4±0.13ms   218.3 MB/sec
string_dictionary_low_cardinality_400/zstd                      1.35     25.5±0.16ms   157.5 MB/sec    1.00     18.9±0.14ms   212.5 MB/sec
string_dictionary_low_cardinality_400/zstd_parquet_2            1.36     25.7±0.16ms   156.2 MB/sec    1.00     18.8±0.12ms   212.9 MB/sec

Resource Usage

base (merge-base)

Metric Value
Wall time 330.1s
Peak memory 2.5 GiB
Avg memory 2.4 GiB
CPU user 312.9s
CPU sys 14.2s
Peak spill 0 B

branch

Metric Value
Wall time 335.1s
Peak memory 2.5 GiB
Avg memory 2.5 GiB
CPU user 320.6s
CPU sys 9.8s
Peak spill 0 B

File an issue against this benchmark runner

@Rich-T-kid

Copy link
Copy Markdown
Contributor

benchmarks look good

@lyang24
lyang24 force-pushed the perf/dict-key-cache branch from 2bd95a9 to ffe86b7 Compare August 29, 2026 20:09
@Rich-T-kid

Copy link
Copy Markdown
Contributor

run benchmark arrow_writer

env:
BENCH_FILTER: dict

@adriangbot

Copy link
Copy Markdown

🤖 Arrow criterion benchmark running (GKE) | trigger
Instance: c4a-highmem-16 (12 vCPU / 65 GiB) | Linux bench-c5465508360-2038-29747 6.12.85+ #1 SMP Sat Jun 27 09:31:30 UTC 2026 aarch64 GNU/Linux

CPU Details (lscpu)
Architecture:                            aarch64
CPU op-mode(s):                          64-bit
Byte Order:                              Little Endian
CPU(s):                                  16
On-line CPU(s) list:                     0-15
Vendor ID:                               ARM
Model name:                              Neoverse-V2
Model:                                   1
Thread(s) per core:                      1
Core(s) per cluster:                     16
Socket(s):                               -
Cluster(s):                              1
Stepping:                                r0p1
BogoMIPS:                                2000.00
Flags:                                   fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm jscvt fcma lrcpc dcpop sha3 sm3 sm4 asimddp sha512 sve asimdfhm dit uscat ilrcpc flagm sb paca pacg dcpodp sve2 sveaes svepmull svebitperm svesha3 svesm4 flagm2 frint svei8mm svebf16 i8mm bf16 dgh rng bti
L1d cache:                               1 MiB (16 instances)
L1i cache:                               1 MiB (16 instances)
L2 cache:                                32 MiB (16 instances)
L3 cache:                                80 MiB (1 instance)
NUMA node(s):                            1
NUMA node0 CPU(s):                       0-15
Vulnerability Gather data sampling:      Not affected
Vulnerability Indirect target selection: Not affected
Vulnerability Itlb multihit:             Not affected
Vulnerability L1tf:                      Not affected
Vulnerability Mds:                       Not affected
Vulnerability Meltdown:                  Not affected
Vulnerability Mmio stale data:           Not affected
Vulnerability Reg file data sampling:    Not affected
Vulnerability Retbleed:                  Not affected
Vulnerability Spec rstack overflow:      Not affected
Vulnerability Spec store bypass:         Mitigation; Speculative Store Bypass disabled via prctl
Vulnerability Spectre v1:                Mitigation; __user pointer sanitization
Vulnerability Spectre v2:                Mitigation; CSV2, BHB
Vulnerability Srbds:                     Not affected
Vulnerability Tsa:                       Not affected
Vulnerability Tsx async abort:           Not affected
Vulnerability Vmscape:                   Not affected

Comparing perf/dict-key-cache (ffe86b7) to edd2775 (merge-base) diff

Run configuration
run benchmark arrow_writer
env:
  BENCH_FILTER: "dict"

BENCH_COMMAND=cargo bench --features=arrow,async,test_common,experimental,object_store --bench arrow_writer
Results will be posted here when complete


File an issue against this benchmark runner

@adriangbot

Copy link
Copy Markdown

🤖 Arrow criterion benchmark completed (GKE) | trigger

Instance: c4a-highmem-16 (12 vCPU / 65 GiB)

Comparing perf/dict-key-cache (ffe86b7) to edd2775 (merge-base) diff

Run configuration
run benchmark arrow_writer
env:
  BENCH_FILTER: "dict"
CPU Details (lscpu)
Architecture:                            aarch64
CPU op-mode(s):                          64-bit
Byte Order:                              Little Endian
CPU(s):                                  16
On-line CPU(s) list:                     0-15
Vendor ID:                               ARM
Model name:                              Neoverse-V2
Model:                                   1
Thread(s) per core:                      1
Core(s) per cluster:                     16
Socket(s):                               -
Cluster(s):                              1
Stepping:                                r0p1
BogoMIPS:                                2000.00
Flags:                                   fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm jscvt fcma lrcpc dcpop sha3 sm3 sm4 asimddp sha512 sve asimdfhm dit uscat ilrcpc flagm sb paca pacg dcpodp sve2 sveaes svepmull svebitperm svesha3 svesm4 flagm2 frint svei8mm svebf16 i8mm bf16 dgh rng bti
L1d cache:                               1 MiB (16 instances)
L1i cache:                               1 MiB (16 instances)
L2 cache:                                32 MiB (16 instances)
L3 cache:                                80 MiB (1 instance)
NUMA node(s):                            1
NUMA node0 CPU(s):                       0-15
Vulnerability Gather data sampling:      Not affected
Vulnerability Indirect target selection: Not affected
Vulnerability Itlb multihit:             Not affected
Vulnerability L1tf:                      Not affected
Vulnerability Mds:                       Not affected
Vulnerability Meltdown:                  Not affected
Vulnerability Mmio stale data:           Not affected
Vulnerability Reg file data sampling:    Not affected
Vulnerability Retbleed:                  Not affected
Vulnerability Spec rstack overflow:      Not affected
Vulnerability Spec store bypass:         Mitigation; Speculative Store Bypass disabled via prctl
Vulnerability Spectre v1:                Mitigation; __user pointer sanitization
Vulnerability Spectre v2:                Mitigation; CSV2, BHB
Vulnerability Srbds:                     Not affected
Vulnerability Tsa:                       Not affected
Vulnerability Tsx async abort:           Not affected
Vulnerability Vmscape:                   Not affected
Details

group                                                           main                                   perf_dict-key-cache
-----                                                           ----                                   -------------------
string_dictionary/bloom_filter                                  1.04    106.8±3.10ms     2.4 GB/sec    1.00    102.6±6.29ms     2.5 GB/sec
string_dictionary/cdc                                           1.15     57.0±0.67ms     4.5 GB/sec    1.00     49.5±1.18ms     5.2 GB/sec
string_dictionary/default                                       1.05     59.7±0.51ms     4.3 GB/sec    1.00     56.9±0.91ms     4.5 GB/sec
string_dictionary/number_distinct_values                        1.04     89.7±1.37ms     2.9 GB/sec    1.00     86.0±1.45ms     3.0 GB/sec
string_dictionary/parquet_2                                     1.00     60.4±7.09ms     4.3 GB/sec    1.01     61.0±4.63ms     4.2 GB/sec
string_dictionary/zstd                                          1.01    220.2±2.31ms  1199.6 MB/sec    1.00    217.7±1.31ms  1213.4 MB/sec
string_dictionary/zstd_parquet_2                                1.00    198.6±4.82ms  1330.2 MB/sec    1.01    201.4±4.29ms  1311.6 MB/sec
string_dictionary_low_cardinality_100/bloom_filter              1.47     33.2±0.17ms   120.7 MB/sec    1.00     22.6±0.14ms   177.4 MB/sec
string_dictionary_low_cardinality_100/cdc                       1.65     26.9±0.10ms   148.9 MB/sec    1.00     16.3±0.13ms   245.1 MB/sec
string_dictionary_low_cardinality_100/default                   1.74     24.5±0.12ms   163.6 MB/sec    1.00     14.1±0.09ms   284.4 MB/sec
string_dictionary_low_cardinality_100/number_distinct_values    1.35     40.4±0.18ms    99.1 MB/sec    1.00     29.9±0.16ms   133.8 MB/sec
string_dictionary_low_cardinality_100/parquet_2                 1.76     24.5±0.12ms   163.7 MB/sec    1.00     13.9±0.09ms   288.3 MB/sec
string_dictionary_low_cardinality_100/zstd                      1.74     24.8±0.13ms   161.5 MB/sec    1.00     14.3±0.09ms   280.4 MB/sec
string_dictionary_low_cardinality_100/zstd_parquet_2            1.74     24.8±0.13ms   161.3 MB/sec    1.00     14.3±0.10ms   280.9 MB/sec
string_dictionary_low_cardinality_20/bloom_filter               1.51     31.7±0.12ms   126.2 MB/sec    1.00     21.0±0.11ms   191.2 MB/sec
string_dictionary_low_cardinality_20/cdc                        1.75     25.7±0.11ms   155.7 MB/sec    1.00     14.7±0.12ms   272.8 MB/sec
string_dictionary_low_cardinality_20/default                    1.87     23.4±0.14ms   170.9 MB/sec    1.00     12.5±0.08ms   319.5 MB/sec
string_dictionary_low_cardinality_20/number_distinct_values     1.39     38.8±0.15ms   103.3 MB/sec    1.00     27.9±0.14ms   143.5 MB/sec
string_dictionary_low_cardinality_20/parquet_2                  1.88     23.5±0.13ms   170.8 MB/sec    1.00     12.5±0.10ms   321.2 MB/sec
string_dictionary_low_cardinality_20/zstd                       1.86     23.5±0.12ms   170.4 MB/sec    1.00     12.7±0.08ms   316.5 MB/sec
string_dictionary_low_cardinality_20/zstd_parquet_2             1.87     23.5±0.11ms   170.2 MB/sec    1.00     12.6±0.09ms   318.0 MB/sec
string_dictionary_low_cardinality_400/bloom_filter              1.26     34.3±0.22ms   116.8 MB/sec    1.00     27.3±0.16ms   146.9 MB/sec
string_dictionary_low_cardinality_400/cdc                       1.34     27.2±0.20ms   147.3 MB/sec    1.00     20.3±0.20ms   197.6 MB/sec
string_dictionary_low_cardinality_400/default                   1.38     25.0±0.26ms   160.4 MB/sec    1.00     18.1±0.15ms   221.5 MB/sec
string_dictionary_low_cardinality_400/number_distinct_values    1.19     40.6±0.21ms    98.8 MB/sec    1.00     34.1±0.17ms   117.8 MB/sec
string_dictionary_low_cardinality_400/parquet_2                 1.40     25.2±0.15ms   159.1 MB/sec    1.00     18.0±0.15ms   222.7 MB/sec
string_dictionary_low_cardinality_400/zstd                      1.38     25.7±0.16ms   156.2 MB/sec    1.00     18.6±0.13ms   215.2 MB/sec
string_dictionary_low_cardinality_400/zstd_parquet_2            1.39     25.7±0.16ms   156.4 MB/sec    1.00     18.5±0.12ms   216.8 MB/sec

Resource Usage

base (merge-base)

Metric Value
Wall time 350.1s
Peak memory 2.5 GiB
Avg memory 2.4 GiB
CPU user 330.7s
CPU sys 15.6s
Peak spill 0 B

branch

Metric Value
Wall time 335.1s
Peak memory 2.5 GiB
Avg memory 2.4 GiB
CPU user 317.6s
CPU sys 12.8s
Peak spill 0 B

File an issue against this benchmark runner

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

parquet Changes to the parquet crate

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants