Skip to content

Commit

Permalink
Remove writes from the disk rate limiting (ava-labs#1500)
Browse files Browse the repository at this point in the history
  • Loading branch information
StephenButtolph authored May 21, 2022
1 parent f8be921 commit 1e9219e
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 10 deletions.
6 changes: 3 additions & 3 deletions config/flags.go
Original file line number Diff line number Diff line change
Expand Up @@ -341,9 +341,9 @@ func addNodeFlags(fs *flag.FlagSet) {
fs.Float64(CPUMaxNonVdrNodeUsageKey, float64(runtime.NumCPU())/8, "Maximum number of CPUs that a non-validator can utilize. Value should be in range [0, total core count]")

// Disk management
fs.Float64(DiskVdrAllocKey, 100*units.MiB, "Maximum number of disk reads/writes per second to allocate for use by validators. Must be > 0")
fs.Float64(DiskMaxNonVdrUsageKey, 80*units.MiB, "Number of disk reads/writes per second that, if fully utilized, will rate limit all non-validators. Must be >= 0")
fs.Float64(DiskMaxNonVdrNodeUsageKey, 12*units.MiB, "Maximum number of disk reads/writes per second that a non-validator can utilize. Must be >= 0")
fs.Float64(DiskVdrAllocKey, 1000*units.GiB, "Maximum number of disk reads/writes per second to allocate for use by validators. Must be > 0")
fs.Float64(DiskMaxNonVdrUsageKey, 1000*units.GiB, "Number of disk reads/writes per second that, if fully utilized, will rate limit all non-validators. Must be >= 0")
fs.Float64(DiskMaxNonVdrNodeUsageKey, 1000*units.GiB, "Maximum number of disk reads/writes per second that a non-validator can utilize. Must be >= 0")
}

// BuildFlagSet returns a complete set of flags for avalanchego
Expand Down
14 changes: 7 additions & 7 deletions snow/networking/tracker/resource_tracker.go
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,7 @@ func (t *diskResourceTracker) Usage(nodeID ids.NodeID, now time.Time) float64 {
rt.lock.Lock()
defer rt.lock.Unlock()

// [realWriteUsage] is only used for metrics.
realReadUsage, realWriteUsage := rt.resources.DiskUsage()
rt.metrics.diskReadsMetric.Set(realReadUsage)
rt.metrics.diskWritesMetric.Set(realWriteUsage)
Expand All @@ -130,14 +131,13 @@ func (t *diskResourceTracker) Usage(nodeID ids.NodeID, now time.Time) float64 {
return 0
}

realIOUsage := realReadUsage + realWriteUsage
portionUsageByNode := m.(meter.Meter).Read(now) / measuredProcessingTime
return realIOUsage * portionUsageByNode
return realReadUsage * portionUsageByNode
}

func (t *diskResourceTracker) TotalUsage() float64 {
realReadUsage, realWriteUsage := t.t.resources.DiskUsage()
return realReadUsage + realWriteUsage
realReadUsage, _ := t.t.resources.DiskUsage()
return realReadUsage
}

func (t *diskResourceTracker) TimeUntilUsage(nodeID ids.NodeID, now time.Time, value float64) time.Duration {
Expand All @@ -159,16 +159,16 @@ func (t *diskResourceTracker) TimeUntilUsage(nodeID ids.NodeID, now time.Time, v
return 0
}

// [realWriteUsage] is only used for metrics.
realReadUsage, realWriteUsage := rt.resources.DiskUsage()
rt.metrics.diskReadsMetric.Set(realReadUsage)
rt.metrics.diskWritesMetric.Set(realWriteUsage)

realIOUsage := realReadUsage + realWriteUsage
if realIOUsage == 0 {
if realReadUsage == 0 {
return 0
}

scale := realIOUsage / measuredProcessingTime
scale := realReadUsage / measuredProcessingTime
return m.(meter.Meter).TimeUntil(now, value/scale)
}

Expand Down

0 comments on commit 1e9219e

Please sign in to comment.