Fixes logic for calculating percentage for cgroups.Stats.CpuStats.CpuUsage.PercentUsage

Previous logic divided a uint64 by a uint64 losing precision before multiplying by clock ticks and cpus
This fix maintains precision before converting back to uint64

Docker-DCO-1.1-Signed-off-by: Nicholas Weaver <lynxbat@gmail.com> (github: lynxbat)
This commit is contained in:
Nicholas Weaver 2014-08-07 16:22:35 -07:00
parent ef3c88435e
commit 8597998244
1 changed files with 1 additions and 1 deletions

View File

@ -73,7 +73,7 @@ func (s *CpuacctGroup) GetStats(path string, stats *cgroups.Stats) error {
deltaUsage = lastUsage - startUsage deltaUsage = lastUsage - startUsage
) )
if deltaSystem > 0.0 { if deltaSystem > 0.0 {
percentage = ((deltaProc / deltaSystem) * clockTicks) * cpuCount percentage = uint64(((float64(deltaProc) / float64(deltaSystem)) * float64(clockTicks)) * float64(cpuCount))
} }
// NOTE: a percentage over 100% is valid for POSIX because that means the // NOTE: a percentage over 100% is valid for POSIX because that means the
// processes is using multiple cores // processes is using multiple cores