Configur buffer and threshold
This commit is contained in:
parent
aac30cd840
commit
bd0c010be6
@ -123,6 +123,15 @@ type Config struct {
|
|||||||
// never overflow. This field is used when doing GC at the end of a compaction to
|
// never overflow. This field is used when doing GC at the end of a compaction to
|
||||||
// adaptively choose moving GC
|
// adaptively choose moving GC
|
||||||
HotstoreMaxSpaceTarget uint64
|
HotstoreMaxSpaceTarget uint64
|
||||||
|
|
||||||
|
// Moving GC will be triggered when total moving size exceeds
|
||||||
|
// HotstoreMaxSpaceTarget - HotstoreMaxSpaceThreshold
|
||||||
|
HotstoreMaxSpaceThreshold uint64
|
||||||
|
|
||||||
|
// Safety buffer to prevent moving GC from overflowing disk.
|
||||||
|
// Moving GC will not occur when total moving size exceeds
|
||||||
|
// HotstoreMaxSpaceTarget - HotstoreMaxSpaceSafetyBuffer
|
||||||
|
HotstoreMaxSpaceSafetyBuffer uint64
|
||||||
}
|
}
|
||||||
|
|
||||||
// ChainAccessor allows the Splitstore to access the chain. It will most likely
|
// ChainAccessor allows the Splitstore to access the chain. It will most likely
|
||||||
|
@ -44,10 +44,10 @@ func (s *SplitStore) gcHotAfterCompaction() {
|
|||||||
hotSize := getSize()
|
hotSize := getSize()
|
||||||
|
|
||||||
copySizeApprox := s.szKeys + s.szMarkedLiveRefs + s.szProtectedTxns + s.szWalk
|
copySizeApprox := s.szKeys + s.szMarkedLiveRefs + s.szProtectedTxns + s.szWalk
|
||||||
shouldTarget := s.cfg.HotstoreMaxSpaceTarget > 0 && hotSize+copySizeApprox > int64(s.cfg.HotstoreMaxSpaceTarget)-targetThreshold
|
shouldTarget := s.cfg.HotstoreMaxSpaceTarget > 0 && hotSize+copySizeApprox > int64(s.cfg.HotstoreMaxSpaceTarget)-int64(s.cfg.HotstoreMaxSpaceThreshold)
|
||||||
shouldFreq := s.cfg.HotStoreFullGCFrequency > 0 && s.compactionIndex%int64(s.cfg.HotStoreFullGCFrequency) == 0
|
shouldFreq := s.cfg.HotStoreFullGCFrequency > 0 && s.compactionIndex%int64(s.cfg.HotStoreFullGCFrequency) == 0
|
||||||
shouldDoFull := shouldTarget || shouldFreq
|
shouldDoFull := shouldTarget || shouldFreq
|
||||||
canDoFull := s.cfg.HotstoreMaxSpaceTarget == 0 || hotSize+copySizeApprox < int64(s.cfg.HotstoreMaxSpaceTarget)-targetBuffer
|
canDoFull := s.cfg.HotstoreMaxSpaceTarget == 0 || hotSize+copySizeApprox < int64(s.cfg.HotstoreMaxSpaceTarget)-int64(s.cfg.HotstoreMaxSpaceSafetyBuffer)
|
||||||
log.Debugw("approximating new hot store size", "key size", s.szKeys, "marked live refs", s.szMarkedLiveRefs, "protected txns", s.szProtectedTxns, "walked DAG", s.szWalk)
|
log.Debugw("approximating new hot store size", "key size", s.szKeys, "marked live refs", s.szMarkedLiveRefs, "protected txns", s.szProtectedTxns, "walked DAG", s.szWalk)
|
||||||
log.Infof("measured hot store size: %d, approximate new size: %d, should do full %t, can do full %t", hotSize, copySizeApprox, shouldDoFull, canDoFull)
|
log.Infof("measured hot store size: %d, approximate new size: %d, should do full %t, can do full %t", hotSize, copySizeApprox, shouldDoFull, canDoFull)
|
||||||
|
|
||||||
|
@ -244,6 +244,12 @@
|
|||||||
# env var: LOTUS_CHAINSTORE_SPLITSTORE_HOTSTOREMAXSPACETARGET
|
# env var: LOTUS_CHAINSTORE_SPLITSTORE_HOTSTOREMAXSPACETARGET
|
||||||
#HotStoreMaxSpaceTarget = 0
|
#HotStoreMaxSpaceTarget = 0
|
||||||
|
|
||||||
|
# env var: LOTUS_CHAINSTORE_SPLITSTORE_HOTSTOREMAXSPACETHRESHOLD
|
||||||
|
#HotStoreMaxSpaceThreshold = 150000000000
|
||||||
|
|
||||||
|
# env var: LOTUS_CHAINSTORE_SPLITSTORE_HOTSTOREMAXSPACESAFETYBUFFER
|
||||||
|
#HotstoreMaxSpaceSafetyBuffer = 50000000000
|
||||||
|
|
||||||
|
|
||||||
[Cluster]
|
[Cluster]
|
||||||
# EXPERIMENTAL. config to enabled node cluster with raft consensus
|
# EXPERIMENTAL. config to enabled node cluster with raft consensus
|
||||||
|
@ -95,7 +95,9 @@ func DefaultFullNode() *FullNode {
|
|||||||
HotStoreType: "badger",
|
HotStoreType: "badger",
|
||||||
MarkSetType: "badger",
|
MarkSetType: "badger",
|
||||||
|
|
||||||
HotStoreFullGCFrequency: 20,
|
HotStoreFullGCFrequency: 20,
|
||||||
|
HotStoreMaxSpaceThreshold: 150_000_000_000,
|
||||||
|
HotstoreMaxSpaceSafetyBuffer: 50_000_000_000,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
Cluster: *DefaultUserRaftConfig(),
|
Cluster: *DefaultUserRaftConfig(),
|
||||||
|
@ -611,6 +611,15 @@ type Splitstore struct {
|
|||||||
// At this minimum size moving GC happens every time, any smaller and moving GC won't
|
// At this minimum size moving GC happens every time, any smaller and moving GC won't
|
||||||
// be able to run. In spring 2023 this minimum is ~550 GB.
|
// be able to run. In spring 2023 this minimum is ~550 GB.
|
||||||
HotStoreMaxSpaceTarget uint64
|
HotStoreMaxSpaceTarget uint64
|
||||||
|
|
||||||
|
// When HotStoreMaxSpaceTarget is set Moving GC will be triggered when total moving size
|
||||||
|
// exceeds HotstoreMaxSpaceTarget - HotstoreMaxSpaceThreshold
|
||||||
|
HotStoreMaxSpaceThreshold uint64
|
||||||
|
|
||||||
|
// Safety buffer to prevent moving GC from overflowing disk when HotStoreMaxSpaceTarget
|
||||||
|
// is set. Moving GC will not occur when total moving size exceeds
|
||||||
|
// HotstoreMaxSpaceTarget - HotstoreMaxSpaceSafetyBuffer
|
||||||
|
HotstoreMaxSpaceSafetyBuffer uint64
|
||||||
}
|
}
|
||||||
|
|
||||||
// // Full Node
|
// // Full Node
|
||||||
|
@ -82,12 +82,14 @@ func SplitBlockstore(cfg *config.Chainstore) func(lc fx.Lifecycle, r repo.Locked
|
|||||||
}
|
}
|
||||||
|
|
||||||
cfg := &splitstore.Config{
|
cfg := &splitstore.Config{
|
||||||
MarkSetType: cfg.Splitstore.MarkSetType,
|
MarkSetType: cfg.Splitstore.MarkSetType,
|
||||||
DiscardColdBlocks: cfg.Splitstore.ColdStoreType == "discard",
|
DiscardColdBlocks: cfg.Splitstore.ColdStoreType == "discard",
|
||||||
UniversalColdBlocks: cfg.Splitstore.ColdStoreType == "universal",
|
UniversalColdBlocks: cfg.Splitstore.ColdStoreType == "universal",
|
||||||
HotStoreMessageRetention: cfg.Splitstore.HotStoreMessageRetention,
|
HotStoreMessageRetention: cfg.Splitstore.HotStoreMessageRetention,
|
||||||
HotStoreFullGCFrequency: cfg.Splitstore.HotStoreFullGCFrequency,
|
HotStoreFullGCFrequency: cfg.Splitstore.HotStoreFullGCFrequency,
|
||||||
HotstoreMaxSpaceTarget: cfg.Splitstore.HotStoreMaxSpaceTarget,
|
HotstoreMaxSpaceTarget: cfg.Splitstore.HotStoreMaxSpaceTarget,
|
||||||
|
HotstoreMaxSpaceThreshold: cfg.Splitstore.HotStoreMaxSpaceThreshold,
|
||||||
|
HotstoreMaxSpaceSafetyBuffer: cfg.Splitstore.HotstoreMaxSpaceSafetyBuffer,
|
||||||
}
|
}
|
||||||
ss, err := splitstore.Open(path, ds, hot, cold, cfg)
|
ss, err := splitstore.Open(path, ds, hot, cold, cfg)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
Loading…
Reference in New Issue
Block a user