lib/workingsetcache: randomize interval for swapping curr and prev caches

This should make CPU usage smoother over time, since different caches
will be swapped at different times.
This commit is contained in:
Aliaksandr Valialkin 2022-10-20 08:42:41 +03:00
parent cba9696a14
commit 9c02c39487
No known key found for this signature in database
GPG key ID: A72BEC6CD3D0DED1

View file

@ -129,7 +129,8 @@ func (c *Cache) runWatchers(expireDuration time.Duration) {
}
func (c *Cache) expirationWatcher(expireDuration time.Duration) {
t := time.NewTicker(expireDuration / 2)
expireDuration += timeJitter(expireDuration / 10)
t := time.NewTicker(expireDuration)
for {
select {
case <-c.stopCh:
@ -155,7 +156,9 @@ func (c *Cache) expirationWatcher(expireDuration time.Duration) {
}
func (c *Cache) cacheSizeWatcher() {
t := time.NewTicker(1500 * time.Millisecond)
checkInterval := 1500 * time.Millisecond
checkInterval += timeJitter(checkInterval / 10)
t := time.NewTicker(checkInterval)
defer t.Stop()
var maxBytesSize uint64
@ -375,3 +378,8 @@ func (c *Cache) SetBig(key, value []byte) {
curr := c.curr.Load().(*fastcache.Cache)
curr.SetBig(key, value)
}
func timeJitter(d time.Duration) time.Duration {
n := float64(time.Now().UnixNano()%1e9) / 1e9
return time.Duration(float64(d) * n)
}