summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIvana Hutarova Varekova <varekova@redhat.com>2010-02-08 13:32:26 +0100
committerBalbir Singh <balbir@linux.vnet.ibm.com>2010-02-10 16:43:37 +0530
commita2167e206bf6062e1a2388d54ca14df0389b872f (patch)
tree0846b4fa0d42f472fdc156cdc9e4a9265d424f45
parent82d4499dd8626cfad839683e9abd9dc7e45ed7a1 (diff)
downloadlibcg-a2167e206bf6062e1a2388d54ca14df0389b872f.tar.gz
libcg-a2167e206bf6062e1a2388d54ca14df0389b872f.tar.xz
libcg-a2167e206bf6062e1a2388d54ca14df0389b872f.zip
This patch adds to cgget option -a:
v2: removed bunch of unnecessary error messages This patch adds to cgget option -a: -a print the variables for all controllers which consists given cgroup EXAMPLE: $ ./cgget -a /daemons /daemons: cpuset.memory_spread_slab=0 cpuset.memory_spread_page=0 cpuset.memory_pressure=0 cpuset.memory_migrate=0 cpuset.sched_relax_domain_level=-1 cpuset.sched_load_balance=1 cpuset.mem_hardwall=0 cpuset.mem_exclusive=0 cpuset.cpu_exclusive=0 cpuset.mems= cpuset.cpus= cpuacct.stat=user 0 system 0 cpuacct.usage_percpu=0 0 cpuacct.usage=0 Signed-off-by: Ivana Hutarova Varekova <varekova@redhat.com> Signed-off-by: Balbir Singh <balbir@linux.vnet.ibm.com>
-rw-r--r--doc/man/cgget.16
-rw-r--r--src/tools/cgget.c72
2 files changed, 63 insertions, 15 deletions
diff --git a/doc/man/cgget.1 b/doc/man/cgget.1
index 67f6bef..f02fbba 100644
--- a/doc/man/cgget.1
+++ b/doc/man/cgget.1
@@ -8,7 +8,7 @@ cgget \- print parameter(s) of given group(s)
.SH SYNOPSIS
\fBcgget\fR [\fB-n\fR] [\fB-v\fR] [\fB-r\fR <\fIname\fR>]
-[\fB-g\fR <\fIcontroller\fR>] <\fBcgroup_path\fR> ...
+[\fB-g\fR <\fIcontroller\fR>] [-a] <\fBcgroup_path\fR> ...
.SH DESCRIPTION
The command prints the parameter(s) of input cgroup(s).
@@ -29,6 +29,10 @@ defines controller which values should be displaied.
This option can be used multiple times.
.TP
+.B -a
+print the variables for all controllers which consists given cgroup
+
+.TP
.B -n
do not print headers, i.e. name of groups.
diff --git a/src/tools/cgget.c b/src/tools/cgget.c
index d3c22de..4ca064e 100644
--- a/src/tools/cgget.c
+++ b/src/tools/cgget.c
@@ -9,8 +9,10 @@
#include "tools-common.h"
-#define MODE_SHOW_HEADERS 1
-#define MODE_SHOW_NAMES 2
+#define MODE_SHOW_HEADERS 1
+#define MODE_SHOW_NAMES 2
+#define MODE_SHOW_ALL_CONTROLLERS 4
+
void usage(int status, char *program_name)
{
@@ -19,7 +21,7 @@ void usage(int status, char *program_name)
" try %s -h' for more information.\n",
program_name);
else {
- printf("Usage: %s [-nv] [-r <name>] [-g <controller>]..."\
+ printf("Usage: %s [-nv] [-r<name>] [-g<controller>] [-a] ..."\
"<path> ...\n", program_name);
}
}
@@ -134,8 +136,9 @@ int display_controller_values(char **controllers, int count,
ret = cgroup_get_cgroup(group);
if (ret != 0) {
- fprintf(stderr, "%s: cannot read group '%s': %s\n",
- program_name, group_name, cgroup_strerror(ret));
+ if (!(mode && MODE_SHOW_ALL_CONTROLLERS))
+ fprintf(stderr, "%s: cannot read group '%s': %s\n",
+ program_name, group_name, cgroup_strerror(ret));
}
/* for all wanted controllers */
@@ -144,10 +147,16 @@ int display_controller_values(char **controllers, int count,
/* read the controller group data */
group_controller = cgroup_get_controller(group, controllers[j]);
if (group_controller == NULL) {
- fprintf(stderr, "%s: cannot find controller "\
- "'%s' in group '%s'\n", program_name,
- controllers[j], group_name);
- result = -1;
+ if (!(mode && MODE_SHOW_ALL_CONTROLLERS))
+ fprintf(stderr, "%s: cannot find controller "\
+ "'%s' in group '%s'\n", program_name,
+ controllers[j], group_name);
+ if (!(mode & MODE_SHOW_ALL_CONTROLLERS)) {
+ fprintf(stderr, "%s: cannot find controller "\
+ "'%s' in group '%s'\n", program_name,
+ controllers[j], group_name);
+ result = -1;
+ }
}
/* for each variable of given group print the statistic */
@@ -157,17 +166,43 @@ int display_controller_values(char **controllers, int count,
if (name != NULL) {
ret = display_one_record(name, group_controller,
program_name, mode);
- if (ret)
- return ret;
+ if (ret) {
+ result = ret;
+ goto err;
+ }
}
}
}
+err:
cgroup_free(&group);
return result;
}
+int display_all_controllers(const char *group_name,
+ const char *program_name, int mode)
+{
+ void *handle;
+ int ret;
+ struct cgroup_mount_point controller;
+ char *name;
+ int succ = 0;
+
+ ret = cgroup_get_controller_begin(&handle, &controller);
+
+ /* go through the list of controllers/mount point pairs */
+ while (ret == 0) {
+ name = controller.name;
+ succ |= display_controller_values(&name, 1,
+ group_name, program_name, mode);
+ ret = cgroup_get_controller_next(&handle, &controller);
+ }
+
+ cgroup_get_controller_end(&handle);
+ return succ;
+}
+
int add_record_to_buffer(int *p_number,
int *p_max, char ***p_records, char *new_rec)
{
@@ -211,7 +246,7 @@ int main(int argc, char *argv[])
}
/* Parse arguments. */
- while ((c = getopt(argc, argv, "r:hnvg:")) != -1) {
+ while ((c = getopt(argc, argv, "r:hnvg:a")) != -1) {
switch (c) {
case 'h':
usage(0, argv[0]);
@@ -247,6 +282,10 @@ int main(int argc, char *argv[])
goto err;
}
break;
+ case 'a':
+ /* go through cgroups for all possible controllers */
+ mode |= MODE_SHOW_ALL_CONTROLLERS;
+ break;
default:
usage(1, argv[0]);
result = -1;
@@ -288,8 +327,13 @@ int main(int argc, char *argv[])
if (ret)
result = ret;
- ret = display_controller_values(controllers,
- c_number, argv[i], argv[0], mode);
+ ret = display_controller_values(controllers, c_number, argv[i],
+ argv[0], mode - (mode & MODE_SHOW_ALL_CONTROLLERS));
+ if (ret)
+ goto err;
+
+ if (mode & MODE_SHOW_ALL_CONTROLLERS)
+ display_all_controllers(argv[i], argv[0], mode);
if (ret)
result = ret;