Skip to content

Conversation

End-rey
Copy link
Contributor

@End-rey End-rey commented Jul 7, 2025

No description provided.

@End-rey End-rey self-assigned this Jul 7, 2025
@End-rey End-rey marked this pull request as draft July 7, 2025 14:24
@End-rey End-rey force-pushed the new-object-structure branch 3 times, most recently from 654e9d3 to 887beeb Compare July 9, 2025 08:47
@End-rey
Copy link
Contributor Author

End-rey commented Jul 9, 2025

The new structure significantly improves Head performance for compressed objects (up to 93.28% faster, 21.54% geomean reduction) and reduces memory usage (36.60% geomean reduction). However, it degrades Get performance (13.94% geomean slower, up to 70.89% worse).


// streamPrefix is the prefix for streamed objects. It is used to distinguish
// streamed objects from regular ones.
streamPrefix = 0x7e
Copy link
Member

Choose a reason for hiding this comment

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

Not really needed, there is versioning in combined format.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

combinedPrefix is only for small objects, but streamPrefix is for everyone, isn't it?

Copy link
Member

Choose a reason for hiding this comment

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

Doesn't matter much to me, the point is that it's not a simple serialized protobuf.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

I didn't really understand. combinedPrefix is written only when the file is combined. Should I make it always written for any objects?

Copy link
Member

Choose a reason for hiding this comment

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

We have to use some prefix anyway, version one of 0x7f is no worse than version zero of 0x7e. It's a bit better to me in fact.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

I tried to implement with version 1, but it turned out to be a very complicated implementation due to backward compatibility. A lot of places are becoming too complicated, due to the support of the prefix for all objects, not just combined ones, and due to the increase in prefix length. I still think that a separate prefix would be better, at least because of the separation of combined objects and the new storage format.

payload = t.Compress(payload)
pLen := len(payload)

data := make([]byte, hLen+pLen+streamDataOff)
Copy link
Member

Choose a reason for hiding this comment

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

Allocation. Which is not really needed.

@@ -329,7 +350,7 @@ func (t *FSTree) getPath(addr oid.Address) (string, error) {
}

