From dafbfa54dccb0aa389266ca69ba8feac53960f53 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Szulik?= Date: Tue, 16 Jun 2020 12:35:55 +0200 Subject: [PATCH] Add cgroups v2 support for perf events. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Paweł Szulik --- manager/manager.go | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/manager/manager.go b/manager/manager.go index b08c4500..a2565609 100644 --- a/manager/manager.go +++ b/manager/manager.go @@ -18,6 +18,7 @@ package manager import ( "flag" "fmt" + "github.com/opencontainers/runc/libcontainer/cgroups/fs2" "net/http" "os" "path" @@ -917,7 +918,14 @@ func (m *manager) createContainerLocked(containerName string, watchSource watche if err != nil { return err } - if !cgroups.IsCgroup2UnifiedMode() { + + if cgroups.IsCgroup2UnifiedMode() { + perfCgroupPath := path.Join(fs2.UnifiedMountpoint, containerName) + cont.perfCollector, err = m.perfManager.GetCollector(perfCgroupPath) + if err != nil { + klog.Infof("perf_event metrics will not be available for container %s: %s", containerName, err) + } + } else { devicesCgroupPath, err := handler.GetCgroupPath("devices") if err != nil { klog.Warningf("Error getting devices cgroup path: %v", err) @@ -927,14 +935,13 @@ func (m *manager) createContainerLocked(containerName string, watchSource watche klog.V(4).Infof("GPU metrics may be unavailable/incomplete for container %s: %s", cont.info.Name, err) } } - perfCgroupPath, err := handler.GetCgroupPath("perf_event") if err != nil { klog.Warningf("Error getting perf_event cgroup path: %q", err) } else { cont.perfCollector, err = m.perfManager.GetCollector(perfCgroupPath) if err != nil { - klog.Infof("perf_event metrics will not be available for container %s: %s", cont.info.Name, err) + klog.Infof("perf_event metrics will not be available for container %s: %s", containerName, err) } } }