WIP: Experimental bitcask-based writecache implementation #654
No reviewers
TrueCloudLab/storage-core-developers
Labels
No labels
P0
P1
P2
P3
badger
frostfs-adm
frostfs-cli
frostfs-ir
frostfs-lens
frostfs-node
good first issue
triage
Infrastructure
blocked
bug
config
discussion
documentation
duplicate
enhancement
go
help wanted
internal
invalid
kludge
observability
perfomance
question
refactoring
wontfix
No milestone
No project
No assignees
4 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: TrueCloudLab/frostfs-node#654
Loading…
Add table
Reference in a new issue
No description provided.
Delete branch "ale64bit/frostfs-node:feature/wc-experiment"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Signed-off-by: Alejandro Lopez a.lopez@yadro.com
0f4b63a027
to83a05579b3
83a05579b3
to9aa44a1790
9aa44a1790
to30fc6b56bd
30fc6b56bd
tocf50a6b9c6
cf50a6b9c6
tof8583060ec
WIP: [#xx] Experimental lite writecache implementationto Experimental bitcask-based writecache implementationResults from basic benchmarks:
Needs more testing, in particular for recovery workflow.
@ -0,0 +180,4 @@
// Read payload size
var sizeBytes [4]byte
Can u please make some constant and assign it to
4
?done
f8583060ec
to42e74d6aab
Speaking of benchmarks -- sequential benchmarks are affected by the batch delay and batch size. Have you made batch_size=1 for bbolt?
Parallel benchmarks need to be executed in similar settings -- is that true?
Well, I tried to use the default values as much as possible, since those should be the ones representative of actual performance. They should be executed in settings that are representative of how they will be used; we can't arbitrarily change parameters in a production deployment to match a specific workload.
Sequential and parallel results after setting
MaxBatchDelay
to1ms
forbbolt
(in this case, this matches the delay used by bitcask):Sequential and parallel results after setting
MaxBatchSize
to1
forbbolt
:Of course, we can set the
MaxBatchDelay
to 0 in bitcask so that it flushes immediately during the sequential benchmark, just to say that it beats bbolt:but IMHO, the latency and throughput during parallel workloads are more important, as long as the difference during sequential workloads is not too large.
In any case, benchmarks on actual hardware and interacting with the other components are more meaningful.
This is not about a specific workload, this is about apples-to-apples comparison. We may switch implementation or we may just switch a parameter.
I agree, given that we consume less memory and do not longer panic if the media is removed, new implementation looks promising.
We have local k6 loader -- it could help -- we have flushes there which interfere with the PUT.
OK.
Not sure I follow. Flushing is enabled for these benchmarks as well. The only difference is that the backing store and metabase are mocks, so that the benchmarks actually measure the writecache and not other things.
As far as I understand, the current implementation stores all the keys in memory.
Assume we have 12 shards, each writecache shard has a maximum size of 256GB. Then for object size of 1KB we must to store in memory 256GB * 12 / 1024 = 3221225472 keys. If each key has size of 64 bytes, then we must have 196GB of RAM in the system?
So i think this kind of writecache must have not only size limit, but key limit too.
@ -0,0 +58,4 @@
type cache struct {
options
mode atomic.Uint32
We have to add at least metrics to compare performance of the different writecache implementation.
Experimental bitcask-based writecache implementationto WIP: Experimental bitcask-based writecache implementationMaking it WIP until @ale64bit is back from vacation.
Pull request closed