|
@@ -65,6 +65,7 @@
|
|
|
#include "util/tool.h"
|
|
|
#include "util/string2.h"
|
|
|
#include "util/metricgroup.h"
|
|
|
+#include "util/top.h"
|
|
|
#include "asm/bug.h"
|
|
|
|
|
|
#include <linux/time64.h>
|
|
@@ -173,6 +174,7 @@ static struct cpu_map *aggr_map;
|
|
|
static aggr_get_id_t aggr_get_id;
|
|
|
static bool append_file;
|
|
|
static bool interval_count;
|
|
|
+static bool interval_clear;
|
|
|
static const char *output_name;
|
|
|
static int output_fd;
|
|
|
static int print_free_counters_hint;
|
|
@@ -1704,9 +1706,12 @@ static void print_interval(char *prefix, struct timespec *ts)
|
|
|
FILE *output = stat_config.output;
|
|
|
static int num_print_interval;
|
|
|
|
|
|
+ if (interval_clear)
|
|
|
+ puts(CONSOLE_CLEAR);
|
|
|
+
|
|
|
sprintf(prefix, "%6lu.%09lu%s", ts->tv_sec, ts->tv_nsec, csv_sep);
|
|
|
|
|
|
- if (num_print_interval == 0 && !csv_output) {
|
|
|
+ if ((num_print_interval == 0 && !csv_output) || interval_clear) {
|
|
|
switch (stat_config.aggr_mode) {
|
|
|
case AGGR_SOCKET:
|
|
|
fprintf(output, "# time socket cpus");
|
|
@@ -1738,7 +1743,7 @@ static void print_interval(char *prefix, struct timespec *ts)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- if (num_print_interval == 0 && metric_only)
|
|
|
+ if ((num_print_interval == 0 && metric_only) || interval_clear)
|
|
|
print_metric_headers(" ", true);
|
|
|
if (++num_print_interval == 25)
|
|
|
num_print_interval = 0;
|
|
@@ -2057,6 +2062,8 @@ static const struct option stat_options[] = {
|
|
|
"(overhead is possible for values <= 100ms)"),
|
|
|
OPT_INTEGER(0, "interval-count", &stat_config.times,
|
|
|
"print counts for fixed number of times"),
|
|
|
+ OPT_BOOLEAN(0, "interval-clear", &interval_clear,
|
|
|
+ "clear screen in between new interval"),
|
|
|
OPT_UINTEGER(0, "timeout", &stat_config.timeout,
|
|
|
"stop workload and print counts after a timeout period in ms (>= 10ms)"),
|
|
|
OPT_SET_UINT(0, "per-socket", &stat_config.aggr_mode,
|