mirror of
https://github.com/minio/minio.git
synced 2025-04-01 02:03:42 -04:00
fix: for DiskInfo call cache disk metrics (#15229)
Small uploads spend a significant amount of time (~5%) fetching disk info metrics. Also maps are allocated for each call. Add a 100ms cache to disk metrics.
This commit is contained in:
parent
c7e01b139d
commit
2471bdda00
@ -78,20 +78,28 @@ type xlStorageDiskIDCheck struct {
|
|||||||
diskID string
|
diskID string
|
||||||
storage *xlStorage
|
storage *xlStorage
|
||||||
health *diskHealthTracker
|
health *diskHealthTracker
|
||||||
|
metricsCache timedValue
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *xlStorageDiskIDCheck) getMetrics() DiskMetrics {
|
func (p *xlStorageDiskIDCheck) getMetrics() DiskMetrics {
|
||||||
diskMetric := DiskMetrics{
|
p.metricsCache.Once.Do(func() {
|
||||||
APILatencies: make(map[string]uint64),
|
p.metricsCache.TTL = 100 * time.Millisecond
|
||||||
APICalls: make(map[string]uint64),
|
p.metricsCache.Update = func() (interface{}, error) {
|
||||||
}
|
diskMetric := DiskMetrics{
|
||||||
for i, v := range p.apiLatencies {
|
APILatencies: make(map[string]uint64, len(p.apiLatencies)),
|
||||||
diskMetric.APILatencies[storageMetric(i).String()] = v.value()
|
APICalls: make(map[string]uint64, len(p.apiCalls)),
|
||||||
}
|
}
|
||||||
for i := range p.apiCalls {
|
for i, v := range p.apiLatencies {
|
||||||
diskMetric.APICalls[storageMetric(i).String()] = atomic.LoadUint64(&p.apiCalls[i])
|
diskMetric.APILatencies[storageMetric(i).String()] = v.value()
|
||||||
}
|
}
|
||||||
return diskMetric
|
for i := range p.apiCalls {
|
||||||
|
diskMetric.APICalls[storageMetric(i).String()] = atomic.LoadUint64(&p.apiCalls[i])
|
||||||
|
}
|
||||||
|
return diskMetric, nil
|
||||||
|
}
|
||||||
|
})
|
||||||
|
m, _ := p.metricsCache.Get()
|
||||||
|
return m.(DiskMetrics)
|
||||||
}
|
}
|
||||||
|
|
||||||
type lockedLastMinuteLatency struct {
|
type lockedLastMinuteLatency struct {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user