// Put puts an object in the storage.
func (t *FSTree) Put(addr oid.Address, data []byte) error {
func (t *FSTree) Put(addr oid.Address, data []byte, header []byte) error {
Copy link
Member

Choose a reason for hiding this comment

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

You better keep the old data semantics and find header/payload chunks of it.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

That is, to parse data during the Put?

Copy link
Member

Choose a reason for hiding this comment

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

That's acceptable to me because the cost of Put is dominated by disk operation time, walking through protobuf is easy here.

pLen := len(payload)
payloadNum := protowire.Number(4)
n := protowire.SizeTag(payloadNum) + protowire.SizeVarint(uint64(pLen))
buf := make([]byte, int(hLen)+pLen+n)
Copy link
Member

Choose a reason for hiding this comment

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

This explains Get() problems. What happens to GetStream()?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Added to commit message GetStream bench test.

@End-rey End-rey force-pushed the new-object-structure branch from 887beeb to 8d0edb0 Compare July 15, 2025 21:22
Copy link

codecov bot commented Jul 15, 2025

Codecov Report

Attention: Patch coverage is 48.17518% with 71 lines in your changes missing coverage. Please review.

Project coverage is 22.99%. Comparing base (b5b8953) to head (4a3982e).
Report is 21 commits behind head on master.

Files with missing lines Patch % Lines
pkg/local_object_storage/blobstor/fstree/head.go 25.27% 63 Missing and 5 partials ⚠️
pkg/local_object_storage/blobstor/fstree/fstree.go 93.47% 2 Missing and 1 partial ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##           master    #3451      +/-   ##
==========================================
+ Coverage   21.46%   22.99%   +1.52%     
==========================================
  Files         704      669      -35     
  Lines       52418    50176    -2242     
==========================================
+ Hits        11251    11536     +285     
+ Misses      40329    37735    -2594     
- Partials      838      905      +67     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@End-rey End-rey force-pushed the new-object-structure branch from 8d0edb0 to 4a3982e Compare July 15, 2025 21:43
Store objects in the format "len(Header)+len(Payload)+header+payload", for quick
reading of Head, GetRange, GetStream.

```
goos: linux
goarch: amd64
pkg: github.com/nspcc-dev/neofs-node/pkg/local_object_storage/blobstor/fstree
cpu: AMD Ryzen 7 PRO 4750U with Radeon Graphics
                                   │  oldGet.txt  │              newGet.txt              │
                                   │    sec/op    │    sec/op      vs base               │
FSTree_Get/Empty/Get_regular-16      69.61µ ±  4%    68.18µ ±  4%        ~ (p=0.394 n=6)
FSTree_Get/Empty/Get_combined-16     86.08µ ±  4%    81.86µ ±  5%   -4.90% (p=0.041 n=6)
FSTree_Get/Empty/Get_compressed-16   39.61µ ±  8%    69.87µ ±  4%  +76.41% (p=0.002 n=6)
FSTree_Get/100B/Get_regular-16       71.42µ ±  5%    70.72µ ±  4%        ~ (p=1.000 n=6)
FSTree_Get/100B/Get_combined-16      86.52µ ±  5%    84.96µ ±  3%        ~ (p=0.310 n=6)
FSTree_Get/100B/Get_compressed-16    35.76µ ± 11%    36.24µ ± 14%        ~ (p=0.937 n=6)
FSTree_Get/4KB/Get_regular-16        77.91µ ±  5%    80.17µ ±  2%        ~ (p=0.065 n=6)
FSTree_Get/4KB/Get_combined-16       95.67µ ±  2%    95.42µ ±  2%        ~ (p=0.589 n=6)
FSTree_Get/4KB/Get_compressed-16     54.92µ ±  9%    62.07µ ±  6%  +13.00% (p=0.009 n=6)
FSTree_Get/16KB/Get_regular-16       95.83µ ±  3%   102.28µ ±  4%   +6.72% (p=0.002 n=6)
FSTree_Get/16KB/Get_combined-16      112.9µ ±  1%    120.4µ ±  3%   +6.64% (p=0.002 n=6)
FSTree_Get/16KB/Get_compressed-16    81.29µ ±  5%    89.98µ ±  2%  +10.68% (p=0.002 n=6)
FSTree_Get/32KB/Get_regular-16       122.9µ ±  2%    151.0µ ±  2%  +22.85% (p=0.002 n=6)
FSTree_Get/32KB/Get_combined-16      145.6µ ±  5%    166.9µ ±  1%  +14.64% (p=0.002 n=6)
FSTree_Get/32KB/Get_compressed-16    107.3µ ±  2%    119.0µ ±  2%  +10.90% (p=0.002 n=6)
FSTree_Get/100KB/Get_regular-16      212.7µ ±  2%    290.8µ ±  3%  +36.74% (p=0.002 n=6)
FSTree_Get/100KB/Get_combined-16     236.1µ ±  1%    305.6µ ±  1%  +29.48% (p=0.002 n=6)
FSTree_Get/100KB/Get_compressed-16   176.7µ ±  2%    201.9µ ±  2%  +14.25% (p=0.002 n=6)
FSTree_Get/1MB/Get_regular-16        1.509m ± 11%    2.015m ± 18%  +33.54% (p=0.002 n=6)
FSTree_Get/1MB/Get_combined-16       1.655m ±  6%    2.382m ±  7%  +43.98% (p=0.002 n=6)
FSTree_Get/1MB/Get_compressed-16     928.4µ ±  3%   1161.3µ ±  2%  +25.08% (p=0.002 n=6)
geomean                              137.0µ          157.2µ        +14.75%

                                   │  oldGet.txt   │              newGet.txt              │
                                   │     B/op      │     B/op       vs base               │
FSTree_Get/Empty/Get_regular-16       9.035Ki ± 5%    9.195Ki ± 4%        ~ (p=0.260 n=6)
FSTree_Get/Empty/Get_combined-16      9.122Ki ± 1%    9.149Ki ± 2%        ~ (p=0.515 n=6)
FSTree_Get/Empty/Get_compressed-16   10.922Ki ± 7%    9.285Ki ± 5%  -14.99% (p=0.002 n=6)
FSTree_Get/100B/Get_regular-16        9.391Ki ± 4%   10.957Ki ± 6%  +16.68% (p=0.002 n=6)
FSTree_Get/100B/Get_combined-16       9.424Ki ± 1%   11.063Ki ± 2%  +17.39% (p=0.002 n=6)
FSTree_Get/100B/Get_compressed-16     10.94Ki ± 7%    11.18Ki ± 6%        ~ (p=0.589 n=6)
FSTree_Get/4KB/Get_regular-16         17.71Ki ± 2%    23.81Ki ± 1%  +34.46% (p=0.002 n=6)
FSTree_Get/4KB/Get_combined-16        17.62Ki ± 1%    23.70Ki ± 0%  +34.50% (p=0.002 n=6)
FSTree_Get/4KB/Get_compressed-16      23.65Ki ± 1%    28.54Ki ± 1%  +20.66% (p=0.002 n=6)
FSTree_Get/16KB/Get_regular-16        41.64Ki ± 1%    59.77Ki ± 0%  +43.54% (p=0.002 n=6)
FSTree_Get/16KB/Get_combined-16       41.68Ki ± 0%    59.69Ki ± 0%  +43.20% (p=0.002 n=6)
FSTree_Get/16KB/Get_compressed-16     59.70Ki ± 1%    77.48Ki ± 0%  +29.77% (p=0.002 n=6)
FSTree_Get/32KB/Get_regular-16        79.53Ki ± 0%   119.73Ki ± 0%  +50.55% (p=0.002 n=6)
FSTree_Get/32KB/Get_combined-16       79.68Ki ± 0%   119.66Ki ± 0%  +50.17% (p=0.002 n=6)
FSTree_Get/32KB/Get_compressed-16     119.8Ki ± 0%    159.8Ki ± 0%  +33.35% (p=0.002 n=6)
FSTree_Get/100KB/Get_regular-16       215.9Ki ± 0%    319.8Ki ± 0%  +48.15% (p=0.002 n=6)
FSTree_Get/100KB/Get_combined-16      215.7Ki ± 0%    319.6Ki ± 0%  +48.15% (p=0.002 n=6)
FSTree_Get/100KB/Get_compressed-16    319.7Ki ± 0%    423.7Ki ± 0%  +32.52% (p=0.002 n=6)
FSTree_Get/1MB/Get_regular-16         2.016Mi ± 0%    3.023Mi ± 0%  +49.99% (p=0.002 n=6)
FSTree_Get/1MB/Get_combined-16        2.015Mi ± 0%    3.023Mi ± 0%  +50.01% (p=0.002 n=6)
FSTree_Get/1MB/Get_compressed-16      3.023Mi ± 0%    4.031Mi ± 0%  +33.32% (p=0.002 n=6)
geomean                               64.48Ki         82.69Ki       +28.25%

                                   │ oldGet.txt  │            newGet.txt             │
                                   │  allocs/op  │  allocs/op   vs base              │
FSTree_Get/Empty/Get_regular-16      134.5 ±  7%   136.5 ±  8%       ~ (p=0.455 n=6)
FSTree_Get/Empty/Get_combined-16     135.5 ±  2%   136.5 ±  3%       ~ (p=0.455 n=6)
FSTree_Get/Empty/Get_compressed-16   148.0 ± 15%   140.0 ±  5%       ~ (p=0.156 n=6)
FSTree_Get/100B/Get_regular-16       137.0 ±  6%   137.0 ±  7%       ~ (p=1.000 n=6)
FSTree_Get/100B/Get_combined-16      136.0 ±  1%   137.0 ±  3%  +0.74% (p=0.045 n=6)
FSTree_Get/100B/Get_compressed-16    137.0 ±  9%   136.0 ± 10%       ~ (p=0.909 n=6)
FSTree_Get/4KB/Get_regular-16        139.0 ±  6%   142.5 ±  5%       ~ (p=0.290 n=6)
FSTree_Get/4KB/Get_combined-16       136.5 ±  3%   138.5 ±  2%       ~ (p=0.095 n=6)
FSTree_Get/4KB/Get_compressed-16     137.0 ±  7%   143.5 ±  5%       ~ (p=0.091 n=6)
FSTree_Get/16KB/Get_regular-16       138.0 ±  7%   142.0 ±  5%       ~ (p=0.481 n=6)
FSTree_Get/16KB/Get_combined-16      137.0 ±  1%   138.5 ±  2%       ~ (p=0.126 n=6)
FSTree_Get/16KB/Get_compressed-16    139.0 ±  6%   134.0 ±  7%       ~ (p=0.130 n=6)
FSTree_Get/32KB/Get_regular-16       134.0 ±  8%   140.5 ±  4%  +4.85% (p=0.030 n=6)
FSTree_Get/32KB/Get_combined-16      137.5 ±  3%   138.0 ±  2%       ~ (p=0.920 n=6)
FSTree_Get/32KB/Get_compressed-16    142.0 ±  5%   142.0 ±  7%       ~ (p=0.916 n=6)
FSTree_Get/100KB/Get_regular-16      143.0 ± 12%   142.5 ±  8%       ~ (p=0.784 n=6)
FSTree_Get/100KB/Get_combined-16     139.0 ±  1%   137.0 ±  3%       ~ (p=0.245 n=6)
FSTree_Get/100KB/Get_compressed-16   140.0 ±  6%   139.0 ±  6%       ~ (p=0.781 n=6)
FSTree_Get/1MB/Get_regular-16        140.0 ±  6%   139.5 ±  5%       ~ (p=0.900 n=6)
FSTree_Get/1MB/Get_combined-16       136.5 ±  3%   139.0 ±  2%       ~ (p=0.167 n=6)
FSTree_Get/1MB/Get_compressed-16     143.0 ±  5%   133.0 ±  5%  -6.99% (p=0.011 n=6)
geomean                              138.5         138.7        +0.11%

                                     │  oldHead.txt  │            newHead.txt             │
                                     │    sec/op     │   sec/op     vs base               │
FSTree_Head/Empty/Head_regular-16       85.25µ ±  3%   86.09µ ± 2%        ~ (p=0.132 n=6)
FSTree_Head/Empty/Head_combined-16      87.18µ ±  2%   88.98µ ± 1%   +2.07% (p=0.009 n=6)
FSTree_Head/Empty/Head_compressed-16    69.68µ ± 10%   86.31µ ± 2%  +23.87% (p=0.002 n=6)
FSTree_Head/100B/Head_regular-16        87.74µ ±  2%   85.86µ ± 4%        ~ (p=0.394 n=6)
FSTree_Head/100B/Head_combined-16       88.48µ ±  2%   89.27µ ± 2%   +0.89% (p=0.041 n=6)
FSTree_Head/100B/Head_compressed-16     72.00µ ±  5%   81.52µ ± 6%  +13.24% (p=0.002 n=6)
FSTree_Head/4KB/Head_regular-16         90.90µ ±  2%   90.57µ ± 5%        ~ (p=0.937 n=6)
FSTree_Head/4KB/Head_combined-16        98.41µ ±  3%   96.54µ ± 1%   -1.90% (p=0.041 n=6)
FSTree_Head/4KB/Head_compressed-16      76.73µ ±  5%   84.40µ ± 5%   +9.99% (p=0.002 n=6)
FSTree_Head/16KB/Head_regular-16        89.46µ ±  3%   91.33µ ± 3%   +2.08% (p=0.041 n=6)
FSTree_Head/16KB/Head_combined-16       117.8µ ±  2%   119.2µ ± 1%   +1.19% (p=0.015 n=6)
FSTree_Head/16KB/Head_compressed-16    154.23µ ±  3%   84.44µ ± 6%  -45.25% (p=0.002 n=6)
FSTree_Head/32KB/Head_regular-16        88.19µ ±  4%   97.20µ ± 3%  +10.21% (p=0.002 n=6)
FSTree_Head/32KB/Head_combined-16       118.0µ ±  3%   126.3µ ± 1%   +6.98% (p=0.002 n=6)
FSTree_Head/32KB/Head_compressed-16    175.94µ ±  3%   90.65µ ± 6%  -48.48% (p=0.002 n=6)
FSTree_Head/100KB/Head_regular-16       92.66µ ±  6%   99.57µ ± 3%   +7.46% (p=0.002 n=6)
FSTree_Head/100KB/Head_combined-16      118.8µ ±  1%   131.1µ ± 3%  +10.36% (p=0.002 n=6)
FSTree_Head/100KB/Head_compressed-16   241.29µ ±  1%   96.14µ ± 5%  -60.16% (p=0.002 n=6)
FSTree_Head/1MB/Head_regular-16         88.83µ ±  2%   93.01µ ± 3%   +4.71% (p=0.009 n=6)
FSTree_Head/1MB/Head_combined-16        109.5µ ± 21%   132.4µ ± 5%  +20.96% (p=0.026 n=6)
FSTree_Head/1MB/Head_compressed-16     799.82µ ±  5%   90.12µ ± 2%  -88.73% (p=0.002 n=6)
geomean                                 112.7µ         96.11µ       -14.69%

                                     │  oldHead.txt  │             newHead.txt             │
                                     │     B/op      │     B/op      vs base               │
FSTree_Head/Empty/Head_regular-16       40.01Ki ± 1%   40.00Ki ± 1%        ~ (p=0.974 n=6)
FSTree_Head/Empty/Head_combined-16      40.06Ki ± 0%   40.07Ki ± 0%        ~ (p=0.589 n=6)
FSTree_Head/Empty/Head_compressed-16    41.64Ki ± 1%   40.14Ki ± 1%   -3.60% (p=0.002 n=6)
FSTree_Head/100B/Head_regular-16        40.39Ki ± 1%   39.82Ki ± 1%   -1.41% (p=0.002 n=6)
FSTree_Head/100B/Head_combined-16       40.21Ki ± 0%   39.84Ki ± 0%   -0.93% (p=0.002 n=6)
FSTree_Head/100B/Head_compressed-16     42.01Ki ± 1%   47.69Ki ± 1%  +13.52% (p=0.002 n=6)
FSTree_Head/4KB/Head_regular-16         44.10Ki ± 1%   39.96Ki ± 1%   -9.38% (p=0.002 n=6)
FSTree_Head/4KB/Head_combined-16        44.09Ki ± 0%   39.72Ki ± 1%   -9.91% (p=0.002 n=6)
FSTree_Head/4KB/Head_compressed-16      50.05Ki ± 1%   58.36Ki ± 1%  +16.61% (p=0.002 n=6)
FSTree_Head/16KB/Head_regular-16        39.69Ki ± 1%   39.77Ki ± 1%        ~ (p=0.416 n=6)
FSTree_Head/16KB/Head_combined-16       39.71Ki ± 0%   39.76Ki ± 0%        ~ (p=0.240 n=6)
FSTree_Head/16KB/Head_compressed-16    119.46Ki ± 0%   63.55Ki ± 1%  -46.80% (p=0.002 n=6)
FSTree_Head/32KB/Head_regular-16        39.41Ki ± 1%   39.83Ki ± 1%        ~ (p=0.074 n=6)
FSTree_Head/32KB/Head_combined-16       39.70Ki ± 0%   39.72Ki ± 0%        ~ (p=0.699 n=6)
FSTree_Head/32KB/Head_compressed-16    173.47Ki ± 0%   85.55Ki ± 1%  -50.68% (p=0.002 n=6)
FSTree_Head/100KB/Head_regular-16       40.00Ki ± 1%   39.73Ki ± 1%        ~ (p=0.485 n=6)
FSTree_Head/100KB/Head_combined-16      39.68Ki ± 0%   39.75Ki ± 0%        ~ (p=0.093 n=6)
FSTree_Head/100KB/Head_compressed-16    373.6Ki ± 0%   149.5Ki ± 0%  -59.99% (p=0.002 n=6)
FSTree_Head/1MB/Head_regular-16         39.67Ki ± 1%   39.74Ki ± 1%        ~ (p=0.974 n=6)
FSTree_Head/1MB/Head_combined-16        39.67Ki ± 0%   39.81Ki ± 0%   +0.37% (p=0.004 n=6)
FSTree_Head/1MB/Head_compressed-16     2661.4Ki ± 0%   181.5Ki ± 0%  -93.18% (p=0.002 n=6)
geomean                                 62.75Ki        49.68Ki       -20.84%

                                     │ oldHead.txt │            newHead.txt             │
                                     │  allocs/op  │  allocs/op   vs base               │
FSTree_Head/Empty/Head_regular-16      136.5 ±  7%   136.5 ±  7%        ~ (p=0.751 n=6)
FSTree_Head/Empty/Head_combined-16     138.0 ±  2%   138.0 ±  3%        ~ (p=0.898 n=6)
FSTree_Head/Empty/Head_compressed-16   141.5 ±  4%   141.0 ±  4%        ~ (p=0.424 n=6)
FSTree_Head/100B/Head_regular-16       145.0 ±  4%   141.5 ±  8%        ~ (p=0.284 n=6)
FSTree_Head/100B/Head_combined-16      140.0 ±  1%   142.5 ±  1%   +1.79% (p=0.009 n=6)
FSTree_Head/100B/Head_compressed-16    142.5 ±  6%   176.5 ±  5%  +23.86% (p=0.002 n=6)
FSTree_Head/4KB/Head_regular-16        141.5 ±  6%   146.0 ± 11%        ~ (p=0.797 n=6)
FSTree_Head/4KB/Head_combined-16       140.0 ±  3%   139.5 ±  3%        ~ (p=0.900 n=6)
FSTree_Head/4KB/Head_compressed-16     140.5 ±  5%   178.5 ±  9%  +27.05% (p=0.002 n=6)
FSTree_Head/16KB/Head_regular-16       139.5 ±  8%   141.5 ±  5%        ~ (p=0.457 n=6)
FSTree_Head/16KB/Head_combined-16      140.0 ±  4%   140.0 ±  3%        ~ (p=0.745 n=6)
FSTree_Head/16KB/Head_compressed-16    176.5 ±  6%   174.5 ±  4%        ~ (p=0.660 n=6)
FSTree_Head/32KB/Head_regular-16       132.0 ± 11%   143.0 ±  6%        ~ (p=0.091 n=6)
FSTree_Head/32KB/Head_combined-16      139.5 ±  3%   139.5 ±  3%        ~ (p=0.905 n=6)
FSTree_Head/32KB/Head_compressed-16    177.0 ±  7%   174.5 ±  6%        ~ (p=0.810 n=6)
FSTree_Head/100KB/Head_regular-16      148.5 ±  8%   139.5 ±  9%        ~ (p=0.359 n=6)
FSTree_Head/100KB/Head_combined-16     139.5 ±  3%   140.0 ±  1%        ~ (p=0.697 n=6)
FSTree_Head/100KB/Head_compressed-16   181.0 ±  7%   172.5 ±  6%        ~ (p=0.158 n=6)
FSTree_Head/1MB/Head_regular-16        139.5 ±  5%   139.5 ±  9%        ~ (p=0.801 n=6)
FSTree_Head/1MB/Head_combined-16       139.0 ±  2%   142.0 ±  2%   +2.16% (p=0.024 n=6)
FSTree_Head/1MB/Head_compressed-16     179.0 ±  4%   173.0 ±  3%   -3.35% (p=0.028 n=6)
geomean                                146.7         149.7         +2.02%

                                                            │ oldRange.txt  │             newRange.txt             │
                                                            │    sec/op     │    sec/op      vs base               │
FSTree_GetRange/size=10MB,off=1MB,len=4KB/regular-16           276.7µ ± 10%    258.5µ ±  5%        ~ (p=0.180 n=6)
FSTree_GetRange/size=10MB,off=1MB,len=4KB/compressed-16        273.1µ ±  5%    267.2µ ±  3%        ~ (p=0.093 n=6)
FSTree_GetRange/size=10MB,off=1MB,len=4KB/combined-16          394.8µ ±  4%    330.9µ ±  8%  -16.18% (p=0.002 n=6)
FSTree_GetRange/size=10MB,off=Empty,len=10MB/regular-16        3.633m ±  4%    3.802m ±  3%   +4.64% (p=0.004 n=6)
FSTree_GetRange/size=10MB,off=Empty,len=10MB/compressed-16     3.661m ±  3%    3.770m ±  4%        ~ (p=0.065 n=6)
FSTree_GetRange/size=10MB,off=Empty,len=10MB/combined-16       3.627m ±  5%    3.759m ±  4%        ~ (p=0.132 n=6)
FSTree_GetRange/size=10MB,off=Empty,len=Empty/regular-16       3.660m ±  3%    3.831m ±  6%        ~ (p=0.065 n=6)
FSTree_GetRange/size=10MB,off=Empty,len=Empty/compressed-16    3.722m ±  9%    3.805m ±  3%        ~ (p=0.240 n=6)
FSTree_GetRange/size=10MB,off=Empty,len=Empty/combined-16      3.625m ±  4%    3.722m ±  4%   +2.69% (p=0.026 n=6)
FSTree_GetRange/size=1MB,off=1KB,len=4KB/regular-16           102.77µ ±  1%    97.48µ ±  1%   -5.15% (p=0.002 n=6)
FSTree_GetRange/size=1MB,off=1KB,len=4KB/compressed-16        104.37µ ±  1%    97.82µ ±  1%   -6.28% (p=0.002 n=6)
FSTree_GetRange/size=1MB,off=1KB,len=4KB/combined-16          100.44µ ±  1%    97.27µ ±  4%   -3.16% (p=0.041 n=6)
FSTree_GetRange/size=1MB,off=Empty,len=1MB/regular-16          980.1µ ±  4%    892.1µ ±  4%   -8.97% (p=0.002 n=6)
FSTree_GetRange/size=1MB,off=Empty,len=1MB/compressed-16       972.1µ ±  4%    951.4µ ±  6%        ~ (p=0.093 n=6)
FSTree_GetRange/size=1MB,off=Empty,len=1MB/combined-16         984.6µ ±  4%   1028.0µ ±  2%   +4.41% (p=0.009 n=6)
FSTree_GetRange/size=1MB,off=Empty,len=Empty/regular-16        941.9µ ±  4%    842.8µ ±  6%  -10.52% (p=0.002 n=6)
FSTree_GetRange/size=1MB,off=Empty,len=Empty/compressed-16     942.1µ ±  3%    859.7µ ± 10%   -8.74% (p=0.002 n=6)
FSTree_GetRange/size=1MB,off=Empty,len=Empty/combined-16       977.4µ ±  4%   1038.1µ ±  6%   +6.22% (p=0.026 n=6)
FSTree_GetRange/size=4KB,off=Empty,len=4KB/regular-16          99.54µ ±  4%   100.73µ ±  3%   +1.20% (p=0.041 n=6)
FSTree_GetRange/size=4KB,off=Empty,len=4KB/compressed-16       99.09µ ±  2%   101.22µ ±  2%   +2.15% (p=0.026 n=6)
FSTree_GetRange/size=4KB,off=Empty,len=4KB/combined-16         100.7µ ±  2%    100.4µ ±  2%        ~ (p=0.485 n=6)
FSTree_GetRange/size=4KB,off=Empty,len=Empty/regular-16       102.78µ ±  2%    97.85µ ±  1%   -4.79% (p=0.002 n=6)
FSTree_GetRange/size=4KB,off=Empty,len=Empty/compressed-16    102.10µ ±  1%    97.04µ ±  1%   -4.96% (p=0.002 n=6)
FSTree_GetRange/size=4KB,off=Empty,len=Empty/combined-16       100.2µ ±  3%    101.0µ ±  3%        ~ (p=0.132 n=6)
FSTree_GetRange/size=4KB,off=1KB,len=1KB/regular-16            99.97µ ±  1%   103.14µ ±  1%   +3.17% (p=0.002 n=6)
FSTree_GetRange/size=4KB,off=1KB,len=1KB/compressed-16         100.3µ ±  1%    103.1µ ±  3%        ~ (p=0.132 n=6)
FSTree_GetRange/size=4KB,off=1KB,len=1KB/combined-16          100.47µ ±  3%    99.91µ ±  3%        ~ (p=0.485 n=6)
geomean                                                        419.6µ          412.9µ         -1.60%

                                                            │ oldRange.txt │            newRange.txt            │
                                                            │     B/op     │     B/op      vs base              │
FSTree_GetRange/size=10MB,off=1MB,len=4KB/regular-16          43.78Ki ± 0%   43.85Ki ± 0%  +0.16% (p=0.002 n=6)
FSTree_GetRange/size=10MB,off=1MB,len=4KB/compressed-16       43.78Ki ± 0%   43.85Ki ± 0%  +0.16% (p=0.002 n=6)
FSTree_GetRange/size=10MB,off=1MB,len=4KB/combined-16         43.84Ki ± 0%   43.92Ki ± 0%  +0.20% (p=0.041 n=6)
FSTree_GetRange/size=10MB,off=Empty,len=10MB/regular-16       10.04Mi ± 0%   10.04Mi ± 0%  +0.00% (p=0.002 n=6)
FSTree_GetRange/size=10MB,off=Empty,len=10MB/compressed-16    10.04Mi ± 0%   10.04Mi ± 0%  +0.00% (p=0.002 n=6)
FSTree_GetRange/size=10MB,off=Empty,len=10MB/combined-16      10.04Mi ± 0%   10.04Mi ± 0%  +0.00% (p=0.002 n=6)
FSTree_GetRange/size=10MB,off=Empty,len=Empty/regular-16      10.04Mi ± 0%   10.04Mi ± 0%  +0.01% (p=0.002 n=6)
FSTree_GetRange/size=10MB,off=Empty,len=Empty/compressed-16   10.04Mi ± 0%   10.04Mi ± 0%  +0.01% (p=0.002 n=6)
FSTree_GetRange/size=10MB,off=Empty,len=Empty/combined-16     10.04Mi ± 0%   10.04Mi ± 0%  +0.00% (p=0.002 n=6)
FSTree_GetRange/size=1MB,off=1KB,len=4KB/regular-16           44.23Ki ± 0%   44.01Ki ± 0%  -0.51% (p=0.002 n=6)
FSTree_GetRange/size=1MB,off=1KB,len=4KB/compressed-16        44.24Ki ± 0%   44.01Ki ± 0%  -0.52% (p=0.002 n=6)
FSTree_GetRange/size=1MB,off=1KB,len=4KB/combined-16          43.92Ki ± 0%   43.99Ki ± 0%  +0.15% (p=0.041 n=6)
FSTree_GetRange/size=1MB,off=Empty,len=1MB/regular-16         1.039Mi ± 0%   1.039Mi ± 0%  +0.01% (p=0.002 n=6)
FSTree_GetRange/size=1MB,off=Empty,len=1MB/compressed-16      1.039Mi ± 0%   1.039Mi ± 0%  +0.00% (p=0.002 n=6)
FSTree_GetRange/size=1MB,off=Empty,len=1MB/combined-16        1.039Mi ± 0%   1.039Mi ± 0%       ~ (p=0.065 n=6)
FSTree_GetRange/size=1MB,off=Empty,len=Empty/regular-16       1.039Mi ± 0%   1.039Mi ± 0%  +0.02% (p=0.002 n=6)
FSTree_GetRange/size=1MB,off=Empty,len=Empty/compressed-16    1.039Mi ± 0%   1.039Mi ± 0%  +0.02% (p=0.002 n=6)
FSTree_GetRange/size=1MB,off=Empty,len=Empty/combined-16      1.039Mi ± 0%   1.039Mi ± 0%       ~ (p=0.394 n=6)
FSTree_GetRange/size=4KB,off=Empty,len=4KB/regular-16         48.00Ki ± 0%   43.98Ki ± 0%  -8.38% (p=0.002 n=6)
FSTree_GetRange/size=4KB,off=Empty,len=4KB/compressed-16      48.00Ki ± 0%   43.98Ki ± 0%  -8.38% (p=0.002 n=6)
FSTree_GetRange/size=4KB,off=Empty,len=4KB/combined-16        48.11Ki ± 0%   43.85Ki ± 0%  -8.84% (p=0.002 n=6)
FSTree_GetRange/size=4KB,off=Empty,len=Empty/regular-16       48.41Ki ± 0%   43.63Ki ± 0%  -9.86% (p=0.002 n=6)
FSTree_GetRange/size=4KB,off=Empty,len=Empty/compressed-16    48.41Ki ± 0%   43.63Ki ± 0%  -9.86% (p=0.002 n=6)
FSTree_GetRange/size=4KB,off=Empty,len=Empty/combined-16      48.09Ki ± 0%   43.87Ki ± 0%  -8.78% (p=0.002 n=6)
FSTree_GetRange/size=4KB,off=1KB,len=1KB/regular-16           45.09Ki ± 0%   41.41Ki ± 0%  -8.16% (p=0.002 n=6)
FSTree_GetRange/size=4KB,off=1KB,len=1KB/compressed-16        45.09Ki ± 0%   41.40Ki ± 0%  -8.17% (p=0.002 n=6)
FSTree_GetRange/size=4KB,off=1KB,len=1KB/combined-16          45.16Ki ± 0%   40.96Ki ± 0%  -9.29% (p=0.002 n=6)
geomean                                                       307.0Ki        297.6Ki       -3.06%

                                                            │ oldRange.txt │           newRange.txt            │
                                                            │  allocs/op   │ allocs/op   vs base               │
FSTree_GetRange/size=10MB,off=1MB,len=4KB/regular-16            142.0 ± 0%   143.0 ± 0%   +0.70% (p=0.002 n=6)
FSTree_GetRange/size=10MB,off=1MB,len=4KB/compressed-16         142.0 ± 0%   143.0 ± 0%   +0.70% (p=0.002 n=6)
FSTree_GetRange/size=10MB,off=1MB,len=4KB/combined-16           141.5 ± 3%   143.0 ± 1%        ~ (p=0.141 n=6)
FSTree_GetRange/size=10MB,off=Empty,len=10MB/regular-16         137.0 ± 0%   147.0 ± 0%   +7.30% (p=0.002 n=6)
FSTree_GetRange/size=10MB,off=Empty,len=10MB/compressed-16      137.0 ± 0%   147.0 ± 0%   +7.30% (p=0.002 n=6)
FSTree_GetRange/size=10MB,off=Empty,len=10MB/combined-16        140.5 ± 0%   143.5 ± 2%   +2.14% (p=0.022 n=6)
FSTree_GetRange/size=10MB,off=Empty,len=Empty/regular-16        129.0 ± 0%   146.0 ± 0%  +13.18% (p=0.002 n=6)
FSTree_GetRange/size=10MB,off=Empty,len=Empty/compressed-16     129.0 ± 0%   146.0 ± 0%  +13.18% (p=0.002 n=6)
FSTree_GetRange/size=10MB,off=Empty,len=Empty/combined-16       138.5 ± 2%   143.0 ± 1%   +3.25% (p=0.002 n=6)
FSTree_GetRange/size=1MB,off=1KB,len=4KB/regular-16             149.0 ± 0%   143.0 ± 0%   -4.03% (p=0.002 n=6)
FSTree_GetRange/size=1MB,off=1KB,len=4KB/compressed-16          149.0 ± 0%   143.0 ± 0%   -4.03% (p=0.002 n=6)
FSTree_GetRange/size=1MB,off=1KB,len=4KB/combined-16            141.5 ± 1%   142.5 ± 4%        ~ (p=0.262 n=6)
FSTree_GetRange/size=1MB,off=Empty,len=1MB/regular-16           144.0 ± 0%   146.0 ± 0%   +1.39% (p=0.002 n=6)
FSTree_GetRange/size=1MB,off=Empty,len=1MB/compressed-16        144.0 ± 0%   146.0 ± 0%   +1.39% (p=0.002 n=6)
FSTree_GetRange/size=1MB,off=Empty,len=1MB/combined-16          141.5 ± 0%   142.0 ± 3%        ~ (p=0.457 n=6)
FSTree_GetRange/size=1MB,off=Empty,len=Empty/regular-16         145.0 ± 0%   150.0 ± 0%   +3.45% (p=0.002 n=6)
FSTree_GetRange/size=1MB,off=Empty,len=Empty/compressed-16      145.0 ± 0%   150.0 ± 0%   +3.45% (p=0.002 n=6)
FSTree_GetRange/size=1MB,off=Empty,len=Empty/combined-16        141.5 ± 1%   141.5 ± 1%        ~ (p=0.994 n=6)
FSTree_GetRange/size=4KB,off=Empty,len=4KB/regular-16           137.0 ± 0%   146.0 ± 0%   +6.57% (p=0.002 n=6)
FSTree_GetRange/size=4KB,off=Empty,len=4KB/compressed-16        137.0 ± 0%   146.0 ± 0%   +6.57% (p=0.002 n=6)
FSTree_GetRange/size=4KB,off=Empty,len=4KB/combined-16          139.5 ± 2%   142.0 ± 2%        ~ (p=0.082 n=6)
FSTree_GetRange/size=4KB,off=Empty,len=Empty/regular-16         148.0 ± 0%   135.0 ± 0%   -8.78% (p=0.002 n=6)
FSTree_GetRange/size=4KB,off=Empty,len=Empty/compressed-16      148.0 ± 0%   135.0 ± 0%   -8.78% (p=0.002 n=6)
FSTree_GetRange/size=4KB,off=Empty,len=Empty/combined-16        139.0 ± 3%   142.5 ± 1%   +2.52% (p=0.037 n=6)
FSTree_GetRange/size=4KB,off=1KB,len=1KB/regular-16             140.0 ± 0%   154.0 ± 0%  +10.00% (p=0.002 n=6)
FSTree_GetRange/size=4KB,off=1KB,len=1KB/compressed-16          140.0 ± 0%   154.0 ± 0%  +10.00% (p=0.002 n=6)
FSTree_GetRange/size=4KB,off=1KB,len=1KB/combined-16            141.0 ± 3%   142.5 ± 2%        ~ (p=0.355 n=6)
geomean                                                         140.9        144.5        +2.54%

                                                      │ oldStream.txt │            newStream.txt             │
                                                      │    sec/op     │    sec/op      vs base               │
FSTree_GetStream/Empty/GetStream_regular-16              76.45µ ±  4%    73.36µ ±  6%        ~ (p=0.093 n=6)
FSTree_GetStream/Empty/GetStream_combined-16             78.77µ ±  6%    75.85µ ±  6%        ~ (p=0.132 n=6)
FSTree_GetStream/Empty/GetStream_compressed-16           60.46µ ± 12%    74.30µ ±  5%  +22.90% (p=0.002 n=6)
FSTree_GetStream/Empty/GetStream_with_payload_read-16    58.42µ ± 10%    78.13µ ±  4%  +33.74% (p=0.002 n=6)
FSTree_GetStream/100B/GetStream_regular-16               77.34µ ±  5%    78.40µ ±  6%        ~ (p=0.485 n=6)
FSTree_GetStream/100B/GetStream_combined-16              79.85µ ±  3%    79.55µ ±  5%        ~ (p=0.937 n=6)
FSTree_GetStream/100B/GetStream_compressed-16            58.35µ ± 12%    63.90µ ±  8%        ~ (p=0.065 n=6)
FSTree_GetStream/100B/GetStream_with_payload_read-16     58.50µ ± 10%    96.01µ ±  7%  +64.10% (p=0.002 n=6)
FSTree_GetStream/4KB/GetStream_regular-16                80.55µ ±  5%    87.08µ ±  6%   +8.09% (p=0.002 n=6)
FSTree_GetStream/4KB/GetStream_combined-16               88.60µ ±  2%    93.28µ ±  8%   +5.28% (p=0.004 n=6)
FSTree_GetStream/4KB/GetStream_compressed-16             62.76µ ± 13%    67.13µ ±  6%        ~ (p=0.180 n=6)
FSTree_GetStream/4KB/GetStream_with_payload_read-16      69.95µ ±  6%   126.12µ ±  9%  +80.30% (p=0.002 n=6)
FSTree_GetStream/16KB/GetStream_regular-16               78.75µ ±  6%    97.42µ ±  5%  +23.70% (p=0.002 n=6)
FSTree_GetStream/16KB/GetStream_combined-16              102.8µ ±  3%    134.3µ ±  3%  +30.70% (p=0.002 n=6)
FSTree_GetStream/16KB/GetStream_compressed-16           142.49µ ±  7%    67.82µ ± 31%  -52.40% (p=0.002 n=6)
FSTree_GetStream/16KB/GetStream_with_payload_read-16     166.8µ ±  5%    158.1µ ±  5%   -5.22% (p=0.015 n=6)
FSTree_GetStream/32KB/GetStream_regular-16               81.14µ ±  5%    82.27µ ±  6%        ~ (p=0.818 n=6)
FSTree_GetStream/32KB/GetStream_combined-16              105.0µ ±  5%    108.3µ ±  4%        ~ (p=0.240 n=6)
FSTree_GetStream/32KB/GetStream_compressed-16           164.59µ ±  6%    73.07µ ±  6%  -55.61% (p=0.002 n=6)
FSTree_GetStream/32KB/GetStream_with_payload_read-16     202.3µ ±  5%    193.8µ ±  3%   -4.19% (p=0.002 n=6)
FSTree_GetStream/100KB/GetStream_regular-16              81.49µ ±  6%    83.25µ ±  2%        ~ (p=0.558 n=6)
FSTree_GetStream/100KB/GetStream_combined-16             111.0µ ±  6%    108.3µ ±  3%        ~ (p=0.065 n=6)
FSTree_GetStream/100KB/GetStream_compressed-16          212.90µ ±  6%    81.45µ ±  4%  -61.74% (p=0.002 n=6)
FSTree_GetStream/100KB/GetStream_with_payload_read-16    356.5µ ±  4%    341.1µ ±  8%        ~ (p=0.132 n=6)
FSTree_GetStream/1MB/GetStream_regular-16                79.85µ ±  9%    85.54µ ±  5%   +7.12% (p=0.026 n=6)
FSTree_GetStream/1MB/GetStream_combined-16               112.4µ ±  5%    111.2µ ±  4%        ~ (p=0.240 n=6)
FSTree_GetStream/1MB/GetStream_compressed-16            778.17µ ±  6%    78.41µ ±  6%  -89.92% (p=0.002 n=6)
FSTree_GetStream/1MB/GetStream_with_payload_read-16      2.015m ±  8%    2.161m ±  3%   +7.25% (p=0.009 n=6)
geomean                                                  116.6µ          106.7µ         -8.54%

                                                      │ oldStream.txt │            newStream.txt            │
                                                      │     B/op      │     B/op      vs base               │
FSTree_GetStream/Empty/GetStream_regular-16              40.13Ki ± 1%   39.95Ki ± 1%        ~ (p=0.290 n=6)
FSTree_GetStream/Empty/GetStream_combined-16             40.11Ki ± 0%   40.07Ki ± 0%        ~ (p=0.143 n=6)
FSTree_GetStream/Empty/GetStream_compressed-16           41.56Ki ± 1%   40.17Ki ± 1%   -3.35% (p=0.002 n=6)
FSTree_GetStream/Empty/GetStream_with_payload_read-16    41.91Ki ± 1%   40.68Ki ± 1%   -2.93% (p=0.002 n=6)
FSTree_GetStream/100B/GetStream_regular-16               40.16Ki ± 1%   39.88Ki ± 1%        ~ (p=0.180 n=6)
FSTree_GetStream/100B/GetStream_combined-16              40.11Ki ± 0%   39.76Ki ± 0%   -0.89% (p=0.002 n=6)
FSTree_GetStream/100B/GetStream_compressed-16            42.00Ki ± 1%   47.62Ki ± 1%  +13.37% (p=0.002 n=6)
FSTree_GetStream/100B/GetStream_with_payload_read-16     42.39Ki ± 1%   48.31Ki ± 1%  +13.98% (p=0.002 n=6)
FSTree_GetStream/4KB/GetStream_regular-16                43.91Ki ± 0%   39.71Ki ± 1%   -9.55% (p=0.002 n=6)
FSTree_GetStream/4KB/GetStream_combined-16               44.09Ki ± 0%   39.78Ki ± 0%   -9.78% (p=0.002 n=6)
FSTree_GetStream/4KB/GetStream_compressed-16             50.27Ki ± 1%   58.05Ki ± 0%  +15.49% (p=0.002 n=6)
FSTree_GetStream/4KB/GetStream_with_payload_read-16      67.14Ki ± 1%   75.38Ki ± 1%  +12.26% (p=0.002 n=6)
FSTree_GetStream/16KB/GetStream_regular-16               39.61Ki ± 1%   39.90Ki ± 1%        ~ (p=0.394 n=6)
FSTree_GetStream/16KB/GetStream_combined-16              39.65Ki ± 0%   39.78Ki ± 0%   +0.32% (p=0.002 n=6)
FSTree_GetStream/16KB/GetStream_compressed-16           119.68Ki ± 0%   63.56Ki ± 1%  -46.89% (p=0.002 n=6)
FSTree_GetStream/16KB/GetStream_with_payload_read-16     201.8Ki ± 0%   177.8Ki ± 0%  -11.87% (p=0.002 n=6)
FSTree_GetStream/32KB/GetStream_regular-16               39.52Ki ± 1%   39.59Ki ± 1%        ~ (p=0.589 n=6)
FSTree_GetStream/32KB/GetStream_combined-16              39.72Ki ± 1%   39.77Ki ± 0%        ~ (p=0.093 n=6)
FSTree_GetStream/32KB/GetStream_compressed-16           173.43Ki ± 0%   85.50Ki ± 0%  -50.70% (p=0.002 n=6)
FSTree_GetStream/32KB/GetStream_with_payload_read-16     323.8Ki ± 0%   299.7Ki ± 0%   -7.44% (p=0.002 n=6)
FSTree_GetStream/100KB/GetStream_regular-16              39.66Ki ± 1%   39.89Ki ± 1%        ~ (p=0.143 n=6)
FSTree_GetStream/100KB/GetStream_combined-16             39.67Ki ± 0%   39.82Ki ± 0%   +0.36% (p=0.002 n=6)
FSTree_GetStream/100KB/GetStream_compressed-16           373.2Ki ± 0%   149.5Ki ± 0%  -59.93% (p=0.002 n=6)
FSTree_GetStream/100KB/GetStream_with_payload_read-16    875.7Ki ± 0%   851.7Ki ± 0%   -2.74% (p=0.002 n=6)
FSTree_GetStream/1MB/GetStream_regular-16                39.84Ki ± 1%   39.84Ki ± 1%        ~ (p=0.740 n=6)
FSTree_GetStream/1MB/GetStream_combined-16               39.67Ki ± 0%   39.77Ki ± 0%   +0.25% (p=0.022 n=6)
FSTree_GetStream/1MB/GetStream_compressed-16            2661.4Ki ± 0%   181.7Ki ± 0%  -93.17% (p=0.002 n=6)
FSTree_GetStream/1MB/GetStream_with_payload_read-16      7.597Mi ± 0%   7.574Mi ± 0%   -0.30% (p=0.002 n=6)
geomean                                                  88.18Ki        73.97Ki       -16.11%

                                                      │ oldStream.txt │           newStream.txt           │
                                                      │   allocs/op   │ allocs/op   vs base               │
FSTree_GetStream/Empty/GetStream_regular-16                140.5 ± 7%   135.0 ± 6%        ~ (p=0.201 n=6)
FSTree_GetStream/Empty/GetStream_combined-16               139.0 ± 1%   138.0 ± 2%        ~ (p=0.253 n=6)
FSTree_GetStream/Empty/GetStream_compressed-16             139.5 ± 8%   142.5 ± 8%        ~ (p=0.959 n=6)
FSTree_GetStream/Empty/GetStream_with_payload_read-16      138.5 ± 7%   143.0 ± 5%        ~ (p=0.221 n=6)
FSTree_GetStream/100B/GetStream_regular-16                 140.0 ± 6%   143.5 ± 7%        ~ (p=0.381 n=6)
FSTree_GetStream/100B/GetStream_combined-16                138.0 ± 3%   140.0 ± 4%        ~ (p=0.076 n=6)
FSTree_GetStream/100B/GetStream_compressed-16              142.5 ± 7%   175.0 ± 7%  +22.81% (p=0.002 n=6)
FSTree_GetStream/100B/GetStream_with_payload_read-16       140.0 ± 6%   181.0 ± 7%  +29.29% (p=0.002 n=6)
FSTree_GetStream/4KB/GetStream_regular-16                  136.0 ± 3%   140.0 ± 4%        ~ (p=0.275 n=6)
FSTree_GetStream/4KB/GetStream_combined-16                 139.5 ± 3%   141.0 ± 1%        ~ (p=0.206 n=6)
FSTree_GetStream/4KB/GetStream_compressed-16               146.0 ± 9%   169.0 ± 5%  +15.75% (p=0.002 n=6)
FSTree_GetStream/4KB/GetStream_with_payload_read-16        150.0 ± 7%   185.5 ± 8%  +23.67% (p=0.002 n=6)
FSTree_GetStream/16KB/GetStream_regular-16                 138.0 ± 7%   145.5 ± 8%        ~ (p=0.370 n=6)
FSTree_GetStream/16KB/GetStream_combined-16                139.0 ± 2%   141.0 ± 2%   +1.44% (p=0.026 n=6)
FSTree_GetStream/16KB/GetStream_compressed-16              182.0 ± 3%   174.5 ± 4%        ~ (p=0.065 n=6)
FSTree_GetStream/16KB/GetStream_with_payload_read-16       189.0 ± 4%   188.0 ± 3%        ~ (p=0.820 n=6)
FSTree_GetStream/32KB/GetStream_regular-16                 136.0 ± 6%   136.0 ± 7%        ~ (p=0.775 n=6)
FSTree_GetStream/32KB/GetStream_combined-16                140.5 ± 5%   140.5 ± 2%        ~ (p=0.502 n=6)
FSTree_GetStream/32KB/GetStream_compressed-16              175.0 ± 7%   174.5 ± 4%        ~ (p=0.779 n=6)
FSTree_GetStream/32KB/GetStream_with_payload_read-16       192.5 ± 3%   186.5 ± 5%        ~ (p=0.167 n=6)
FSTree_GetStream/100KB/GetStream_regular-16                139.5 ± 8%   144.0 ± 4%        ~ (p=0.290 n=6)
FSTree_GetStream/100KB/GetStream_combined-16               139.5 ± 2%   141.5 ± 1%   +1.43% (p=0.022 n=6)
FSTree_GetStream/100KB/GetStream_compressed-16             171.0 ± 5%   175.0 ± 5%        ~ (p=0.348 n=6)
FSTree_GetStream/100KB/GetStream_with_payload_read-16      194.0 ± 6%   190.5 ± 7%        ~ (p=0.775 n=6)
FSTree_GetStream/1MB/GetStream_regular-16                  143.5 ± 5%   143.5 ± 6%        ~ (p=1.000 n=6)
FSTree_GetStream/1MB/GetStream_combined-16                 139.0 ± 2%   141.0 ± 1%        ~ (p=0.245 n=6)
FSTree_GetStream/1MB/GetStream_compressed-16               177.5 ± 5%   171.0 ± 6%        ~ (p=0.084 n=6)
FSTree_GetStream/1MB/GetStream_with_payload_read-16        206.5 ± 4%   212.0 ± 3%   +2.66% (p=0.019 n=6)
geomean                                                    151.9        157.1        +3.43%

                                     │  oldPut.txt  │             newPut.txt             │
                                     │    sec/op    │    sec/op     vs base              │
Put/size=1,thread=1/fstree-16          15.85m ±  7%   15.68m ±  2%       ~ (p=0.180 n=6)
Put/size=1,thread=20/fstree-16         18.90m ± 25%   17.06m ±  7%       ~ (p=0.065 n=6)
Put/size=1,thread=100/fstree-16        23.64m ±  5%   22.74m ± 32%       ~ (p=0.589 n=6)
Put/size=1024,thread=1/fstree-16       16.11m ±  5%   16.05m ±  4%       ~ (p=0.485 n=6)
Put/size=1024,thread=20/fstree-16      17.77m ± 25%   17.88m ±  3%       ~ (p=1.000 n=6)
Put/size=1024,thread=100/fstree-16     24.27m ± 10%   23.49m ± 15%       ~ (p=0.485 n=6)
Put/size=102400,thread=1/fstree-16     16.59m ±  8%   16.49m ±  3%       ~ (p=0.394 n=6)
Put/size=102400,thread=20/fstree-16    31.49m ± 25%   27.05m ±  9%       ~ (p=0.093 n=6)
Put/size=102400,thread=100/fstree-16   175.4m ± 39%   178.4m ± 18%       ~ (p=0.485 n=6)
geomean                                25.47m         24.57m        -3.52%

                                     │  oldPut.txt  │             newPut.txt             │
                                     │     B/op     │     B/op      vs base              │
Put/size=1,thread=1/fstree-16          3.405Ki ± 1%   3.437Ki ± 1%  +0.93% (p=0.013 n=6)
Put/size=1,thread=20/fstree-16         55.81Ki ± 4%   57.10Ki ± 4%       ~ (p=0.132 n=6)
Put/size=1,thread=100/fstree-16        260.5Ki ± 2%   268.7Ki ± 2%  +3.16% (p=0.009 n=6)
Put/size=1024,thread=1/fstree-16       3.388Ki ± 1%   3.425Ki ± 0%  +1.10% (p=0.002 n=6)
Put/size=1024,thread=20/fstree-16      55.82Ki ± 1%   56.81Ki ± 3%  +1.78% (p=0.002 n=6)
Put/size=1024,thread=100/fstree-16     264.2Ki ± 1%   268.4Ki ± 2%  +1.60% (p=0.004 n=6)
Put/size=102400,thread=1/fstree-16     3.419Ki ± 0%   3.464Ki ± 1%  +1.30% (p=0.002 n=6)
Put/size=102400,thread=20/fstree-16    57.58Ki ± 2%   58.39Ki ± 1%  +1.40% (p=0.002 n=6)
Put/size=102400,thread=100/fstree-16   290.5Ki ± 2%   296.2Ki ± 2%  +1.96% (p=0.026 n=6)
geomean                                37.35Ki        37.99Ki       +1.72%

                                     │ oldPut.txt  │            newPut.txt             │
                                     │  allocs/op  │  allocs/op   vs base              │
Put/size=1,thread=1/fstree-16           37.00 ± 3%    38.50 ± 1%  +4.05% (p=0.002 n=6)
Put/size=1,thread=20/fstree-16          559.0 ± 1%    597.0 ± 2%  +6.80% (p=0.002 n=6)
Put/size=1,thread=100/fstree-16        2.596k ± 1%   2.800k ± 4%  +7.84% (p=0.002 n=6)
Put/size=1024,thread=1/fstree-16        37.00 ± 3%    38.00 ± 3%  +2.70% (p=0.002 n=6)
Put/size=1024,thread=20/fstree-16       556.0 ± 1%    595.5 ± 4%  +7.10% (p=0.002 n=6)
Put/size=1024,thread=100/fstree-16     2.603k ± 1%   2.803k ± 0%  +7.64% (p=0.002 n=6)
Put/size=102400,thread=1/fstree-16      37.00 ± 3%    39.00 ± 3%  +5.41% (p=0.002 n=6)
Put/size=102400,thread=20/fstree-16     569.0 ± 1%    607.5 ± 1%  +6.77% (p=0.002 n=6)
Put/size=102400,thread=100/fstree-16   2.854k ± 2%   3.070k ± 3%  +7.55% (p=0.002 n=6)
geomean                                 381.9         405.6       +6.19%
```

Signed-off-by: Andrey Butusov <[email protected]>
@roman-khimov
Copy link
Member

Can you make a separate PR with tests? They're relevant regradless of outcome of this PR. And for it specifically the results don't look positive, either something can be improved in the implementation and it'd be more efficient or it's just not worth the trouble.

roman-khimov added a commit that referenced this pull request Jul 21, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants