]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
cgtop: show resource usage relative to cgroup root only
authorLennart Poettering <lennart@poettering.net>
Fri, 28 Aug 2015 17:17:47 +0000 (19:17 +0200)
committerLennart Poettering <lennart@poettering.net>
Mon, 31 Aug 2015 11:20:43 +0000 (13:20 +0200)
This way the output is restricted to cgroups from a container when run
in one.

src/cgtop/cgtop.c

index 26b104f111b716df8fd0d97f5f28eb3d047ef14e..9e771d821b479c845b4030839135641e793126e6 100644 (file)
@@ -348,21 +348,21 @@ static int refresh_one(
         return r;
 }
 
-static int refresh(Hashmap *a, Hashmap *b, unsigned iteration) {
+static int refresh(const char *root, Hashmap *a, Hashmap *b, unsigned iteration) {
         int r;
 
         assert(a);
 
-        r = refresh_one(SYSTEMD_CGROUP_CONTROLLER, "/", a, b, iteration, 0);
+        r = refresh_one(SYSTEMD_CGROUP_CONTROLLER, root, a, b, iteration, 0);
         if (r < 0)
                 return r;
-        r = refresh_one("cpuacct", "/", a, b, iteration, 0);
+        r = refresh_one("cpuacct", root, a, b, iteration, 0);
         if (r < 0)
                 return r;
-        r = refresh_one("memory", "/", a, b, iteration, 0);
+        r = refresh_one("memory", root, a, b, iteration, 0);
         if (r < 0)
                 return r;
-        r = refresh_one("blkio", "/", a, b, iteration, 0);
+        r = refresh_one("blkio", root, a, b, iteration, 0);
         if (r < 0)
                 return r;
 
@@ -721,6 +721,7 @@ int main(int argc, char *argv[]) {
         unsigned iteration = 0;
         usec_t last_refresh = 0;
         bool quit = false, immediate_refresh = false;
+        _cleanup_free_ char *root = NULL;
 
         log_parse_environment();
         log_open();
@@ -729,6 +730,12 @@ int main(int argc, char *argv[]) {
         if (r <= 0)
                 goto finish;
 
+        r = cg_get_root_path(&root);
+        if (r < 0) {
+                log_error_errno(r, "Failed to get root control group path: %m");
+                goto finish;
+        }
+
         a = hashmap_new(&string_hash_ops);
         b = hashmap_new(&string_hash_ops);
         if (!a || !b) {
@@ -751,7 +758,7 @@ int main(int argc, char *argv[]) {
 
                 if (t >= last_refresh + arg_delay || immediate_refresh) {
 
-                        r = refresh(a, b, iteration++);
+                        r = refresh(root, a, b, iteration++);
                         if (r < 0)
                                 goto finish;