[systemd-devel] [PATCH] cgtop: raw output option (disable conversion to human-readable units) [r2]
From: Charles Duffy chadu...@cisco.com Replace the single -r (raw) option with separate flags for memory and IO, patterned off of --cpu[=TYPE], per feedback from Umut. Fold repeated conditional logic around formatting into a static function, per feedback from Zbyszek. Charles Duffy (1): cgtop: add options to format memory, IO usage in raw bytes src/cgtop/cgtop.c | 64 --- 1 file changed, 51 insertions(+), 13 deletions(-) -- 2.0.0 ___ systemd-devel mailing list systemd-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/systemd-devel
Re: [systemd-devel] [PATCH] cgtop: raw output option (disable conversion to human-readable units)
On Fri, May 22, 2015 at 04:56:15PM -0500, Charles Duffy wrote: From: Charles Duffy chadu...@cisco.com --- src/cgtop/cgtop.c | 28 ++-- 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/src/cgtop/cgtop.c b/src/cgtop/cgtop.c index a390cf3..0dbac7f 100644 --- a/src/cgtop/cgtop.c +++ b/src/cgtop/cgtop.c @@ -62,6 +62,7 @@ typedef struct Group { static unsigned arg_depth = 3; static unsigned arg_iterations = 0; static bool arg_batch = false; +static bool arg_raw = false; static usec_t arg_delay = 1*USEC_PER_SEC; static enum { @@ -533,15 +534,24 @@ static int display(Hashmap *a) { printf( %*s, maxtcpu, format_timespan(buffer, sizeof(buffer), (nsec_t) (g-cpu_usage / NSEC_PER_USEC), 0)); if (g-memory_valid) -printf( %8s, format_bytes(buffer, sizeof(buffer), g-memory)); +if(arg_raw) { +printf( %8ld, g-memory); +} else { +printf( %8s, format_bytes(buffer, sizeof(buffer), g-memory)); +} else Please add a new (static) function which wraps format_bytes and instead of adding if's everywhere, just call that function. Also, please don't use braces for single statements. Zbyszek fputs(-, stdout); if (g-io_valid) { -printf( %8s, - format_bytes(buffer, sizeof(buffer), g-io_input_bps)); -printf( %8s, - format_bytes(buffer, sizeof(buffer), g-io_output_bps)); +if(arg_raw) { +printf( %8ld, g-io_input_bps); +printf( %8ld, g-io_output_bps); +} else { +printf( %8s, + format_bytes(buffer, sizeof(buffer), g-io_input_bps)); +printf( %8s, + format_bytes(buffer, sizeof(buffer), g-io_output_bps)); +} } else fputs(--, stdout); @@ -561,6 +571,7 @@ static void help(void) { -c Order by CPU load\n -m Order by memory load\n -i Order by IO load\n + -r Provide raw (not human-readable) numbers\n --cpu[=TYPE] Show CPU usage as time or percentage (default)\n -d --delay=DELAYDelay between updates\n -n --iterations=N Run for N iterations before exiting\n @@ -583,6 +594,7 @@ static int parse_argv(int argc, char *argv[]) { { delay, required_argument, NULL, 'd' }, { iterations, required_argument, NULL, 'n' }, { batch, no_argument, NULL, 'b' }, +{ raw,no_argument, NULL, 'r' }, { depth, required_argument, NULL, ARG_DEPTH }, { cpu,optional_argument, NULL, ARG_CPU_TYPE}, {} @@ -594,7 +606,7 @@ static int parse_argv(int argc, char *argv[]) { assert(argc = 1); assert(argv); -while ((c = getopt_long(argc, argv, hptcmin:bd:, options, NULL)) = 0) +while ((c = getopt_long(argc, argv, hptcmin:brd:, options, NULL)) = 0) switch (c) { @@ -649,6 +661,10 @@ static int parse_argv(int argc, char *argv[]) { arg_batch = true; break; +case 'r': +arg_raw = true; +break; + case 'p': arg_order = ORDER_PATH; break; -- 2.0.0 ___ systemd-devel mailing list systemd-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/systemd-devel ___ systemd-devel mailing list systemd-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/systemd-devel
[systemd-devel] [PATCH] cgtop: raw output option (disable conversion to human-readable units)
From: Charles Duffy chadu...@cisco.com --- src/cgtop/cgtop.c | 34 +- 1 file changed, 21 insertions(+), 13 deletions(-) diff --git a/src/cgtop/cgtop.c b/src/cgtop/cgtop.c index a390cf3..2849a1d 100644 --- a/src/cgtop/cgtop.c +++ b/src/cgtop/cgtop.c @@ -62,6 +62,7 @@ typedef struct Group { static unsigned arg_depth = 3; static unsigned arg_iterations = 0; static bool arg_batch = false; +static bool arg_raw = false; static usec_t arg_delay = 1*USEC_PER_SEC; static enum { @@ -96,6 +97,16 @@ static void group_hashmap_free(Hashmap *h) { hashmap_free(h); } +static const char *cond_format_bytes(char *buf, size_t l, off_t t, bool raw, bool is_valid) { +if (!is_valid) +return -; +if (raw) { +snprintf(buf, l, %zd, t); +return buf; +} +return format_bytes(buf, l, t); +} + static int process(const char *controller, const char *path, Hashmap *a, Hashmap *b, unsigned iteration) { Group *g; int r; @@ -532,18 +543,9 @@ static int display(Hashmap *a) { } else printf( %*s, maxtcpu, format_timespan(buffer, sizeof(buffer), (nsec_t) (g-cpu_usage / NSEC_PER_USEC), 0)); -if (g-memory_valid) -printf( %8s, format_bytes(buffer, sizeof(buffer), g-memory)); -else -fputs(-, stdout); - -if (g-io_valid) { -printf( %8s, - format_bytes(buffer, sizeof(buffer), g-io_input_bps)); -printf( %8s, - format_bytes(buffer, sizeof(buffer), g-io_output_bps)); -} else -fputs(--, stdout); +printf( %8s, cond_format_bytes(buffer, sizeof(buffer), g-memory, arg_raw, g-memory_valid)); +printf( %8s, cond_format_bytes(buffer, sizeof(buffer), g-io_input_bps, arg_raw, g-io_valid)); +printf( %8s, cond_format_bytes(buffer, sizeof(buffer), g-io_output_bps, arg_raw, g-io_valid)); putchar('\n'); } @@ -561,6 +563,7 @@ static void help(void) { -c Order by CPU load\n -m Order by memory load\n -i Order by IO load\n + -r Provide raw (not human-readable) numbers\n --cpu[=TYPE] Show CPU usage as time or percentage (default)\n -d --delay=DELAYDelay between updates\n -n --iterations=N Run for N iterations before exiting\n @@ -583,6 +586,7 @@ static int parse_argv(int argc, char *argv[]) { { delay, required_argument, NULL, 'd' }, { iterations, required_argument, NULL, 'n' }, { batch, no_argument, NULL, 'b' }, +{ raw,no_argument, NULL, 'r' }, { depth, required_argument, NULL, ARG_DEPTH }, { cpu,optional_argument, NULL, ARG_CPU_TYPE}, {} @@ -594,7 +598,7 @@ static int parse_argv(int argc, char *argv[]) { assert(argc = 1); assert(argv); -while ((c = getopt_long(argc, argv, hptcmin:bd:, options, NULL)) = 0) +while ((c = getopt_long(argc, argv, hptcmin:brd:, options, NULL)) = 0) switch (c) { @@ -649,6 +653,10 @@ static int parse_argv(int argc, char *argv[]) { arg_batch = true; break; +case 'r': +arg_raw = true; +break; + case 'p': arg_order = ORDER_PATH; break; -- 2.0.0 ___ systemd-devel mailing list systemd-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/systemd-devel
[systemd-devel] [PATCH] cgtop: raw output option (disable conversion to human-readable units) [r3]
From: Charles Duffy chadu...@cisco.com Another take, incorporating feedback from r2. Charles Duffy (1): cgtop: raw output option (disable conversion to human-readable units) src/cgtop/cgtop.c | 34 +- 1 file changed, 21 insertions(+), 13 deletions(-) -- 2.0.0 ___ systemd-devel mailing list systemd-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/systemd-devel
Re: [systemd-devel] [PATCH] cgtop: raw output option (disable conversion to human-readable units)
Patchset imported to github. Pull request: https://github.com/systemd-devs/systemd/compare/master...systemd-mailing-devs:1432339750-31673-2-git-send-email-charles%40dyfis.net -- Generated by https://github.com/haraldh/mail2git ___ systemd-devel mailing list systemd-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/systemd-devel
Re: [systemd-devel] [PATCH] cgtop: raw output option (disable conversion to human-readable units)
Hi Charles, We have done something similar to this with the cpu accounting. The option is --cpu=TYPE (There is also hidden key '%' on the tty output which toggles between different display modes). If this patch will be taken I think we should be consistent. Maybe something like --io=TYPE or --memory=TYPE. Umut On Fri, May 22, 2015 at 11:56 PM, Charles Duffy char...@dyfis.net wrote: From: Charles Duffy chadu...@cisco.com --- src/cgtop/cgtop.c | 28 ++-- 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/src/cgtop/cgtop.c b/src/cgtop/cgtop.c index a390cf3..0dbac7f 100644 --- a/src/cgtop/cgtop.c +++ b/src/cgtop/cgtop.c @@ -62,6 +62,7 @@ typedef struct Group { static unsigned arg_depth = 3; static unsigned arg_iterations = 0; static bool arg_batch = false; +static bool arg_raw = false; static usec_t arg_delay = 1*USEC_PER_SEC; static enum { @@ -533,15 +534,24 @@ static int display(Hashmap *a) { printf( %*s, maxtcpu, format_timespan(buffer, sizeof(buffer), (nsec_t) (g-cpu_usage / NSEC_PER_USEC), 0)); if (g-memory_valid) -printf( %8s, format_bytes(buffer, sizeof(buffer), g-memory)); +if(arg_raw) { +printf( %8ld, g-memory); +} else { +printf( %8s, format_bytes(buffer, sizeof(buffer), g-memory)); +} else fputs(-, stdout); if (g-io_valid) { -printf( %8s, - format_bytes(buffer, sizeof(buffer), g-io_input_bps)); -printf( %8s, - format_bytes(buffer, sizeof(buffer), g-io_output_bps)); +if(arg_raw) { +printf( %8ld, g-io_input_bps); +printf( %8ld, g-io_output_bps); +} else { +printf( %8s, + format_bytes(buffer, sizeof(buffer), g-io_input_bps)); +printf( %8s, + format_bytes(buffer, sizeof(buffer), g-io_output_bps)); +} } else fputs(--, stdout); @@ -561,6 +571,7 @@ static void help(void) { -c Order by CPU load\n -m Order by memory load\n -i Order by IO load\n + -r Provide raw (not human-readable) numbers\n --cpu[=TYPE] Show CPU usage as time or percentage (default)\n -d --delay=DELAYDelay between updates\n -n --iterations=N Run for N iterations before exiting\n @@ -583,6 +594,7 @@ static int parse_argv(int argc, char *argv[]) { { delay, required_argument, NULL, 'd' }, { iterations, required_argument, NULL, 'n' }, { batch, no_argument, NULL, 'b' }, +{ raw,no_argument, NULL, 'r' }, { depth, required_argument, NULL, ARG_DEPTH }, { cpu,optional_argument, NULL, ARG_CPU_TYPE}, {} @@ -594,7 +606,7 @@ static int parse_argv(int argc, char *argv[]) { assert(argc = 1); assert(argv); -while ((c = getopt_long(argc, argv, hptcmin:bd:, options, NULL)) = 0) +while ((c = getopt_long(argc, argv, hptcmin:brd:, options, NULL)) = 0) switch (c) { @@ -649,6 +661,10 @@ static int parse_argv(int argc, char *argv[]) { arg_batch = true; break; +case 'r': +arg_raw = true; +break; + case 'p': arg_order = ORDER_PATH; break; -- 2.0.0 ___ systemd-devel mailing list systemd-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/systemd-devel ___ systemd-devel mailing list systemd-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/systemd-devel
Re: [systemd-devel] [PATCH] cgtop: raw output option (disable conversion to human-readable units)
Patchset imported to github. Pull request: https://github.com/systemd-devs/systemd/compare/master...systemd-mailing-devs:1432331775-28932-2-git-send-email-charles%40dyfis.net -- Generated by https://github.com/haraldh/mail2git ___ systemd-devel mailing list systemd-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/systemd-devel
[systemd-devel] [PATCH] cgtop: raw output option (disable conversion to human-readable units)
From: Charles Duffy chadu...@cisco.com --- src/cgtop/cgtop.c | 28 ++-- 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/src/cgtop/cgtop.c b/src/cgtop/cgtop.c index a390cf3..0dbac7f 100644 --- a/src/cgtop/cgtop.c +++ b/src/cgtop/cgtop.c @@ -62,6 +62,7 @@ typedef struct Group { static unsigned arg_depth = 3; static unsigned arg_iterations = 0; static bool arg_batch = false; +static bool arg_raw = false; static usec_t arg_delay = 1*USEC_PER_SEC; static enum { @@ -533,15 +534,24 @@ static int display(Hashmap *a) { printf( %*s, maxtcpu, format_timespan(buffer, sizeof(buffer), (nsec_t) (g-cpu_usage / NSEC_PER_USEC), 0)); if (g-memory_valid) -printf( %8s, format_bytes(buffer, sizeof(buffer), g-memory)); +if(arg_raw) { +printf( %8ld, g-memory); +} else { +printf( %8s, format_bytes(buffer, sizeof(buffer), g-memory)); +} else fputs(-, stdout); if (g-io_valid) { -printf( %8s, - format_bytes(buffer, sizeof(buffer), g-io_input_bps)); -printf( %8s, - format_bytes(buffer, sizeof(buffer), g-io_output_bps)); +if(arg_raw) { +printf( %8ld, g-io_input_bps); +printf( %8ld, g-io_output_bps); +} else { +printf( %8s, + format_bytes(buffer, sizeof(buffer), g-io_input_bps)); +printf( %8s, + format_bytes(buffer, sizeof(buffer), g-io_output_bps)); +} } else fputs(--, stdout); @@ -561,6 +571,7 @@ static void help(void) { -c Order by CPU load\n -m Order by memory load\n -i Order by IO load\n + -r Provide raw (not human-readable) numbers\n --cpu[=TYPE] Show CPU usage as time or percentage (default)\n -d --delay=DELAYDelay between updates\n -n --iterations=N Run for N iterations before exiting\n @@ -583,6 +594,7 @@ static int parse_argv(int argc, char *argv[]) { { delay, required_argument, NULL, 'd' }, { iterations, required_argument, NULL, 'n' }, { batch, no_argument, NULL, 'b' }, +{ raw,no_argument, NULL, 'r' }, { depth, required_argument, NULL, ARG_DEPTH }, { cpu,optional_argument, NULL, ARG_CPU_TYPE}, {} @@ -594,7 +606,7 @@ static int parse_argv(int argc, char *argv[]) { assert(argc = 1); assert(argv); -while ((c = getopt_long(argc, argv, hptcmin:bd:, options, NULL)) = 0) +while ((c = getopt_long(argc, argv, hptcmin:brd:, options, NULL)) = 0) switch (c) { @@ -649,6 +661,10 @@ static int parse_argv(int argc, char *argv[]) { arg_batch = true; break; +case 'r': +arg_raw = true; +break; + case 'p': arg_order = ORDER_PATH; break; -- 2.0.0 ___ systemd-devel mailing list systemd-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/systemd-devel