do not always allocate a new slice

This commit is contained in:
Nan Deng 2014-06-18 11:45:24 -07:00
parent bdc3ae7120
commit 7f542f2952
2 changed files with 11 additions and 3 deletions

View File

@ -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
} }

View File

@ -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]