loki
loki copied to clipboard
refactor(stringlabels): Support stringlabels in storage.
What this PR does / why we need it:
This is a next step of support Prometheus stringlabels implementation in Loki. It adds support in the storage package.
Special notes for your reviewer:
The tests should compile with build tag stringlabels.
Outstanding Performance Issues
- [ ]
Benchmark_store_SelectSample - [ ]
bloom/v1- [ ]
BenchmarkMapClear - [ ]
BenchmarkNewMap - [ ]
BenchmarkBlockQuerying - [ ]
BenchmarkScalableBloomTestAndAdd
- [ ]
- [x] Chunk encoding and decoding
- [ ]
series.BenchmarkParseIndexEntries - [x]
series.index.BenchmarkEncode - [ ]
Benchmark_BlocksCacheOld - [x]
tsdb- [x]
BenchmarkTenantHeads - [x]
BenchmarkTSDBIndex_Volume
- [x]
- [ ]
Benchmark_MultiQueries
Checklist
- [ ] Reviewed the
CONTRIBUTING.mdguide (required) - [ ] Documentation added
- [ ] Tests updated
- [ ] Title matches the required conventional commits format, see here
- Note that Promtail is considered to be feature complete, and future development for logs collection will be in Grafana Alloy. As such,
featPRs are unlikely to be accepted unless a case can be made for the feature actually being a bug fix to existing behavior.
- Note that Promtail is considered to be feature complete, and future development for logs collection will be in Grafana Alloy. As such,
- [ ] Changes that require user attention or interaction to upgrade are documented in
docs/sources/setup/upgrade/_index.md - [ ] If the change is deprecating or removing a configuration option, update the
deprecated-config.yamlanddeleted-config.yamlfiles respectively in thetools/deprecated-config-checkerdirectory. Example PR
I still have to run the benchmarks
Here are the benchmark results
│ before.log │ after.log │
│ sec/op │ sec/op vs base │
_store_SelectSample/count_over_time({foo="bar"}[5m])-16 370.7µ ± 4% 392.4µ ± 3% +5.86% (p=0.000 n=10)
_store_SelectSample/rate({foo="bar"}[5m])-16 356.8µ ± 2% 375.8µ ± 8% +5.34% (p=0.001 n=10)
_store_SelectSample/bytes_rate({foo="bar"}[5m])-16 364.7µ ± 2% 380.8µ ± 3% +4.40% (p=0.000 n=10)
_store_SelectSample/bytes_over_time({foo="bar"}[5m])-16 358.2µ ± 3% 385.7µ ± 2% +7.67% (p=0.000 n=10)
geomean 362.6µ 383.6µ +5.81%
│ before.log │ after.log │
│ samples/op │ samples/op vs base │
_store_SelectSample/count_over_time({foo="bar"}[5m])-16 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=10) ¹
_store_SelectSample/rate({foo="bar"}[5m])-16 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=10) ¹
_store_SelectSample/bytes_rate({foo="bar"}[5m])-16 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=10) ¹
_store_SelectSample/bytes_over_time({foo="bar"}[5m])-16 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=10) ¹
geomean ² +0.00% ²
¹ all samples are equal
² summaries must be >0 to compute geomean
│ before.log │ after.log │
│ B/op │ B/op vs base │
_store_SelectSample/count_over_time({foo="bar"}[5m])-16 385.3Ki ± 0% 386.8Ki ± 0% +0.38% (p=0.043 n=10)
_store_SelectSample/rate({foo="bar"}[5m])-16 384.2Ki ± 1% 385.7Ki ± 0% ~ (p=0.190 n=10)
_store_SelectSample/bytes_rate({foo="bar"}[5m])-16 386.4Ki ± 1% 386.4Ki ± 0% ~ (p=0.739 n=10)
_store_SelectSample/bytes_over_time({foo="bar"}[5m])-16 385.2Ki ± 0% 386.0Ki ± 0% ~ (p=0.165 n=10)
geomean 385.3Ki 386.2Ki +0.25%
│ before.log │ after.log │
│ allocs/op │ allocs/op vs base │
_store_SelectSample/count_over_time({foo="bar"}[5m])-16 1.038k ± 0% 1.038k ± 0% ~ (p=1.000 n=10) ¹
_store_SelectSample/rate({foo="bar"}[5m])-16 1.038k ± 0% 1.038k ± 0% ~ (p=1.000 n=10) ¹
_store_SelectSample/bytes_rate({foo="bar"}[5m])-16 1.038k ± 0% 1.038k ± 0% ~ (p=1.000 n=10) ¹
_store_SelectSample/bytes_over_time({foo="bar"}[5m])-16 1.038k ± 0% 1.038k ± 0% ~ (p=1.000 n=10) ¹
geomean 1.038k 1.038k +0.00%
¹ all samples are equal
pkg: github.com/grafana/loki/v3/pkg/storage/bloom/v1
│ before.log │ after.log │
│ sec/op │ sec/op vs base │
PopulateSeriesWithBloom-16 1.944m ± 2% 1.987m ± 5% ~ (p=0.218 n=10)
MapClear-16 22.32m ± 1% 24.03m ± 5% +7.66% (p=0.002 n=10)
NewMap-16 25.99m ± 1% 27.09m ± 3% +4.23% (p=0.000 n=10)
BlockQuerying/fused-16 216.9m ± 4% 227.6m ± 4% +4.95% (p=0.005 n=10)
geomean 22.24m 23.29m +4.74%
│ before.log │ after.log │
│ B/op │ B/op vs base │
PopulateSeriesWithBloom-16 10.03Mi ± 0% 10.03Mi ± 0% +0.00% (p=0.003 n=10)
MapClear-16 3.621Mi ± 0% 3.646Mi ± 0% +0.69% (p=0.001 n=10)
NewMap-16 13.66Mi ± 0% 13.67Mi ± 0% ~ (p=0.052 n=10)
BlockQuerying/fused-16 42.01Mi ± 1% 41.95Mi ± 1% ~ (p=0.631 n=10)
geomean 12.02Mi 12.03Mi +0.16%
│ before.log │ after.log │
│ allocs/op │ allocs/op vs base │
PopulateSeriesWithBloom-16 662.0 ± 0% 662.0 ± 0% ~ (p=1.000 n=10) ¹
MapClear-16 449.5k ± 0% 449.5k ± 0% +0.00% (p=0.001 n=10)
NewMap-16 450.0k ± 0% 450.0k ± 0% ~ (p=0.061 n=10)
BlockQuerying/fused-16 470.4k ± 0% 470.4k ± 0% ~ (p=1.000 n=10)
geomean 89.09k 89.09k +0.00%
¹ all samples are equal
pkg: github.com/grafana/loki/v3/pkg/storage/bloom/v1/filter
│ before.log │ after.log │
│ sec/op │ sec/op vs base │
HashKernel-16 8.006n ± 6% 7.687n ± 4% ~ (p=0.075 n=10)
BucketsIncrement-16 17.11n ± 6% 17.07n ± 3% ~ (p=0.684 n=10)
BucketsSet-16 10.17n ± 8% 10.17n ± 1% ~ (p=0.361 n=10)
BucketsGet-16 7.216n ± 7% 7.391n ± 4% ~ (p=0.436 n=10)
PartitionedBloomAdd-16 37.05n ± 6% 37.54n ± 5% ~ (p=0.247 n=10)
PartitionedBloomTest-16 13.47n ± 7% 13.54n ± 7% ~ (p=0.541 n=10)
PartitionedBloomTestAndAdd-16 48.47n ± 4% 47.13n ± 7% ~ (p=0.579 n=10)
PartitionedFillRatio-16 14.87µ ± 7% 14.72µ ± 5% ~ (p=0.631 n=10)
ScalableBloomAdd-16 75.63n ± 5% 76.71n ± 5% ~ (p=0.739 n=10)
ScalableBloomTest-16 16.18n ± 5% 15.91n ± 5% ~ (p=0.425 n=10)
ScalableBloomTestAndAdd-16 165.7n ± 6% 173.9n ± 6% ~ (p=0.165 n=10)
Read-16 214.1n ± 0% 214.0n ± 0% ~ (p=0.588 n=10)
geomean 48.19n 48.22n +0.05%
│ before.log │ after.log │
│ B/op │ B/op vs base │
HashKernel-16 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=10) ¹
BucketsIncrement-16 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=10) ¹
BucketsSet-16 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=10) ¹
BucketsGet-16 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=10) ¹
PartitionedBloomAdd-16 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=10) ¹
PartitionedBloomTest-16 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=10) ¹
PartitionedBloomTestAndAdd-16 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=10) ¹
PartitionedFillRatio-16 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=10) ¹
ScalableBloomAdd-16 1.000 ± 0% 1.000 ± 0% ~ (p=1.000 n=10) ¹
ScalableBloomTest-16 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=10) ¹
ScalableBloomTestAndAdd-16 1.000 ± 100% 2.000 ± 50% ~ (p=0.370 n=10)
Read-16 15.00 ± 0% 15.00 ± 7% ~ (p=1.000 n=10)
geomean ² +5.95% ²
¹ all samples are equal
² summaries must be >0 to compute geomean
│ before.log │ after.log │
│ allocs/op │ allocs/op vs base │
HashKernel-16 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=10) ¹
BucketsIncrement-16 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=10) ¹
BucketsSet-16 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=10) ¹
BucketsGet-16 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=10) ¹
PartitionedBloomAdd-16 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=10) ¹
PartitionedBloomTest-16 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=10) ¹
PartitionedBloomTestAndAdd-16 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=10) ¹
PartitionedFillRatio-16 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=10) ¹
ScalableBloomAdd-16 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=10) ¹
ScalableBloomTest-16 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=10) ¹
ScalableBloomTestAndAdd-16 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=10) ¹
Read-16 1.000 ± 0% 1.000 ± 0% ~ (p=1.000 n=10) ¹
geomean ² +0.00% ²
¹ all samples are equal
² summaries must be >0 to compute geomean
pkg: github.com/grafana/loki/v3/pkg/storage/chunk
│ before.log │ after.log │
│ sec/op │ sec/op vs base │
Encode-16 31.55µ ± 17% 35.41µ ± 14% +12.23% (p=0.035 n=10)
Decode1-16 34.61µ ± 5% 42.28µ ± 3% +22.15% (p=0.000 n=10)
Decode100-16 537.7µ ± 5% 551.9µ ± 1% ~ (p=0.089 n=10)
Decode10000-16 52.40m ± 1% 52.28m ± 1% ~ (p=0.529 n=10)
ParseNewerExternalKey-16 377.4n ± 8% 399.9n ± 2% +5.98% (p=0.000 n=10)
ParseNewExternalKey-16 378.2n ± 5% 383.2n ± 3% ~ (p=0.225 n=10)
RootParseNewExternalKey-16 352.9n ± 7% 343.1n ± 7% -2.76% (p=0.042 n=10)
RootParseNewerExternalKey-16 346.3n ± 2% 347.7n ± 6% ~ (p=0.565 n=10)
geomean 12.34µ 12.95µ +4.95%
│ before.log │ after.log │
│ B/op │ B/op vs base │
Encode-16 148.0Ki ± 0% 148.1Ki ± 0% +0.09% (p=0.023 n=10)
Decode1-16 147.1Ki ± 0% 147.6Ki ± 0% +0.37% (p=0.000 n=10)
Decode100-16 438.7Ki ± 0% 492.6Ki ± 0% +12.29% (p=0.000 n=10)
Decode10000-16 28.90Mi ± 0% 34.17Mi ± 0% +18.21% (p=0.000 n=10)
ParseNewerExternalKey-16 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=10) ¹
ParseNewExternalKey-16 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=10) ¹
RootParseNewExternalKey-16 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=10) ¹
RootParseNewerExternalKey-16 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=10) ¹
geomean ² +3.66% ²
¹ all samples are equal
² summaries must be >0 to compute geomean
│ before.log │ after.log │
│ allocs/op │ allocs/op vs base │
Encode-16 27.00 ± 0% 27.00 ± 0% ~ (p=1.000 n=10) ¹
Decode1-16 53.00 ± 0% 53.00 ± 0% ~ (p=1.000 n=10) ¹
Decode100-16 5.003k ± 0% 5.003k ± 0% ~ (p=1.000 n=10) ¹
Decode10000-16 500.0k ± 0% 500.0k ± 0% +0.00% (p=0.000 n=10)
ParseNewerExternalKey-16 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=10) ¹
ParseNewExternalKey-16 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=10) ¹
RootParseNewExternalKey-16 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=10) ¹
RootParseNewerExternalKey-16 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=10) ¹
geomean ² +0.00% ²
¹ all samples are equal
² summaries must be >0 to compute geomean
pkg: github.com/grafana/loki/v3/pkg/storage/chunk/client/local
│ before.log │ after.log │
│ sec/op │ sec/op vs base │
_Query-16 1.089µ ± 1% 1.086µ ± 1% ~ (p=0.540 n=10)
│ before.log │ after.log │
│ B/op │ B/op vs base │
_Query-16 656.0 ± 0% 656.0 ± 0% ~ (p=1.000 n=10) ¹
¹ all samples are equal
│ before.log │ after.log │
│ allocs/op │ allocs/op vs base │
_Query-16 10.00 ± 0% 10.00 ± 0% ~ (p=1.000 n=10) ¹
¹ all samples are equal
pkg: github.com/grafana/loki/v3/pkg/storage/chunk/client/util
│ before.log │ after.log │
│ sec/op │ sec/op vs base │
GetParallelChunks-16 1.109m ± 2% 1.122m ± 2% ~ (p=0.190 n=10)
│ before.log │ after.log │
│ B/op │ B/op vs base │
GetParallelChunks-16 131.5Ki ± 3% 131.9Ki ± 2% ~ (p=0.971 n=10)
│ before.log │ after.log │
│ allocs/op │ allocs/op vs base │
GetParallelChunks-16 163.0 ± 1% 162.0 ± 0% ~ (p=0.057 n=10)
pkg: github.com/grafana/loki/v3/pkg/storage/chunk/fetcher
│ before.log │ after.log │
│ sec/op │ sec/op vs base │
Fetch-16 364.0µ ± 4% 365.1µ ± 6% ~ (p=0.971 n=10)
│ before.log │ after.log │
│ B/op │ B/op vs base │
Fetch-16 285.1Ki ± 1% 286.2Ki ± 1% ~ (p=0.579 n=10)
│ before.log │ after.log │
│ allocs/op │ allocs/op vs base │
Fetch-16 4.212k ± 2% 4.222k ± 1% ~ (p=0.971 n=10)
pkg: github.com/grafana/loki/v3/pkg/storage/config
│ before.log │ after.log │
│ sec/op │ sec/op vs base │
ExternalKey-16 423.9n ± 1% 422.2n ± 1% ~ (p=0.101 n=10)
│ before.log │ after.log │
│ B/op │ B/op vs base │
ExternalKey-16 112.0 ± 0% 112.0 ± 0% ~ (p=1.000 n=10) ¹
¹ all samples are equal
│ before.log │ after.log │
│ allocs/op │ allocs/op vs base │
ExternalKey-16 6.000 ± 0% 6.000 ± 0% ~ (p=1.000 n=10) ¹
¹ all samples are equal
pkg: github.com/grafana/loki/v3/pkg/storage/stores/series
│ before.log │ after.log │
│ sec/op │ sec/op vs base │
ParseIndexEntries500-16 66.36µ ± 0% 68.81µ ± 0% +3.69% (p=0.000 n=10)
ParseIndexEntries2500-16 382.7µ ± 0% 396.6µ ± 0% +3.64% (p=0.000 n=10)
ParseIndexEntries10000-16 1.643m ± 0% 1.703m ± 0% +3.67% (p=0.000 n=10)
ParseIndexEntries50000-16 9.069m ± 1% 9.383m ± 0% +3.45% (p=0.000 n=10)
ParseIndexEntriesRegexSet500-16 35.65µ ± 0% 43.18µ ± 3% +21.10% (p=0.000 n=10)
ParseIndexEntriesRegexSet2500-16 173.0µ ± 0% 212.3µ ± 0% +22.66% (p=0.000 n=10)
ParseIndexEntriesRegexSet10000-16 694.8µ ± 0% 855.1µ ± 0% +23.07% (p=0.000 n=10)
ParseIndexEntriesRegexSet50000-16 3.548m ± 2% 4.349m ± 1% +22.57% (p=0.000 n=10)
IndexCaching-16 38.58µ ± 2% 38.86µ ± 2% ~ (p=0.280 n=10)
geomean 392.7µ 436.7µ +11.21%
│ before.log │ after.log │
│ B/op │ B/op vs base │
ParseIndexEntries500-16 16.04Ki ± 0% 16.04Ki ± 0% ~ (p=0.211 n=10)
ParseIndexEntries2500-16 80.05Ki ± 0% 80.05Ki ± 0% ~ (p=0.582 n=10)
ParseIndexEntries10000-16 320.1Ki ± 0% 320.1Ki ± 0% ~ (p=0.243 n=10)
ParseIndexEntries50000-16 1.532Mi ± 0% 1.532Mi ± 0% +0.00% (p=0.002 n=10)
ParseIndexEntriesRegexSet500-16 8.588Ki ± 0% 8.588Ki ± 0% ~ (p=1.000 n=10) ¹
ParseIndexEntriesRegexSet2500-16 40.63Ki ± 0% 40.63Ki ± 0% ~ (p=1.000 n=10)
ParseIndexEntriesRegexSet10000-16 160.7Ki ± 0% 160.7Ki ± 0% ~ (p=0.296 n=10)
ParseIndexEntriesRegexSet50000-16 784.7Ki ± 0% 784.7Ki ± 0% ~ (p=0.588 n=10)
IndexCaching-16 19.66Ki ± 0% 19.66Ki ± 0% ~ (p=0.582 n=10)
geomean 93.71Ki 93.71Ki +0.00%
¹ all samples are equal
│ before.log │ after.log │
│ allocs/op │ allocs/op vs base │
ParseIndexEntries500-16 3.000 ± 0% 3.000 ± 0% ~ (p=1.000 n=10) ¹
ParseIndexEntries2500-16 3.000 ± 0% 3.000 ± 0% ~ (p=1.000 n=10) ¹
ParseIndexEntries10000-16 3.000 ± 0% 3.000 ± 0% ~ (p=1.000 n=10) ¹
ParseIndexEntries50000-16 3.000 ± 0% 3.000 ± 0% ~ (p=1.000 n=10) ¹
ParseIndexEntriesRegexSet500-16 21.00 ± 0% 21.00 ± 0% ~ (p=1.000 n=10) ¹
ParseIndexEntriesRegexSet2500-16 21.00 ± 0% 21.00 ± 0% ~ (p=1.000 n=10) ¹
ParseIndexEntriesRegexSet10000-16 21.00 ± 0% 21.00 ± 0% ~ (p=1.000 n=10) ¹
ParseIndexEntriesRegexSet50000-16 21.00 ± 0% 21.00 ± 0% ~ (p=1.000 n=10) ¹
IndexCaching-16 278.0 ± 0% 278.0 ± 0% ~ (p=1.000 n=10) ¹
geomean 11.78 11.78 +0.00%
¹ all samples are equal
pkg: github.com/grafana/loki/v3/pkg/storage/stores/series/index
│ before.log │ after.log │
│ sec/op │ sec/op vs base │
EncodeLabelsJson-16 992.1n ± 1% 1024.5n ± 1% +3.27% (p=0.000 n=10)
EncodeLabelsString-16 3.479µ ± 0% 3.497µ ± 0% +0.53% (p=0.000 n=10)
geomean 1.858µ 1.893µ +1.89%
│ before.log │ after.log │
│ B/op │ B/op vs base │
EncodeLabelsJson-16 560.0 ± 0% 760.0 ± 0% +35.71% (p=0.000 n=10)
EncodeLabelsString-16 1.039Ki ± 0% 1.039Ki ± 0% ~ (p=0.211 n=10)
geomean 771.9 899.2 +16.50%
│ before.log │ after.log │
│ allocs/op │ allocs/op vs base │
EncodeLabelsJson-16 18.00 ± 0% 18.00 ± 0% ~ (p=1.000 n=10) ¹
EncodeLabelsString-16 9.000 ± 0% 9.000 ± 0% ~ (p=1.000 n=10) ¹
geomean 12.73 12.73 +0.00%
¹ all samples are equal
pkg: github.com/grafana/loki/v3/pkg/storage/stores/shipper/bloomshipper
│ before.log │ after.log │
│ sec/op │ sec/op vs base │
_BlocksCacheOld-16 44.77µ ± 4% 45.27µ ± 1% +1.11% (p=0.022 n=10)
_BlocksCacheNew-16 73.82µ ± 7% 76.97µ ± 7% ~ (p=0.393 n=10)
_Fetcher_processMetasCacheResponse-16 2.741µ ± 3% 2.748µ ± 7% ~ (p=0.853 n=10)
geomean 20.85µ 21.24µ +1.87%
│ before.log │ after.log │
│ B/op │ B/op vs base │
_BlocksCacheOld-16 33.00 ± 9% 33.00 ± 3% ~ (p=0.447 n=10)
_BlocksCacheNew-16 1.030Ki ± 0% 1.032Ki ± 0% ~ (p=0.405 n=10)
_Fetcher_processMetasCacheResponse-16 871.5 ± 1% 872.0 ± 1% ~ (p=0.444 n=10)
geomean 311.9 312.2 +0.08%
│ before.log │ after.log │
│ allocs/op │ allocs/op vs base │
_BlocksCacheOld-16 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=10) ¹
_BlocksCacheNew-16 1.000k ± 0% 1.000k ± 0% ~ (p=1.000 n=10) ¹
_Fetcher_processMetasCacheResponse-16 15.00 ± 0% 15.00 ± 0% ~ (p=1.000 n=10) ¹
geomean ² +0.00% ²
¹ all samples are equal
² summaries must be >0 to compute geomean
pkg: github.com/grafana/loki/v3/pkg/storage/stores/shipper/indexshipper/tsdb
│ before.log │ after.log │
│ sec/op │ sec/op vs base │
TenantHeads/10-16 141.3µ ± 2% 169.0µ ± 3% +19.56% (p=0.000 n=10)
TenantHeads/100-16 1.207m ± 2% 1.523m ± 1% +26.21% (p=0.000 n=10)
TenantHeads/1000-16 11.82m ± 2% 14.15m ± 1% +19.74% (p=0.000 n=10)
IndexClient_Stats-16 22.96µ ± 1% 23.09µ ± 1% +0.57% (p=0.009 n=10)
TSDBIndex_GetChunkRefs-16 2.929m ± 3% 3.008m ± 5% ~ (p=0.315 n=10)
TSDBIndex_Volume-16 456.6µ ± 0% 549.9µ ± 0% +20.44% (p=0.000 n=10)
geomean 629.0µ 719.8µ +14.45%
│ before.log │ after.log │
│ B/op │ B/op vs base │
TenantHeads/10-16 550.0Ki ± 0% 617.9Ki ± 0% +12.34% (p=0.000 n=10)
TenantHeads/100-16 5.293Mi ± 0% 5.934Mi ± 0% +12.11% (p=0.000 n=10)
TenantHeads/1000-16 55.92Mi ± 0% 63.08Mi ± 0% +12.81% (p=0.000 n=10)
IndexClient_Stats-16 2.817Ki ± 3% 3.454Ki ± 4% +22.60% (p=0.000 n=10)
TSDBIndex_GetChunkRefs-16 6.100Mi ± 0% 6.100Mi ± 0% ~ (p=0.436 n=10)
TSDBIndex_Volume-16 51.70Ki ± 0% 114.17Ki ± 0% +120.84% (p=0.000 n=10)
geomean 733.1Ki 917.7Ki +25.18%
│ before.log │ after.log │
│ allocs/op │ allocs/op vs base │
TenantHeads/10-16 2.145k ± 0% 3.146k ± 0% +46.67% (p=0.000 n=10)
TenantHeads/100-16 21.44k ± 0% 31.45k ± 0% +46.67% (p=0.000 n=10)
TenantHeads/1000-16 214.6k ± 0% 314.7k ± 0% +46.64% (p=0.000 n=10)
IndexClient_Stats-16 57.00 ± 0% 59.00 ± 0% +3.51% (p=0.000 n=10)
TSDBIndex_GetChunkRefs-16 43.00 ± 2% 44.00 ± 0% +2.33% (p=0.001 n=10)
TSDBIndex_Volume-16 1.067k ± 0% 3.066k ± 0% +187.35% (p=0.000 n=10)
geomean 1.719k 2.506k +45.79%
pkg: github.com/grafana/loki/v3/pkg/storage/stores/shipper/indexshipper/tsdb/index
│ before.log │ after.log │
│ sec/op │ sec/op vs base │
ChunkStats/version_2/2_chunks-16 160.5n ± 0% 160.5n ± 0% ~ (p=0.490 n=10)
ChunkStats/version_3/2_chunks-16 60.84n ± 6% 59.64n ± 2% ~ (p=0.424 n=10)
ChunkStats/version_2/4_chunks-16 185.0n ± 1% 192.7n ± 0% +4.16% (p=0.000 n=10)
ChunkStats/version_3/4_chunks-16 77.53n ± 8% 79.08n ± 5% ~ (p=0.912 n=10)
ChunkStats/version_2/10_chunks-16 281.9n ± 0% 290.9n ± 0% +3.17% (p=0.000 n=10)
ChunkStats/version_3/10_chunks-16 178.7n ± 6% 171.1n ± 5% ~ (p=0.190 n=10)
ChunkStats/version_2/100_chunks-16 1.494µ ± 0% 1.536µ ± 4% +2.81% (p=0.034 n=10)
ChunkStats/version_3/100_chunks-16 926.8n ± 0% 958.6n ± 1% +3.44% (p=0.000 n=10)
ChunkStats/version_2/1000_chunks-16 13.21µ ± 2% 13.65µ ± 7% ~ (p=0.353 n=10)
ChunkStats/version_3/1000_chunks-16 1.571µ ± 0% 1.584µ ± 1% +0.86% (p=0.001 n=10)
ChunkStats/version_2/10000_chunks-16 159.0µ ± 1% 160.1µ ± 1% ~ (p=0.165 n=10)
ChunkStats/version_3/10000_chunks-16 8.508µ ± 0% 8.513µ ± 1% ~ (p=0.288 n=10)
ChunkStats/version_2/100000_chunks-16 1.728m ± 3% 1.778m ± 1% +2.88% (p=0.003 n=10)
ChunkStats/version_3/100000_chunks-16 112.2µ ± 2% 114.5µ ± 5% ~ (p=0.247 n=10)
ReadChunks/version_2/2_chunks-16 165.2n ± 48% 160.4n ± 47% ~ (p=1.000 n=10)
ReadChunks/version_3/2_chunks-16 57.57n ± 397% 64.45n ± 613% ~ (p=0.143 n=10)
ReadChunks/version_2/4_chunks-16 146.2n ± 244% 139.7n ± 182% ~ (p=0.684 n=10)
ReadChunks/version_3/4_chunks-16 82.53n ± 832% 77.33n ± 1391% ~ (p=0.445 n=7+6)
geomean 1.106µ 1.116µ +0.89%
│ before.log │ after.log │
│ B/op │ B/op vs base │
ChunkStats/version_2/2_chunks-16 24.00 ± 0% 24.00 ± 0% ~ (p=1.000 n=10) ¹
ChunkStats/version_3/2_chunks-16 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=10) ¹
ChunkStats/version_2/4_chunks-16 24.00 ± 0% 24.00 ± 0% ~ (p=1.000 n=10) ¹
ChunkStats/version_3/4_chunks-16 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=10) ¹
ChunkStats/version_2/10_chunks-16 24.00 ± 0% 24.00 ± 0% ~ (p=1.000 n=10) ¹
ChunkStats/version_3/10_chunks-16 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=10) ¹
ChunkStats/version_2/100_chunks-16 24.00 ± 0% 24.00 ± 0% ~ (p=1.000 n=10) ¹
ChunkStats/version_3/100_chunks-16 48.00 ± 0% 48.00 ± 0% ~ (p=1.000 n=10) ¹
ChunkStats/version_2/1000_chunks-16 24.00 ± 0% 24.00 ± 0% ~ (p=1.000 n=10)
ChunkStats/version_3/1000_chunks-16 48.00 ± 0% 48.00 ± 0% ~ (p=1.000 n=10) ¹
ChunkStats/version_2/10000_chunks-16 120.2Ki ± 0% 120.2Ki ± 0% ~ (p=0.712 n=10)
ChunkStats/version_3/10000_chunks-16 53.00 ± 2% 53.00 ± 0% ~ (p=0.303 n=10)
ChunkStats/version_2/100000_chunks-16 3.065Mi ± 0% 3.066Mi ± 0% +0.02% (p=0.001 n=10)
ChunkStats/version_3/100000_chunks-16 296.8Ki ± 0% 296.8Ki ± 0% ~ (p=0.985 n=10)
ReadChunks/version_2/2_chunks-16 191.0 ± ? 189.5 ± ? ~ (p=0.783 n=10)
ReadChunks/version_3/2_chunks-16 0.000 ± ? 0.000 ± ? ~ (p=0.811 n=10)
ReadChunks/version_2/4_chunks-16 380.5 ± ? 404.0 ± ? ~ (p=0.970 n=10)
ReadChunks/version_3/4_chunks-16 0.000 ± ? 0.000 ± ? ~ (p=1.000 n=7+6)
geomean ² +0.29% ²
¹ all samples are equal
² summaries must be >0 to compute geomean
│ before.log │ after.log │
│ allocs/op │ allocs/op vs base │
ChunkStats/version_2/2_chunks-16 1.000 ± 0% 1.000 ± 0% ~ (p=1.000 n=10) ¹
ChunkStats/version_3/2_chunks-16 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=10) ¹
ChunkStats/version_2/4_chunks-16 1.000 ± 0% 1.000 ± 0% ~ (p=1.000 n=10) ¹
ChunkStats/version_3/4_chunks-16 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=10) ¹
ChunkStats/version_2/10_chunks-16 1.000 ± 0% 1.000 ± 0% ~ (p=1.000 n=10) ¹
ChunkStats/version_3/10_chunks-16 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=10) ¹
ChunkStats/version_2/100_chunks-16 1.000 ± 0% 1.000 ± 0% ~ (p=1.000 n=10) ¹
ChunkStats/version_3/100_chunks-16 2.000 ± 0% 2.000 ± 0% ~ (p=1.000 n=10) ¹
ChunkStats/version_2/1000_chunks-16 1.000 ± 0% 1.000 ± 0% ~ (p=1.000 n=10) ¹
ChunkStats/version_3/1000_chunks-16 2.000 ± 0% 2.000 ± 0% ~ (p=1.000 n=10) ¹
ChunkStats/version_2/10000_chunks-16 3.000 ± 0% 3.000 ± 0% ~ (p=1.000 n=10) ¹
ChunkStats/version_3/10000_chunks-16 2.000 ± 0% 2.000 ± 0% ~ (p=1.000 n=10) ¹
ChunkStats/version_2/100000_chunks-16 13.00 ± 0% 13.00 ± 0% ~ (p=1.000 n=10) ¹
ChunkStats/version_3/100000_chunks-16 3.000 ± 0% 3.000 ± 0% ~ (p=1.000 n=10) ¹
ReadChunks/version_2/2_chunks-16 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=10) ¹
ReadChunks/version_3/2_chunks-16 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=10) ¹
ReadChunks/version_2/4_chunks-16 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=10) ¹
ReadChunks/version_3/4_chunks-16 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=7+6) ¹
geomean ² +0.00% ²
¹ all samples are equal
² summaries must be >0 to compute geomean
pkg: github.com/grafana/loki/v3/pkg/storage/stores/shipper/indexshipper/util
│ before.log │ after.log │
│ sec/op │ sec/op vs base │
_DedupeCallback-16 107.0n ± 1% 107.1n ± 0% ~ (p=0.338 n=10)
_MultiQueries/50-16 42.44µ ± 0% 43.90µ ± 1% +3.45% (p=0.000 n=10)
_MultiQueries/100-16 85.10µ ± 0% 87.61µ ± 1% +2.95% (p=0.000 n=10)
_MultiQueries/1000-16 1.414m ± 3% 1.401m ± 3% ~ (p=0.971 n=10)
_MultiQueries/10000-16 14.20m ± 8% 15.18m ± 4% +6.88% (p=0.002 n=10)
_MultiQueries/50000-16 77.12m ± 4% 77.89m ± 4% ~ (p=0.912 n=10)
geomean 290.3µ 296.7µ +2.20%
│ before.log │ after.log │
│ B/op │ B/op vs base │
_DedupeCallback-16 32.00 ± 0% 32.00 ± 0% ~ (p=1.000 n=10) ¹
_MultiQueries/50-16 30.06Ki ± 0% 30.06Ki ± 0% ~ (p=1.000 n=10) ¹
_MultiQueries/100-16 59.81Ki ± 0% 59.81Ki ± 0% ~ (p=1.000 n=10) ¹
_MultiQueries/1000-16 804.5Ki ± 0% 804.5Ki ± 0% ~ (p=0.404 n=10)
_MultiQueries/10000-16 7.742Mi ± 0% 7.742Mi ± 0% ~ (p=0.616 n=10)
_MultiQueries/50000-16 38.29Mi ± 0% 38.29Mi ± 0% +0.00% (p=0.041 n=10)
geomean 155.3Ki 155.3Ki -0.00%
¹ all samples are equal
│ before.log │ after.log │
│ allocs/op │ allocs/op vs base │
_DedupeCallback-16 1.000 ± 0% 1.000 ± 0% ~ (p=1.000 n=10) ¹
_MultiQueries/50-16 507.0 ± 0% 507.0 ± 0% ~ (p=1.000 n=10) ¹
_MultiQueries/100-16 1.007k ± 0% 1.007k ± 0% ~ (p=1.000 n=10) ¹
_MultiQueries/1000-16 14.04k ± 0% 14.04k ± 0% ~ (p=1.000 n=10) ¹
_MultiQueries/10000-16 140.1k ± 0% 140.1k ± 0% ~ (p=0.087 n=10)
_MultiQueries/50000-16 700.2k ± 0% 700.2k ± 0% ~ (p=0.094 n=10)
geomean 2.982k 2.982k +0.00%
¹ all samples are equal
I've noted the once which show a slow down in the description.
Covered in https://github.com/grafana/loki/pull/18490