irqtop: improve header

Change total to display delta or count depending on run mode.  Add space in
between header and irqtop body.  Print only number of active CPU in header.

Signed-off-by: Sami Kerola <kerolasa@iki.fi>
This commit is contained in:
Sami Kerola 2020-02-22 14:48:55 +00:00
parent bf611f4034
commit daee272009
No known key found for this signature in database
GPG Key ID: 0D46FEF7E61DBB46
1 changed files with 19 additions and 28 deletions

View File

@ -72,7 +72,6 @@
#define IRQ_NAME_LEN 4
#define IRQ_DESC_LEN 64
#define IRQ_INFO_LEN 64
#define RESERVE_ROWS (1 + 2 + 1) /* summary + header + last row */
#define MAX_EVENTS 3
struct colinfo {
@ -105,7 +104,6 @@ struct irq_stat {
unsigned int nr_irq; /* number of irq vector */
unsigned int nr_irq_info; /* number of irq info */
struct irq_info *irq_info; /* array of irq_info */
long nr_online_cpu; /* number of online cpu */
long nr_active_cpu; /* number of active cpu */
unsigned long total_irq; /* total irqs */
};
@ -283,7 +281,6 @@ static struct irq_stat *get_irqinfo(struct irqtop_ctl *ctl)
goto close_file;
}
stat->nr_online_cpu = ctl->smp_num_cpus;
tmp = buffer;
while ((tmp = strstr(tmp, "CPU")) != NULL) {
tmp += 3; /* skip this "CPU", find next */
@ -444,13 +441,6 @@ static void parse_input(struct irqtop_ctl *ctl, char c)
}
}
static inline size_t choose_smaller(size_t a, size_t b)
{
if (a < b)
return a;
return b;
}
static inline void print_line(struct irqtop_ctl *ctl, const char *fmt, ...)
{
va_list args;
@ -473,25 +463,13 @@ static int update_screen(struct irqtop_ctl *ctl)
time_t now;
char timestr[64];
/* the stats */
stat = get_irqinfo(ctl);
if (!stat) {
ctl->request_exit = 1;
return 1;
}
/* summary header */
if (!ctl->run_once)
move(0, 0);
if (!ctl->json) {
now = time(NULL);
strtime_iso(&now, ISO_TIMESTAMP_T, timestr, sizeof(timestr));
print_line(ctl,
"irqtop - IRQ: %d TOTAL: %ld CPU: %ld ACTIVE CPU: %ld\n"
"HOST: %s TIME: %s\n",
stat->nr_irq, stat->total_irq, stat->nr_online_cpu,
stat->nr_active_cpu, ctl->hostname, timestr);
}
/* the stats */
if (!ctl->run_once && ctl->old_rows != ctl->rows) {
resizeterm(ctl->rows, ctl->cols);
ctl->old_rows = ctl->rows;
@ -502,18 +480,31 @@ static int update_screen(struct irqtop_ctl *ctl)
size = sizeof(*stat->irq_info) * stat->nr_irq;
result = xmalloc(size);
memcpy(result, stat->irq_info, size);
if (!ctl->display_total) {
for (index = 0; ctl->prev_stat && index < stat->nr_irq; index++)
if (!ctl->display_total && ctl->prev_stat) {
stat->total_irq = 0;
for (index = 0; index < stat->nr_irq; index++) {
result[index].count -= ctl->prev_stat->irq_info[index].count;
stat->total_irq += result[index].count;
}
}
sort_result(ctl, result, stat->nr_irq);
size = choose_smaller(ctl->rows - RESERVE_ROWS, stat->nr_irq);
for (index = 0; index < size; index++) {
for (index = 0; index < stat->nr_irq; index++) {
curr = result + index;
add_scols_line(ctl, curr);
}
free(result);
/* header */
if (!ctl->run_once)
move(0, 0);
if (!ctl->json) {
now = time(NULL);
strtime_iso(&now, ISO_TIMESTAMP_T, timestr, sizeof(timestr));
print_line(ctl,
"irqtop - total: %ld host: %s time: %s\n\n",
stat->total_irq, ctl->hostname, timestr);
}
/* body */
if (ctl->run_once)
scols_print_table(ctl->table);
else {
@ -523,8 +514,8 @@ static int update_screen(struct irqtop_ctl *ctl)
print_line(ctl, "%s", data);
free(data);
}
/* clean up */
scols_unref_table(ctl->table);
if (!ctl->display_total) {
if (ctl->prev_stat)
free_irqinfo(ctl->prev_stat);