summaryrefslogtreecommitdiffhomepage
path: root/pkg/sentry/control
diff options
context:
space:
mode:
authorgVisor bot <gvisor-bot@google.com>2021-02-02 21:00:56 +0000
committergVisor bot <gvisor-bot@google.com>2021-02-02 21:00:56 +0000
commit33d705db793eee0fe24f4a8a187fec65305957f7 (patch)
tree17bdcf658abd6497a9decc63ab48e1a5cc810e19 /pkg/sentry/control
parent5011c8943e1048c3b34b9dc11a888ee3c8d42302 (diff)
parent5f7bf3152652d36903f9659688321ae7c42995d0 (diff)
Merge release-20210125.0-62-g5f7bf3152 (automated)
Diffstat (limited to 'pkg/sentry/control')
-rw-r--r--pkg/sentry/control/proc.go13
1 files changed, 13 insertions, 0 deletions
diff --git a/pkg/sentry/control/proc.go b/pkg/sentry/control/proc.go
index 1d88db12f..de7a0f3ab 100644
--- a/pkg/sentry/control/proc.go
+++ b/pkg/sentry/control/proc.go
@@ -404,3 +404,16 @@ func ttyName(tty *kernel.TTY) string {
}
return fmt.Sprintf("pts/%d", tty.Index)
}
+
+// ContainerUsage retrieves per-container CPU usage.
+func ContainerUsage(kr *kernel.Kernel) map[string]uint64 {
+ cusage := make(map[string]uint64)
+ for _, tg := range kr.TaskSet().Root.ThreadGroups() {
+ // We want each tg's usage including reaped children.
+ cid := tg.Leader().ContainerID()
+ stats := tg.CPUStats()
+ stats.Accumulate(tg.JoinedChildCPUStats())
+ cusage[cid] += uint64(stats.UserTime.Nanoseconds()) + uint64(stats.SysTime.Nanoseconds())
+ }
+ return cusage
+}