do not always allocate a new slice
This commit is contained in:
parent
bdc3ae7120
commit
7f542f2952
@ -49,11 +49,18 @@ func (self *containerStorage) updatePrevStats(stats *info.ContainerStats) {
|
|||||||
}
|
}
|
||||||
// make a deep copy.
|
// make a deep copy.
|
||||||
self.prevStats.Timestamp = stats.Timestamp
|
self.prevStats.Timestamp = stats.Timestamp
|
||||||
|
// copy the slice first.
|
||||||
|
percpuSlice := self.prevStats.Cpu.Usage.PerCpu
|
||||||
*self.prevStats.Cpu = *stats.Cpu
|
*self.prevStats.Cpu = *stats.Cpu
|
||||||
self.prevStats.Cpu.Usage.PerCpu = make([]uint64, len(stats.Cpu.Usage.PerCpu))
|
// If the old slice is enough to hold the new data, then don't allocate
|
||||||
for i, perCpu := range stats.Cpu.Usage.PerCpu {
|
// a new slice.
|
||||||
self.prevStats.Cpu.Usage.PerCpu[i] = perCpu
|
if len(percpuSlice) != len(stats.Cpu.Usage.PerCpu) {
|
||||||
|
percpuSlice = make([]uint64, len(stats.Cpu.Usage.PerCpu))
|
||||||
}
|
}
|
||||||
|
for i, perCpu := range stats.Cpu.Usage.PerCpu {
|
||||||
|
percpuSlice[i] = perCpu
|
||||||
|
}
|
||||||
|
self.prevStats.Cpu.Usage.PerCpu = percpuSlice
|
||||||
*self.prevStats.Memory = *stats.Memory
|
*self.prevStats.Memory = *stats.Memory
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -44,6 +44,7 @@ func buildTrace(cpu, mem []uint64, duration time.Duration) []*info.ContainerStat
|
|||||||
stats.Cpu.Usage.Total = cpuTotalUsage
|
stats.Cpu.Usage.Total = cpuTotalUsage
|
||||||
stats.Cpu.Usage.User = stats.Cpu.Usage.Total
|
stats.Cpu.Usage.User = stats.Cpu.Usage.Total
|
||||||
stats.Cpu.Usage.System = 0
|
stats.Cpu.Usage.System = 0
|
||||||
|
stats.Cpu.Usage.PerCpu = []uint64{cpuUsage}
|
||||||
|
|
||||||
stats.Memory.Usage = mem[i]
|
stats.Memory.Usage = mem[i]
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user