cgtop: raw output option (disable conversion to human-readable units)
This commit is contained in:
parent
cde40acc80
commit
a2c9f63136
|
@ -142,6 +142,15 @@
|
||||||
file.</para></listitem>
|
file.</para></listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
|
||||||
|
<varlistentry>
|
||||||
|
<term><option>-r</option></term>
|
||||||
|
<term><option>--raw</option></term>
|
||||||
|
|
||||||
|
<listitem><para>Format byte counts (as in memory usage and IO metrics)
|
||||||
|
with raw numeric values rather than human-readable
|
||||||
|
numbers.</para></listitem>
|
||||||
|
</varlistentry>
|
||||||
|
|
||||||
<varlistentry>
|
<varlistentry>
|
||||||
<term><option>-n</option></term>
|
<term><option>-n</option></term>
|
||||||
<term><option>--iterations=</option></term>
|
<term><option>--iterations=</option></term>
|
||||||
|
|
|
@ -62,6 +62,7 @@ typedef struct Group {
|
||||||
static unsigned arg_depth = 3;
|
static unsigned arg_depth = 3;
|
||||||
static unsigned arg_iterations = 0;
|
static unsigned arg_iterations = 0;
|
||||||
static bool arg_batch = false;
|
static bool arg_batch = false;
|
||||||
|
static bool arg_raw = false;
|
||||||
static usec_t arg_delay = 1*USEC_PER_SEC;
|
static usec_t arg_delay = 1*USEC_PER_SEC;
|
||||||
|
|
||||||
static enum {
|
static enum {
|
||||||
|
@ -96,6 +97,16 @@ static void group_hashmap_free(Hashmap *h) {
|
||||||
hashmap_free(h);
|
hashmap_free(h);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const char *maybe_format_bytes(char *buf, size_t l, bool is_valid, off_t t) {
|
||||||
|
if (!is_valid)
|
||||||
|
return "-";
|
||||||
|
if (arg_raw) {
|
||||||
|
snprintf(buf, l, "%jd", t);
|
||||||
|
return buf;
|
||||||
|
}
|
||||||
|
return format_bytes(buf, l, t);
|
||||||
|
}
|
||||||
|
|
||||||
static int process(const char *controller, const char *path, Hashmap *a, Hashmap *b, unsigned iteration) {
|
static int process(const char *controller, const char *path, Hashmap *a, Hashmap *b, unsigned iteration) {
|
||||||
Group *g;
|
Group *g;
|
||||||
int r;
|
int r;
|
||||||
|
@ -532,18 +543,9 @@ static int display(Hashmap *a) {
|
||||||
} else
|
} else
|
||||||
printf(" %*s", maxtcpu, format_timespan(buffer, sizeof(buffer), (nsec_t) (g->cpu_usage / NSEC_PER_USEC), 0));
|
printf(" %*s", maxtcpu, format_timespan(buffer, sizeof(buffer), (nsec_t) (g->cpu_usage / NSEC_PER_USEC), 0));
|
||||||
|
|
||||||
if (g->memory_valid)
|
printf(" %8s", maybe_format_bytes(buffer, sizeof(buffer), g->memory_valid, g->memory));
|
||||||
printf(" %8s", format_bytes(buffer, sizeof(buffer), g->memory));
|
printf(" %8s", maybe_format_bytes(buffer, sizeof(buffer), g->io_valid, g->io_input_bps));
|
||||||
else
|
printf(" %8s", maybe_format_bytes(buffer, sizeof(buffer), g->io_valid, g->io_output_bps));
|
||||||
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);
|
|
||||||
|
|
||||||
putchar('\n');
|
putchar('\n');
|
||||||
}
|
}
|
||||||
|
@ -561,6 +563,7 @@ static void help(void) {
|
||||||
" -c Order by CPU load\n"
|
" -c Order by CPU load\n"
|
||||||
" -m Order by memory load\n"
|
" -m Order by memory load\n"
|
||||||
" -i Order by IO load\n"
|
" -i Order by IO load\n"
|
||||||
|
" -r --raw Provide raw (not human-readable) numbers\n"
|
||||||
" --cpu[=TYPE] Show CPU usage as time or percentage (default)\n"
|
" --cpu[=TYPE] Show CPU usage as time or percentage (default)\n"
|
||||||
" -d --delay=DELAY Delay between updates\n"
|
" -d --delay=DELAY Delay between updates\n"
|
||||||
" -n --iterations=N Run for N iterations before exiting\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' },
|
{ "delay", required_argument, NULL, 'd' },
|
||||||
{ "iterations", required_argument, NULL, 'n' },
|
{ "iterations", required_argument, NULL, 'n' },
|
||||||
{ "batch", no_argument, NULL, 'b' },
|
{ "batch", no_argument, NULL, 'b' },
|
||||||
|
{ "raw", no_argument, NULL, 'r' },
|
||||||
{ "depth", required_argument, NULL, ARG_DEPTH },
|
{ "depth", required_argument, NULL, ARG_DEPTH },
|
||||||
{ "cpu", optional_argument, NULL, ARG_CPU_TYPE},
|
{ "cpu", optional_argument, NULL, ARG_CPU_TYPE},
|
||||||
{}
|
{}
|
||||||
|
@ -594,7 +598,7 @@ static int parse_argv(int argc, char *argv[]) {
|
||||||
assert(argc >= 1);
|
assert(argc >= 1);
|
||||||
assert(argv);
|
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) {
|
switch (c) {
|
||||||
|
|
||||||
|
@ -649,6 +653,10 @@ static int parse_argv(int argc, char *argv[]) {
|
||||||
arg_batch = true;
|
arg_batch = true;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case 'r':
|
||||||
|
arg_raw = true;
|
||||||
|
break;
|
||||||
|
|
||||||
case 'p':
|
case 'p':
|
||||||
arg_order = ORDER_PATH;
|
arg_order = ORDER_PATH;
|
||||||
break;
|
break;
|
||||||
|
|
Loading…
Reference in a new issue