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 <[email protected]> --- src/tools/cgget.c | 61 +++++++++++++++++++++++++++++++++++++++++++++-------- 1 files changed, 52 insertions(+), 9 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..bfaa93d 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); } } @@ -147,7 +149,12 @@ int display_controller_values(char **controllers, int count, 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)) { + printf(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 +164,44 @@ 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 +245,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 +281,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 +326,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; ------------------------------------------------------------------------------ The Planet: dedicated and managed hosting, cloud storage, colocation Stay online with enterprise data centers and the best network in the business Choose flexible plans and management services without long-term contracts Personal 24x7 support from experience hosting pros just a phone call away. http://p.sf.net/sfu/theplanet-com _______________________________________________ Libcg-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/libcg-devel
