* [PATCH V2 1/4] irqtop: add batch mode support
2025-02-28 16:13 [PATCH V2 0/4] irqtop,lsirq: Miscellaneous enhancements Joe Jin
@ 2025-02-28 16:13 ` Joe Jin
2025-02-28 16:13 ` [PATCH V2 2/4] irqtop: add max iteration support Joe Jin
` (4 subsequent siblings)
5 siblings, 0 replies; 13+ messages in thread
From: Joe Jin @ 2025-02-28 16:13 UTC (permalink / raw)
To: Karel Zak, Zhenwei Pi, Sami Kerola; +Cc: util-linux, Joe Jin
Add batch mode support, which could be useful for sending output to
other programs or to a file.
Signed-off-by: Joe Jin <joe.jin@oracle.com>
Cc: Zhenwei Pi <pizhenwei@bytedance.com>
Cc: Sami Kerola <kerolasa@iki.fi>
Cc: Karel Zak <kzak@redhat.com>
---
bash-completion/irqtop | 6 ++-
sys-utils/irqtop.1.adoc | 3 ++
sys-utils/irqtop.c | 89 ++++++++++++++++++++++++++++++-----------
3 files changed, 73 insertions(+), 25 deletions(-)
diff --git a/bash-completion/irqtop b/bash-completion/irqtop
index b9e454d4c..215281ee8 100644
--- a/bash-completion/irqtop
+++ b/bash-completion/irqtop
@@ -5,6 +5,9 @@ _irqtop_module()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
case $prev in
+ '-b'|'--batch')
+ return 0
+ ;;
'-c'|'--cpu-stat')
COMPREPLY=( $(compgen -W "auto enable disable" -- $cur) )
return 0
@@ -40,7 +43,8 @@ _irqtop_module()
return 0
;;
esac
- OPTS=" --cpu-stat
+ OPTS=" --batch
+ --cpu-stat
--cpu-list
--delay
--sort
diff --git a/sys-utils/irqtop.1.adoc b/sys-utils/irqtop.1.adoc
index 443e23b84..e81f4fbb6 100644
--- a/sys-utils/irqtop.1.adoc
+++ b/sys-utils/irqtop.1.adoc
@@ -25,6 +25,9 @@ The default output is subject to change. So whenever possible, you should avoid
*-o*, *--output* _list_::
Specify which output columns to print. Use *--help* to get a list of all supported columns. The default list of columns may be extended if list is specified in the format _+list_.
+*-b*, *--batch*::
+Starts irqtop in batch mode, which could be useful for sending output to other programs or to a file.
+
*-c*, *--cpu-stat* _mode_::
Show per-cpu statistics by specified mode. Available modes are: *auto*, *enable*, *disable*. The default option *auto* detects the width of window, then shows the per-cpu statistics if the width of window is large enough to show a full line of statistics.
diff --git a/sys-utils/irqtop.c b/sys-utils/irqtop.c
index 8fbedb16a..81a137be0 100644
--- a/sys-utils/irqtop.c
+++ b/sys-utils/irqtop.c
@@ -83,10 +83,32 @@ struct irqtop_ctl {
cpu_set_t *cpuset;
enum irqtop_cpustat_mode cpustat_mode;
+ bool batch;
bool request_exit,
softirq;
};
+static inline int irqtop_printf(struct irqtop_ctl *ctl, const char *fmt, ...)
+{
+ int ret = 0;
+ va_list args;
+
+ if (!ctl)
+ return -1;
+
+ va_start(args, fmt);
+ if (ctl->batch)
+ ret = vprintf(fmt, args);
+ else
+ ret = vw_printw(ctl->win, fmt, args);
+ va_end(args);
+
+ if (!ctl->batch && ret == OK)
+ wrefresh(ctl->win);
+
+ return ret;
+}
+
/* user's input parser */
static void parse_input(struct irqtop_ctl *ctl, struct irq_output *out, char c)
{
@@ -128,16 +150,19 @@ static int update_screen(struct irqtop_ctl *ctl, struct irq_output *out)
scols_table_enable_nowrap(cpus, 1);
}
- /* print header */
- move(0, 0);
strtime_iso(&now, ISO_TIMESTAMP, timestr, sizeof(timestr));
- wprintw(ctl->win, _("irqtop | total: %ld delta: %ld | %s | %s\n\n"),
+ if (!ctl->batch)
+ move(0, 0);
+
+ /* print header */
+ irqtop_printf(ctl, _("irqtop | total: %ld delta: %ld | %s | %s\n\n"),
stat->total_irq, stat->delta_irq, ctl->hostname, timestr);
+
/* print cpus table or not by -c option */
if (cpus) {
scols_print_table_to_string(cpus, &data);
- wprintw(ctl->win, "%s\n\n", data);
+ irqtop_printf(ctl, "%s\n\n", data);
free(data);
}
@@ -149,13 +174,15 @@ static int update_screen(struct irqtop_ctl *ctl, struct irq_output *out)
if (p) {
/* print header in reverse mode */
*p = '\0';
- attron(A_REVERSE);
- wprintw(ctl->win, "%s\n", data);
- attroff(A_REVERSE);
+ if (!ctl->batch)
+ attron(A_REVERSE);
+ irqtop_printf(ctl, "%s\n", data);
+ if (!ctl->batch)
+ attroff(A_REVERSE);
data = p + 1;
}
- wprintw(ctl->win, "%s", data);
+ irqtop_printf(ctl, "%s\n\n", data);
free(data0);
/* clean up */
@@ -212,7 +239,8 @@ static int event_loop(struct irqtop_ctl *ctl, struct irq_output *out)
err(EXIT_FAILURE, _("epoll_ctl failed"));
retval |= update_screen(ctl, out);
- refresh();
+ if (!ctl->batch)
+ refresh();
while (!ctl->request_exit) {
const ssize_t nr_events = epoll_wait(efd, events, MAX_EVENTS, -1);
@@ -227,10 +255,12 @@ static int event_loop(struct irqtop_ctl *ctl, struct irq_output *out)
continue;
}
if (siginfo.ssi_signo == SIGWINCH) {
- get_terminal_dimension(&ctl->cols, &ctl->rows);
+ if (!ctl->batch) {
+ get_terminal_dimension(&ctl->cols, &ctl->rows);
#if HAVE_RESIZETERM
- resizeterm(ctl->rows, ctl->cols);
+ resizeterm(ctl->rows, ctl->cols);
#endif
+ }
}
else {
ctl->request_exit = 1;
@@ -245,7 +275,8 @@ static int event_loop(struct irqtop_ctl *ctl, struct irq_output *out)
} else
abort();
retval |= update_screen(ctl, out);
- refresh();
+ if (!ctl->batch)
+ refresh();
}
}
return retval;
@@ -260,6 +291,7 @@ static void __attribute__((__noreturn__)) usage(void)
puts(_("Interactive utility to display kernel interrupt information."));
fputs(USAGE_OPTIONS, stdout);
+ fputs(_(" -b, --batch batch mode\n"), stdout);
fputs(_(" -c, --cpu-stat <mode> show per-cpu stat (auto, enable, disable)\n"), stdout);
fputs(_(" -C, --cpu-list <list> specify cpus in list format\n"), stdout);
fputs(_(" -d, --delay <secs> delay updates\n"), stdout);
@@ -291,6 +323,7 @@ static void parse_args( struct irqtop_ctl *ctl,
{
const char *outarg = NULL;
static const struct option longopts[] = {
+ {"batch", no_argument, NULL, 'b'},
{"cpu-stat", required_argument, NULL, 'c'},
{"cpu-list", required_argument, NULL, 'C'},
{"delay", required_argument, NULL, 'd'},
@@ -304,8 +337,11 @@ static void parse_args( struct irqtop_ctl *ctl,
};
int o;
- while ((o = getopt_long(argc, argv, "c:C:d:o:s:St:hV", longopts, NULL)) != -1) {
+ while ((o = getopt_long(argc, argv, "bc:C:d:o:s:St:hV", longopts, NULL)) != -1) {
switch (o) {
+ case 'b':
+ ctl->batch = 1;
+ break;
case 'c':
if (!strcmp(optarg, "auto"))
ctl->cpustat_mode = IRQTOP_CPUSTAT_AUTO;
@@ -394,16 +430,18 @@ int main(int argc, char **argv)
parse_args(&ctl, &out, argc, argv);
- is_tty = isatty(STDIN_FILENO);
- if (is_tty && tcgetattr(STDIN_FILENO, &saved_tty) == -1)
- fputs(_("terminal setting retrieval"), stdout);
+ if (!ctl.batch) {
+ is_tty = isatty(STDIN_FILENO);
+ if (is_tty && tcgetattr(STDIN_FILENO, &saved_tty) == -1)
+ fputs(_("terminal setting retrieval"), stdout);
- ctl.win = initscr();
- get_terminal_dimension(&ctl.cols, &ctl.rows);
+ ctl.win = initscr();
+ get_terminal_dimension(&ctl.cols, &ctl.rows);
#if HAVE_RESIZETERM
- resizeterm(ctl.rows, ctl.cols);
+ resizeterm(ctl.rows, ctl.cols);
#endif
- curs_set(0);
+ curs_set(0);
+ }
ctl.hostname = xgethostname();
event_loop(&ctl, &out);
@@ -412,10 +450,13 @@ int main(int argc, char **argv)
free(ctl.hostname);
cpuset_free(ctl.cpuset);
- if (is_tty)
- tcsetattr(STDIN_FILENO, TCSAFLUSH, &saved_tty);
- delwin(ctl.win);
- endwin();
+ if (!ctl.batch) {
+ if (is_tty)
+ tcsetattr(STDIN_FILENO, TCSAFLUSH, &saved_tty);
+
+ delwin(ctl.win);
+ endwin();
+ }
return EXIT_SUCCESS;
}
--
2.43.5
^ permalink raw reply related [flat|nested] 13+ messages in thread* [PATCH V2 2/4] irqtop: add max iteration support
2025-02-28 16:13 [PATCH V2 0/4] irqtop,lsirq: Miscellaneous enhancements Joe Jin
2025-02-28 16:13 ` [PATCH V2 1/4] irqtop: add batch mode support Joe Jin
@ 2025-02-28 16:13 ` Joe Jin
2025-03-03 9:39 ` zhenwei pi
2025-02-28 16:13 ` [PATCH V2 3/4] irqtop: support json output format Joe Jin
` (3 subsequent siblings)
5 siblings, 1 reply; 13+ messages in thread
From: Joe Jin @ 2025-02-28 16:13 UTC (permalink / raw)
To: Karel Zak, Zhenwei Pi, Sami Kerola; +Cc: util-linux, Joe Jin
Add support for setting the number of iterations. This is useful in
non-interactive mode.
Signed-off-by: Joe Jin <joe.jin@oracle.com>
Cc: Zhenwei Pi <pizhenwei@bytedance.com>
Cc: Sami Kerola <kerolasa@iki.fi>
Cc: Karel Zak <kzak@redhat.com>
---
bash-completion/irqtop | 5 +++++
sys-utils/irqtop.1.adoc | 3 +++
sys-utils/irqtop.c | 19 +++++++++++++++++--
3 files changed, 25 insertions(+), 2 deletions(-)
diff --git a/bash-completion/irqtop b/bash-completion/irqtop
index 215281ee8..d18ef99bb 100644
--- a/bash-completion/irqtop
+++ b/bash-completion/irqtop
@@ -22,6 +22,10 @@ _irqtop_module()
COMPREPLY=( $(compgen -W "secs" -- $cur) )
return 0
;;
+ '-n'|'--iter')
+ COMPREPLY=( $(compgen -W "the max iterations" -- $cur) )
+ return 0
+ ;;
'-s'|'--sort')
COMPREPLY=( $(compgen -W "irq total delta name" -- $cur) )
return 0
@@ -47,6 +51,7 @@ _irqtop_module()
--cpu-stat
--cpu-list
--delay
+ --iter
--sort
--output
--softirq
diff --git a/sys-utils/irqtop.1.adoc b/sys-utils/irqtop.1.adoc
index e81f4fbb6..75930f5cf 100644
--- a/sys-utils/irqtop.1.adoc
+++ b/sys-utils/irqtop.1.adoc
@@ -37,6 +37,9 @@ Specify cpus in list format to show.
*-d*, *--delay* _seconds_::
Update interrupt output every _seconds_ intervals.
+*-n*, *--iter* _number_::
+Specifies the maximum iterations before quitting.
+
*-s*, *--sort* _column_::
Specify sort criteria by column name. See *--help* output to get column names. The sort criteria may be changes in interactive mode.
diff --git a/sys-utils/irqtop.c b/sys-utils/irqtop.c
index 81a137be0..17c7d72cb 100644
--- a/sys-utils/irqtop.c
+++ b/sys-utils/irqtop.c
@@ -83,6 +83,7 @@ struct irqtop_ctl {
cpu_set_t *cpuset;
enum irqtop_cpustat_mode cpustat_mode;
+ int64_t iter;
bool batch;
bool request_exit,
softirq;
@@ -190,6 +191,12 @@ static int update_screen(struct irqtop_ctl *ctl, struct irq_output *out)
if (ctl->prev_stat)
free_irqstat(ctl->prev_stat);
ctl->prev_stat = stat;
+
+ if (ctl->iter > 0) {
+ ctl->iter--;
+ if (ctl->iter == 0)
+ ctl->request_exit = 1;
+ }
return 0;
}
@@ -295,6 +302,7 @@ static void __attribute__((__noreturn__)) usage(void)
fputs(_(" -c, --cpu-stat <mode> show per-cpu stat (auto, enable, disable)\n"), stdout);
fputs(_(" -C, --cpu-list <list> specify cpus in list format\n"), stdout);
fputs(_(" -d, --delay <secs> delay updates\n"), stdout);
+ fputs(_(" -n, --iter <number> the maximum number of iterations\n"), stdout);
fputs(_(" -o, --output <list> define which output columns to use\n"), stdout);
fputs(_(" -s, --sort <column> specify sort column\n"), stdout);
fputs(_(" -S, --softirq show softirqs instead of interrupts\n"), stdout);
@@ -327,6 +335,7 @@ static void parse_args( struct irqtop_ctl *ctl,
{"cpu-stat", required_argument, NULL, 'c'},
{"cpu-list", required_argument, NULL, 'C'},
{"delay", required_argument, NULL, 'd'},
+ {"iter", required_argument, NULL, 'n'},
{"sort", required_argument, NULL, 's'},
{"output", required_argument, NULL, 'o'},
{"softirq", no_argument, NULL, 'S'},
@@ -337,7 +346,7 @@ static void parse_args( struct irqtop_ctl *ctl,
};
int o;
- while ((o = getopt_long(argc, argv, "bc:C:d:o:s:St:hV", longopts, NULL)) != -1) {
+ while ((o = getopt_long(argc, argv, "bc:C:d:n:o:s:St:hV", longopts, NULL)) != -1) {
switch (o) {
case 'b':
ctl->batch = 1;
@@ -377,6 +386,11 @@ static void parse_args( struct irqtop_ctl *ctl,
ctl->timer.it_value = ctl->timer.it_interval;
}
break;
+ case 'n':
+ ctl->iter = str2num_or_err(optarg, 10,
+ _("failed to parse iter argument"),
+ 0, INT_MAX);
+ break;
case 's':
set_sort_func_by_name(out, optarg);
break;
@@ -423,7 +437,8 @@ int main(int argc, char **argv)
};
struct irqtop_ctl ctl = {
.timer.it_interval = {3, 0},
- .timer.it_value = {3, 0}
+ .timer.it_value = {3, 0},
+ .iter = -1
};
setlocale(LC_ALL, "");
--
2.43.5
^ permalink raw reply related [flat|nested] 13+ messages in thread* Re: [PATCH V2 2/4] irqtop: add max iteration support
2025-02-28 16:13 ` [PATCH V2 2/4] irqtop: add max iteration support Joe Jin
@ 2025-03-03 9:39 ` zhenwei pi
2025-03-04 1:39 ` Joe Jin
0 siblings, 1 reply; 13+ messages in thread
From: zhenwei pi @ 2025-03-03 9:39 UTC (permalink / raw)
To: Joe Jin, Karel Zak, Sami Kerola; +Cc: util-linux
On 3/1/25 00:13, Joe Jin wrote:
> Add support for setting the number of iterations. This is useful in
> non-interactive mode.
>
> Signed-off-by: Joe Jin <joe.jin@oracle.com>
> Cc: Zhenwei Pi <pizhenwei@bytedance.com>
> Cc: Sami Kerola <kerolasa@iki.fi>
> Cc: Karel Zak <kzak@redhat.com>
> ---
> bash-completion/irqtop | 5 +++++
> sys-utils/irqtop.1.adoc | 3 +++
> sys-utils/irqtop.c | 19 +++++++++++++++++--
> 3 files changed, 25 insertions(+), 2 deletions(-)
>
> diff --git a/bash-completion/irqtop b/bash-completion/irqtop
> index 215281ee8..d18ef99bb 100644
> --- a/bash-completion/irqtop
> +++ b/bash-completion/irqtop
> @@ -22,6 +22,10 @@ _irqtop_module()
> COMPREPLY=( $(compgen -W "secs" -- $cur) )
> return 0
> ;;
> + '-n'|'--iter')
> + COMPREPLY=( $(compgen -W "the max iterations" -- $cur) )
> + return 0
> + ;;
> '-s'|'--sort')
> COMPREPLY=( $(compgen -W "irq total delta name" -- $cur) )
> return 0
> @@ -47,6 +51,7 @@ _irqtop_module()
> --cpu-stat
> --cpu-list
> --delay
> + --iter
> --sort
> --output
> --softirq
> diff --git a/sys-utils/irqtop.1.adoc b/sys-utils/irqtop.1.adoc
> index e81f4fbb6..75930f5cf 100644
> --- a/sys-utils/irqtop.1.adoc
> +++ b/sys-utils/irqtop.1.adoc
> @@ -37,6 +37,9 @@ Specify cpus in list format to show.
> *-d*, *--delay* _seconds_::
> Update interrupt output every _seconds_ intervals.
>
> +*-n*, *--iter* _number_::
> +Specifies the maximum iterations before quitting.
> +
> *-s*, *--sort* _column_::
> Specify sort criteria by column name. See *--help* output to get column names. The sort criteria may be changes in interactive mode.
>
> diff --git a/sys-utils/irqtop.c b/sys-utils/irqtop.c
> index 81a137be0..17c7d72cb 100644
> --- a/sys-utils/irqtop.c
> +++ b/sys-utils/irqtop.c
> @@ -83,6 +83,7 @@ struct irqtop_ctl {
> cpu_set_t *cpuset;
>
> enum irqtop_cpustat_mode cpustat_mode;
> + int64_t iter;
> bool batch;
> bool request_exit,
> softirq;
> @@ -190,6 +191,12 @@ static int update_screen(struct irqtop_ctl *ctl, struct irq_output *out)
> if (ctl->prev_stat)
> free_irqstat(ctl->prev_stat);
> ctl->prev_stat = stat;
> +
> + if (ctl->iter > 0) {
> + ctl->iter--;
> + if (ctl->iter == 0)
> + ctl->request_exit = 1;
> + }
> return 0;
> }
If ctl->iter is initialized as int64_max, then we have codes like:
if (--ctl->iter == 0) {
ctl->request_exit = 1;
}
>
> @@ -295,6 +302,7 @@ static void __attribute__((__noreturn__)) usage(void)
> fputs(_(" -c, --cpu-stat <mode> show per-cpu stat (auto, enable, disable)\n"), stdout);
> fputs(_(" -C, --cpu-list <list> specify cpus in list format\n"), stdout);
> fputs(_(" -d, --delay <secs> delay updates\n"), stdout);
> + fputs(_(" -n, --iter <number> the maximum number of iterations\n"), stdout);
> fputs(_(" -o, --output <list> define which output columns to use\n"), stdout);
> fputs(_(" -s, --sort <column> specify sort column\n"), stdout);
> fputs(_(" -S, --softirq show softirqs instead of interrupts\n"), stdout);
> @@ -327,6 +335,7 @@ static void parse_args( struct irqtop_ctl *ctl,
> {"cpu-stat", required_argument, NULL, 'c'},
> {"cpu-list", required_argument, NULL, 'C'},
> {"delay", required_argument, NULL, 'd'},
> + {"iter", required_argument, NULL, 'n'},
> {"sort", required_argument, NULL, 's'},
> {"output", required_argument, NULL, 'o'},
> {"softirq", no_argument, NULL, 'S'},
> @@ -337,7 +346,7 @@ static void parse_args( struct irqtop_ctl *ctl,
> };
> int o;
>
> - while ((o = getopt_long(argc, argv, "bc:C:d:o:s:St:hV", longopts, NULL)) != -1) {
> + while ((o = getopt_long(argc, argv, "bc:C:d:n:o:s:St:hV", longopts, NULL)) != -1) {
> switch (o) {
> case 'b':
> ctl->batch = 1;
> @@ -377,6 +386,11 @@ static void parse_args( struct irqtop_ctl *ctl,
> ctl->timer.it_value = ctl->timer.it_interval;
> }
> break;
> + case 'n':
> + ctl->iter = str2num_or_err(optarg, 10,
> + _("failed to parse iter argument"),
> + 0, INT_MAX);
> + break;
> case 's':
> set_sort_func_by_name(out, optarg);
> break;
> @@ -423,7 +437,8 @@ int main(int argc, char **argv)
> };
> struct irqtop_ctl ctl = {
> .timer.it_interval = {3, 0},
> - .timer.it_value = {3, 0}
> + .timer.it_value = {3, 0},
> + .iter = -1
> };
>
> setlocale(LC_ALL, "");
^ permalink raw reply [flat|nested] 13+ messages in thread* Re: [PATCH V2 2/4] irqtop: add max iteration support
2025-03-03 9:39 ` zhenwei pi
@ 2025-03-04 1:39 ` Joe Jin
2025-03-04 3:49 ` zhenwei pi
0 siblings, 1 reply; 13+ messages in thread
From: Joe Jin @ 2025-03-04 1:39 UTC (permalink / raw)
To: zhenwei pi, Karel Zak, Sami Kerola; +Cc: util-linux
On 3/3/25 01:39, zhenwei pi wrote:
>
>
> On 3/1/25 00:13, Joe Jin wrote:
>> Add support for setting the number of iterations. This is useful in
>> non-interactive mode.
>>
>> Signed-off-by: Joe Jin <joe.jin@oracle.com>
>> Cc: Zhenwei Pi <pizhenwei@bytedance.com>
>> Cc: Sami Kerola <kerolasa@iki.fi>
>> Cc: Karel Zak <kzak@redhat.com>
>> ---
>> bash-completion/irqtop | 5 +++++
>> sys-utils/irqtop.1.adoc | 3 +++
>> sys-utils/irqtop.c | 19 +++++++++++++++++--
>> 3 files changed, 25 insertions(+), 2 deletions(-)
>>
>> diff --git a/bash-completion/irqtop b/bash-completion/irqtop
>> index 215281ee8..d18ef99bb 100644
>> --- a/bash-completion/irqtop
>> +++ b/bash-completion/irqtop
>> @@ -22,6 +22,10 @@ _irqtop_module()
>> COMPREPLY=( $(compgen -W "secs" -- $cur) )
>> return 0
>> ;;
>> + '-n'|'--iter')
>> + COMPREPLY=( $(compgen -W "the max iterations" -- $cur) )
>> + return 0
>> + ;;
>> '-s'|'--sort')
>> COMPREPLY=( $(compgen -W "irq total delta name" -- $cur) )
>> return 0
>> @@ -47,6 +51,7 @@ _irqtop_module()
>> --cpu-stat
>> --cpu-list
>> --delay
>> + --iter
>> --sort
>> --output
>> --softirq
>> diff --git a/sys-utils/irqtop.1.adoc b/sys-utils/irqtop.1.adoc
>> index e81f4fbb6..75930f5cf 100644
>> --- a/sys-utils/irqtop.1.adoc
>> +++ b/sys-utils/irqtop.1.adoc
>> @@ -37,6 +37,9 @@ Specify cpus in list format to show.
>> *-d*, *--delay* _seconds_::
>> Update interrupt output every _seconds_ intervals.
>> +*-n*, *--iter* _number_::
>> +Specifies the maximum iterations before quitting.
>> +
>> *-s*, *--sort* _column_::
>> Specify sort criteria by column name. See *--help* output to get column names. The sort criteria may be changes in interactive mode.
>> diff --git a/sys-utils/irqtop.c b/sys-utils/irqtop.c
>> index 81a137be0..17c7d72cb 100644
>> --- a/sys-utils/irqtop.c
>> +++ b/sys-utils/irqtop.c
>> @@ -83,6 +83,7 @@ struct irqtop_ctl {
>> cpu_set_t *cpuset;
>> enum irqtop_cpustat_mode cpustat_mode;
>> + int64_t iter;
>> bool batch;
>> bool request_exit,
>> softirq;
>> @@ -190,6 +191,12 @@ static int update_screen(struct irqtop_ctl *ctl, struct irq_output *out)
>> if (ctl->prev_stat)
>> free_irqstat(ctl->prev_stat);
>> ctl->prev_stat = stat;
>> +
>> + if (ctl->iter > 0) {
>> + ctl->iter--;
>> + if (ctl->iter == 0)
>> + ctl->request_exit = 1;
>> + }
>> return 0;
>> }
>
> If ctl->iter is initialized as int64_max, then we have codes like:
>
> if (--ctl->iter == 0) {
> ctl->request_exit = 1;
> }
Yes they are exactly same.
As Karel has queued for CI test, maybe keep current code?
Thanks,
Joe
>
>> @@ -295,6 +302,7 @@ static void __attribute__((__noreturn__)) usage(void)
>> fputs(_(" -c, --cpu-stat <mode> show per-cpu stat (auto, enable, disable)\n"), stdout);
>> fputs(_(" -C, --cpu-list <list> specify cpus in list format\n"), stdout);
>> fputs(_(" -d, --delay <secs> delay updates\n"), stdout);
>> + fputs(_(" -n, --iter <number> the maximum number of iterations\n"), stdout);
>> fputs(_(" -o, --output <list> define which output columns to use\n"), stdout);
>> fputs(_(" -s, --sort <column> specify sort column\n"), stdout);
>> fputs(_(" -S, --softirq show softirqs instead of interrupts\n"), stdout);
>> @@ -327,6 +335,7 @@ static void parse_args( struct irqtop_ctl *ctl,
>> {"cpu-stat", required_argument, NULL, 'c'},
>> {"cpu-list", required_argument, NULL, 'C'},
>> {"delay", required_argument, NULL, 'd'},
>> + {"iter", required_argument, NULL, 'n'},
>> {"sort", required_argument, NULL, 's'},
>> {"output", required_argument, NULL, 'o'},
>> {"softirq", no_argument, NULL, 'S'},
>> @@ -337,7 +346,7 @@ static void parse_args( struct irqtop_ctl *ctl,
>> };
>> int o;
>> - while ((o = getopt_long(argc, argv, "bc:C:d:o:s:St:hV", longopts, NULL)) != -1) {
>> + while ((o = getopt_long(argc, argv, "bc:C:d:n:o:s:St:hV", longopts, NULL)) != -1) {
>> switch (o) {
>> case 'b':
>> ctl->batch = 1;
>> @@ -377,6 +386,11 @@ static void parse_args( struct irqtop_ctl *ctl,
>> ctl->timer.it_value = ctl->timer.it_interval;
>> }
>> break;
>> + case 'n':
>> + ctl->iter = str2num_or_err(optarg, 10,
>> + _("failed to parse iter argument"),
>> + 0, INT_MAX);
>> + break;
>> case 's':
>> set_sort_func_by_name(out, optarg);
>> break;
>> @@ -423,7 +437,8 @@ int main(int argc, char **argv)
>> };
>> struct irqtop_ctl ctl = {
>> .timer.it_interval = {3, 0},
>> - .timer.it_value = {3, 0}
>> + .timer.it_value = {3, 0},
>> + .iter = -1
>> };
>> setlocale(LC_ALL, "");
>
^ permalink raw reply [flat|nested] 13+ messages in thread* Re: Re: [PATCH V2 2/4] irqtop: add max iteration support
2025-03-04 1:39 ` Joe Jin
@ 2025-03-04 3:49 ` zhenwei pi
0 siblings, 0 replies; 13+ messages in thread
From: zhenwei pi @ 2025-03-04 3:49 UTC (permalink / raw)
To: Joe Jin, Karel Zak, Sami Kerola; +Cc: util-linux
>>
>> If ctl->iter is initialized as int64_max, then we have codes like:
>>
>> if (--ctl->iter == 0) {
>> ctl->request_exit = 1;
>> }
>
> Yes they are exactly same.
> As Karel has queued for CI test, maybe keep current code?
>
> Thanks,
> Joe
Fine.
^ permalink raw reply [flat|nested] 13+ messages in thread
* [PATCH V2 3/4] irqtop: support json output format
2025-02-28 16:13 [PATCH V2 0/4] irqtop,lsirq: Miscellaneous enhancements Joe Jin
2025-02-28 16:13 ` [PATCH V2 1/4] irqtop: add batch mode support Joe Jin
2025-02-28 16:13 ` [PATCH V2 2/4] irqtop: add max iteration support Joe Jin
@ 2025-02-28 16:13 ` Joe Jin
2025-02-28 16:13 ` [PATCH V2 4/4] lsirq: add support for reading data from given file Joe Jin
` (2 subsequent siblings)
5 siblings, 0 replies; 13+ messages in thread
From: Joe Jin @ 2025-02-28 16:13 UTC (permalink / raw)
To: Karel Zak, Zhenwei Pi, Sami Kerola; +Cc: util-linux, Joe Jin
Signed-off-by: Joe Jin <joe.jin@oracle.com>
Cc: Zhenwei Pi <pizhenwei@bytedance.com>
Cc: Sami Kerola <kerolasa@iki.fi>
Cc: Karel Zak <kzak@redhat.com>
---
bash-completion/irqtop | 1 +
sys-utils/irqtop.1.adoc | 3 +++
sys-utils/irqtop.c | 8 +++++++-
3 files changed, 11 insertions(+), 1 deletion(-)
diff --git a/bash-completion/irqtop b/bash-completion/irqtop
index d18ef99bb..5faf122e5 100644
--- a/bash-completion/irqtop
+++ b/bash-completion/irqtop
@@ -48,6 +48,7 @@ _irqtop_module()
;;
esac
OPTS=" --batch
+ --json
--cpu-stat
--cpu-list
--delay
diff --git a/sys-utils/irqtop.1.adoc b/sys-utils/irqtop.1.adoc
index 75930f5cf..880ee1906 100644
--- a/sys-utils/irqtop.1.adoc
+++ b/sys-utils/irqtop.1.adoc
@@ -37,6 +37,9 @@ Specify cpus in list format to show.
*-d*, *--delay* _seconds_::
Update interrupt output every _seconds_ intervals.
+*-J*, *--json*::
+Use JSON output format. irqtop will run in batch mode.
+
*-n*, *--iter* _number_::
Specifies the maximum iterations before quitting.
diff --git a/sys-utils/irqtop.c b/sys-utils/irqtop.c
index 17c7d72cb..48b65201f 100644
--- a/sys-utils/irqtop.c
+++ b/sys-utils/irqtop.c
@@ -302,6 +302,7 @@ static void __attribute__((__noreturn__)) usage(void)
fputs(_(" -c, --cpu-stat <mode> show per-cpu stat (auto, enable, disable)\n"), stdout);
fputs(_(" -C, --cpu-list <list> specify cpus in list format\n"), stdout);
fputs(_(" -d, --delay <secs> delay updates\n"), stdout);
+ fputs(_(" -J, --json use JSON output format (will run in batch mode)\n"), stdout);
fputs(_(" -n, --iter <number> the maximum number of iterations\n"), stdout);
fputs(_(" -o, --output <list> define which output columns to use\n"), stdout);
fputs(_(" -s, --sort <column> specify sort column\n"), stdout);
@@ -336,6 +337,7 @@ static void parse_args( struct irqtop_ctl *ctl,
{"cpu-list", required_argument, NULL, 'C'},
{"delay", required_argument, NULL, 'd'},
{"iter", required_argument, NULL, 'n'},
+ {"json", no_argument, NULL, 'J'},
{"sort", required_argument, NULL, 's'},
{"output", required_argument, NULL, 'o'},
{"softirq", no_argument, NULL, 'S'},
@@ -346,7 +348,7 @@ static void parse_args( struct irqtop_ctl *ctl,
};
int o;
- while ((o = getopt_long(argc, argv, "bc:C:d:n:o:s:St:hV", longopts, NULL)) != -1) {
+ while ((o = getopt_long(argc, argv, "bc:C:d:Jn:o:s:St:hV", longopts, NULL)) != -1) {
switch (o) {
case 'b':
ctl->batch = 1;
@@ -386,6 +388,10 @@ static void parse_args( struct irqtop_ctl *ctl,
ctl->timer.it_value = ctl->timer.it_interval;
}
break;
+ case 'J':
+ out->json = 1;
+ ctl->batch = 1;
+ break;
case 'n':
ctl->iter = str2num_or_err(optarg, 10,
_("failed to parse iter argument"),
--
2.43.5
^ permalink raw reply related [flat|nested] 13+ messages in thread* [PATCH V2 4/4] lsirq: add support for reading data from given file
2025-02-28 16:13 [PATCH V2 0/4] irqtop,lsirq: Miscellaneous enhancements Joe Jin
` (2 preceding siblings ...)
2025-02-28 16:13 ` [PATCH V2 3/4] irqtop: support json output format Joe Jin
@ 2025-02-28 16:13 ` Joe Jin
2025-03-03 10:16 ` [PATCH V2 0/4] irqtop,lsirq: Miscellaneous enhancements Karel Zak
2025-03-04 10:58 ` Karel Zak
5 siblings, 0 replies; 13+ messages in thread
From: Joe Jin @ 2025-02-28 16:13 UTC (permalink / raw)
To: Karel Zak, Zhenwei Pi, Sami Kerola; +Cc: util-linux, Joe Jin
This is helpful for analyzng data saved from other system.
Signed-off-by: Joe Jin <joe.jin@oracle.com>
Cc: Zhenwei Pi <pizhenwei@bytedance.com>
Cc: Sami Kerola <kerolasa@iki.fi>
Cc: Karel Zak <kzak@redhat.com>
---
bash-completion/lsirq | 4 ++++
sys-utils/irq-common.c | 19 +++++++++----------
sys-utils/irq-common.h | 3 ++-
sys-utils/irqtop.c | 12 ++++++++++--
sys-utils/lsirq.1.adoc | 3 +++
sys-utils/lsirq.c | 24 ++++++++++++++++++++----
6 files changed, 48 insertions(+), 17 deletions(-)
diff --git a/bash-completion/lsirq b/bash-completion/lsirq
index 4c3c9f04f..b913eecd0 100644
--- a/bash-completion/lsirq
+++ b/bash-completion/lsirq
@@ -5,6 +5,9 @@ _lsirq_module()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
case $prev in
+ '-i'|'--input')
+ COMPREPLY=( $(compgen -W "input file" -- $cur) )
+ ;;
'-o'|'--output')
local prefix realcur OUTPUT
realcur="${cur##*,}"
@@ -35,6 +38,7 @@ _lsirq_module()
OPTS=" --json
--pairs
--noheadings
+ --input
--output
--softirq
--sort
diff --git a/sys-utils/irq-common.c b/sys-utils/irq-common.c
index f069d8a63..560dd4b82 100644
--- a/sys-utils/irq-common.c
+++ b/sys-utils/irq-common.c
@@ -233,7 +233,8 @@ static bool cpu_in_list(int cpu, size_t setsize, cpu_set_t *cpuset)
/*
* irqinfo - parse the system's interrupts
*/
-static struct irq_stat *get_irqinfo(int softirq, size_t setsize, cpu_set_t *cpuset)
+static struct irq_stat *get_irqinfo(const char *input_file, int softirq,
+ size_t setsize, cpu_set_t *cpuset)
{
FILE *irqfile;
char *line = NULL, *tmp;
@@ -247,18 +248,15 @@ static struct irq_stat *get_irqinfo(int softirq, size_t setsize, cpu_set_t *cpus
stat->irq_info = xmalloc(sizeof(*stat->irq_info) * IRQ_INFO_LEN);
stat->nr_irq_info = IRQ_INFO_LEN;
- if (softirq)
- irqfile = fopen(_PATH_PROC_SOFTIRQS, "r");
- else
- irqfile = fopen(_PATH_PROC_INTERRUPTS, "r");
+ irqfile = fopen(input_file, "r");
if (!irqfile) {
- warn(_("cannot open %s"), _PATH_PROC_INTERRUPTS);
+ warn(_("cannot open %s"), input_file);
goto free_stat;
}
/* read header firstly */
if (getline(&line, &len, irqfile) < 0) {
- warn(_("cannot read %s"), _PATH_PROC_INTERRUPTS);
+ warn(_("cannot read %s"), input_file);
goto close_file;
}
@@ -270,7 +268,7 @@ static struct irq_stat *get_irqinfo(int softirq, size_t setsize, cpu_set_t *cpus
stat->cpus = xcalloc(stat->nr_active_cpu, sizeof(struct irq_cpu));
- /* parse each line of _PATH_PROC_INTERRUPTS */
+ /* parse each line of input file */
while (getline(&line, &len, irqfile) >= 0) {
unsigned long count;
size_t index;
@@ -527,7 +525,8 @@ struct libscols_table *get_scols_cpus_table(struct irq_output *out,
return NULL;
}
-struct libscols_table *get_scols_table(struct irq_output *out,
+struct libscols_table *get_scols_table(const char *input_file,
+ struct irq_output *out,
struct irq_stat *prev,
struct irq_stat **xstat,
int softirq,
@@ -542,7 +541,7 @@ struct libscols_table *get_scols_table(struct irq_output *out,
size_t i;
/* the stats */
- stat = get_irqinfo(softirq, setsize, cpuset);
+ stat = get_irqinfo(input_file, softirq, setsize, cpuset);
if (!stat)
return NULL;
diff --git a/sys-utils/irq-common.h b/sys-utils/irq-common.h
index 02b72d752..b9cf72d2a 100644
--- a/sys-utils/irq-common.h
+++ b/sys-utils/irq-common.h
@@ -73,7 +73,8 @@ void irq_print_columns(FILE *f, int nodelta);
void set_sort_func_by_name(struct irq_output *out, const char *name);
void set_sort_func_by_key(struct irq_output *out, const char c);
-struct libscols_table *get_scols_table(struct irq_output *out,
+struct libscols_table *get_scols_table(const char *input_file,
+ struct irq_output *out,
struct irq_stat *prev,
struct irq_stat **xstat,
int softirq,
diff --git a/sys-utils/irqtop.c b/sys-utils/irqtop.c
index 48b65201f..6d001cb10 100644
--- a/sys-utils/irqtop.c
+++ b/sys-utils/irqtop.c
@@ -130,10 +130,18 @@ static int update_screen(struct irqtop_ctl *ctl, struct irq_output *out)
struct irq_stat *stat;
time_t now = time(NULL);
char timestr[64], *data, *data0, *p;
+ char *input_file;
/* make irqs table */
- table = get_scols_table(out, ctl->prev_stat, &stat, ctl->softirq,
- ctl->threshold, ctl->setsize, ctl->cpuset);
+ if (ctl->softirq)
+ input_file = xstrdup(_PATH_PROC_SOFTIRQS);
+ else
+ input_file = xstrdup(_PATH_PROC_INTERRUPTS);
+
+ table = get_scols_table(input_file, out, ctl->prev_stat, &stat,
+ ctl->softirq, ctl->threshold, ctl->setsize,
+ ctl->cpuset);
+ free(input_file);
if (!table) {
ctl->request_exit = 1;
return 1;
diff --git a/sys-utils/lsirq.1.adoc b/sys-utils/lsirq.1.adoc
index 02aea16b3..dd265710c 100644
--- a/sys-utils/lsirq.1.adoc
+++ b/sys-utils/lsirq.1.adoc
@@ -25,6 +25,9 @@ The default output is subject to change. So whenever possible, you should avoid
*-n*, *--noheadings*::
Don't print headings.
+*-i*, *--input* _file_::
+Read data from _file_ (Which was created by other tools, e.g. sosreport).
+
*-o*, *--output* _list_::
Specify which output columns to print. Use *--help* to get a list of all supported columns. The default list of columns may be extended if list is specified in the format _+list_.
diff --git a/sys-utils/lsirq.c b/sys-utils/lsirq.c
index e31addaf5..fa2dcaaf3 100644
--- a/sys-utils/lsirq.c
+++ b/sys-utils/lsirq.c
@@ -29,16 +29,17 @@
#include "optutils.h"
#include "strutils.h"
#include "xalloc.h"
+#include "pathnames.h"
#include "irq-common.h"
-static int print_irq_data(struct irq_output *out,
+static int print_irq_data(const char *input_file, struct irq_output *out,
int softirq, unsigned long threshold,
size_t setsize, cpu_set_t *cpuset)
{
struct libscols_table *table;
- table = get_scols_table(out, NULL, NULL, softirq, threshold, setsize, cpuset);
+ table = get_scols_table(input_file, out, NULL, NULL, softirq, threshold, setsize, cpuset);
if (!table)
return -1;
@@ -58,6 +59,7 @@ static void __attribute__((__noreturn__)) usage(void)
fputs(USAGE_OPTIONS, stdout);
fputs(_(" -J, --json use JSON output format\n"), stdout);
fputs(_(" -P, --pairs use key=\"value\" output format\n"), stdout);
+ fputs(_(" -i, --input read data from input file\n"), stdout);
fputs(_(" -n, --noheadings don't print headings\n"), stdout);
fputs(_(" -o, --output <list> define which output columns to use\n"), stdout);
fputs(_(" -s, --sort <column> specify sort column\n"), stdout);
@@ -82,6 +84,7 @@ int main(int argc, char **argv)
static const struct option longopts[] = {
{"sort", required_argument, NULL, 's'},
{"noheadings", no_argument, NULL, 'n'},
+ {"input", required_argument, NULL, 'i'},
{"output", required_argument, NULL, 'o'},
{"threshold", required_argument, NULL, 't'},
{"cpu-list", required_argument, NULL, 'C'},
@@ -103,10 +106,11 @@ int main(int argc, char **argv)
cpu_set_t *cpuset = NULL;
size_t setsize = 0;
int softirq = 0;
+ char *input_file = NULL;
setlocale(LC_ALL, "");
- while ((c = getopt_long(argc, argv, "no:s:t:C:ShJPV", longopts, NULL)) != -1) {
+ while ((c = getopt_long(argc, argv, "i:no:s:t:C:ShJPV", longopts, NULL)) != -1) {
err_exclusive_options(c, longopts, excl, excl_st);
switch (c) {
@@ -116,6 +120,9 @@ int main(int argc, char **argv)
case 'P':
out.pairs = 1;
break;
+ case 'i':
+ input_file = xstrdup(optarg);
+ break;
case 'n':
out.no_headings = 1;
break;
@@ -157,6 +164,13 @@ int main(int argc, char **argv)
}
}
+ if (input_file == NULL) {
+ if (softirq == 1)
+ input_file = xstrdup(_PATH_PROC_SOFTIRQS);
+ else
+ input_file = xstrdup(_PATH_PROC_INTERRUPTS);
+ }
+
/* default */
if (!out.ncolumns) {
out.columns[out.ncolumns++] = COL_IRQ;
@@ -171,8 +185,10 @@ int main(int argc, char **argv)
irq_column_name_to_id) < 0)
exit(EXIT_FAILURE);
- if (print_irq_data(&out, softirq, threshold, setsize, cpuset) < 0)
+ if (print_irq_data(input_file, &out, softirq, threshold, setsize, cpuset) < 0)
return EXIT_FAILURE;
+ free(input_file);
+
return EXIT_SUCCESS;
}
--
2.43.5
^ permalink raw reply related [flat|nested] 13+ messages in thread* Re: [PATCH V2 0/4] irqtop,lsirq: Miscellaneous enhancements
2025-02-28 16:13 [PATCH V2 0/4] irqtop,lsirq: Miscellaneous enhancements Joe Jin
` (3 preceding siblings ...)
2025-02-28 16:13 ` [PATCH V2 4/4] lsirq: add support for reading data from given file Joe Jin
@ 2025-03-03 10:16 ` Karel Zak
2025-03-04 1:38 ` Joe Jin
2025-03-04 10:58 ` Karel Zak
5 siblings, 1 reply; 13+ messages in thread
From: Karel Zak @ 2025-03-03 10:16 UTC (permalink / raw)
To: Joe Jin; +Cc: Zhenwei Pi, Sami Kerola, util-linux
On Fri, Feb 28, 2025 at 08:13:30AM GMT, Joe Jin wrote:
> This patchset add below new options for irqtop:
> '-b|--batch' : Batch mode
> '-n|--iter' : Specifies the maximum number of iterations
> '-J|--json' : Json ouput format
>
> Add below for lsirq:
> '-i|--input' : Read data from file
>
> v2:
> - Removed macro irqtop_batch_mode.
> - Replaced macro irqtop_printf() to inline function
> - Changed option '--number' to '--iter'
> - Replace strdup() to xstrdup()
> - Added json output format for irqtop.
> - Remove irqtop input file support.
>
> Joe Jin (4):
> irqtop: add batch mode support
> irqtop: add max iteration support
> irqtop: support json output format
> lsirq: add support for reading data from given file
>
> bash-completion/irqtop | 12 +++-
> bash-completion/lsirq | 4 ++
> sys-utils/irq-common.c | 19 +++---
> sys-utils/irq-common.h | 3 +-
> sys-utils/irqtop.1.adoc | 9 +++
> sys-utils/irqtop.c | 124 +++++++++++++++++++++++++++++++---------
> sys-utils/lsirq.1.adoc | 3 +
> sys-utils/lsirq.c | 24 ++++++--
> 8 files changed, 155 insertions(+), 43 deletions(-)
Thanks for the update. I have created a PR
(https://github.com/util-linux/util-linux/pull/3435) to test it with
CI tests.
Karel
--
Karel Zak <kzak@redhat.com>
http://karelzak.blogspot.com
^ permalink raw reply [flat|nested] 13+ messages in thread* Re: [PATCH V2 0/4] irqtop,lsirq: Miscellaneous enhancements
2025-03-03 10:16 ` [PATCH V2 0/4] irqtop,lsirq: Miscellaneous enhancements Karel Zak
@ 2025-03-04 1:38 ` Joe Jin
2025-03-04 3:50 ` zhenwei pi
0 siblings, 1 reply; 13+ messages in thread
From: Joe Jin @ 2025-03-04 1:38 UTC (permalink / raw)
To: Karel Zak; +Cc: Zhenwei Pi, Sami Kerola, util-linux
On 3/3/25 02:16, Karel Zak wrote:
> On Fri, Feb 28, 2025 at 08:13:30AM GMT, Joe Jin wrote:
>> This patchset add below new options for irqtop:
>> '-b|--batch' : Batch mode
>> '-n|--iter' : Specifies the maximum number of iterations
>> '-J|--json' : Json ouput format
>>
>> Add below for lsirq:
>> '-i|--input' : Read data from file
>>
>> v2:
>> - Removed macro irqtop_batch_mode.
>> - Replaced macro irqtop_printf() to inline function
>> - Changed option '--number' to '--iter'
>> - Replace strdup() to xstrdup()
>> - Added json output format for irqtop.
>> - Remove irqtop input file support.
>>
>> Joe Jin (4):
>> irqtop: add batch mode support
>> irqtop: add max iteration support
>> irqtop: support json output format
>> lsirq: add support for reading data from given file
>>
>> bash-completion/irqtop | 12 +++-
>> bash-completion/lsirq | 4 ++
>> sys-utils/irq-common.c | 19 +++---
>> sys-utils/irq-common.h | 3 +-
>> sys-utils/irqtop.1.adoc | 9 +++
>> sys-utils/irqtop.c | 124 +++++++++++++++++++++++++++++++---------
>> sys-utils/lsirq.1.adoc | 3 +
>> sys-utils/lsirq.c | 24 ++++++--
>> 8 files changed, 155 insertions(+), 43 deletions(-)
> Thanks for the update. I have created a PR
> (https://github.com/util-linux/util-linux/pull/3435) to test it with
> CI tests.
Thanks so much!
> Karel
>
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: Re: [PATCH V2 0/4] irqtop,lsirq: Miscellaneous enhancements
2025-03-04 1:38 ` Joe Jin
@ 2025-03-04 3:50 ` zhenwei pi
0 siblings, 0 replies; 13+ messages in thread
From: zhenwei pi @ 2025-03-04 3:50 UTC (permalink / raw)
To: Joe Jin, Karel Zak; +Cc: Sami Kerola, util-linux
This series looks good to me!
Reviewed-by: zhenwei pi <pizhenwei@bytedance.com>
On 3/4/25 09:38, Joe Jin wrote:
> On 3/3/25 02:16, Karel Zak wrote:
>> On Fri, Feb 28, 2025 at 08:13:30AM GMT, Joe Jin wrote:
>>> This patchset add below new options for irqtop:
>>> '-b|--batch' : Batch mode
>>> '-n|--iter' : Specifies the maximum number of iterations
>>> '-J|--json' : Json ouput format
>>>
>>> Add below for lsirq:
>>> '-i|--input' : Read data from file
>>>
>>> v2:
>>> - Removed macro irqtop_batch_mode.
>>> - Replaced macro irqtop_printf() to inline function
>>> - Changed option '--number' to '--iter'
>>> - Replace strdup() to xstrdup()
>>> - Added json output format for irqtop.
>>> - Remove irqtop input file support.
>>>
>>> Joe Jin (4):
>>> irqtop: add batch mode support
>>> irqtop: add max iteration support
>>> irqtop: support json output format
>>> lsirq: add support for reading data from given file
>>>
>>> bash-completion/irqtop | 12 +++-
>>> bash-completion/lsirq | 4 ++
>>> sys-utils/irq-common.c | 19 +++---
>>> sys-utils/irq-common.h | 3 +-
>>> sys-utils/irqtop.1.adoc | 9 +++
>>> sys-utils/irqtop.c | 124 +++++++++++++++++++++++++++++++---------
>>> sys-utils/lsirq.1.adoc | 3 +
>>> sys-utils/lsirq.c | 24 ++++++--
>>> 8 files changed, 155 insertions(+), 43 deletions(-)
>> Thanks for the update. I have created a PR
>> (https://github.com/util-linux/util-linux/pull/3435) to test it with
>> CI tests.
>
> Thanks so much!
>
>
>> Karel
>>
>
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH V2 0/4] irqtop,lsirq: Miscellaneous enhancements
2025-02-28 16:13 [PATCH V2 0/4] irqtop,lsirq: Miscellaneous enhancements Joe Jin
` (4 preceding siblings ...)
2025-03-03 10:16 ` [PATCH V2 0/4] irqtop,lsirq: Miscellaneous enhancements Karel Zak
@ 2025-03-04 10:58 ` Karel Zak
2025-03-05 2:23 ` Joe Jin
5 siblings, 1 reply; 13+ messages in thread
From: Karel Zak @ 2025-03-04 10:58 UTC (permalink / raw)
To: Joe Jin; +Cc: Zhenwei Pi, Sami Kerola, util-linux
On Fri, Feb 28, 2025 at 08:13:30AM GMT, Joe Jin wrote:
> v2:
> - Removed macro irqtop_batch_mode.
> - Replaced macro irqtop_printf() to inline function
> - Changed option '--number' to '--iter'
> - Replace strdup() to xstrdup()
> - Added json output format for irqtop.
> - Remove irqtop input file support.
>
> Joe Jin (4):
> irqtop: add batch mode support
> irqtop: add max iteration support
> irqtop: support json output format
> lsirq: add support for reading data from given file
>
> bash-completion/irqtop | 12 +++-
> bash-completion/lsirq | 4 ++
> sys-utils/irq-common.c | 19 +++---
> sys-utils/irq-common.h | 3 +-
> sys-utils/irqtop.1.adoc | 9 +++
> sys-utils/irqtop.c | 124 +++++++++++++++++++++++++++++++---------
> sys-utils/lsirq.1.adoc | 3 +
> sys-utils/lsirq.c | 24 ++++++--
> 8 files changed, 155 insertions(+), 43 deletions(-)
Applied, thanks.
Karel
--
Karel Zak <kzak@redhat.com>
http://karelzak.blogspot.com
^ permalink raw reply [flat|nested] 13+ messages in thread* Re: [PATCH V2 0/4] irqtop,lsirq: Miscellaneous enhancements
2025-03-04 10:58 ` Karel Zak
@ 2025-03-05 2:23 ` Joe Jin
0 siblings, 0 replies; 13+ messages in thread
From: Joe Jin @ 2025-03-05 2:23 UTC (permalink / raw)
To: Karel Zak; +Cc: Zhenwei Pi, Sami Kerola, util-linux
On 3/4/25 02:58, Karel Zak wrote:
> On Fri, Feb 28, 2025 at 08:13:30AM GMT, Joe Jin wrote:
>> v2:
>> - Removed macro irqtop_batch_mode.
>> - Replaced macro irqtop_printf() to inline function
>> - Changed option '--number' to '--iter'
>> - Replace strdup() to xstrdup()
>> - Added json output format for irqtop.
>> - Remove irqtop input file support.
>>
>> Joe Jin (4):
>> irqtop: add batch mode support
>> irqtop: add max iteration support
>> irqtop: support json output format
>> lsirq: add support for reading data from given file
>>
>> bash-completion/irqtop | 12 +++-
>> bash-completion/lsirq | 4 ++
>> sys-utils/irq-common.c | 19 +++---
>> sys-utils/irq-common.h | 3 +-
>> sys-utils/irqtop.1.adoc | 9 +++
>> sys-utils/irqtop.c | 124 +++++++++++++++++++++++++++++++---------
>> sys-utils/lsirq.1.adoc | 3 +
>> sys-utils/lsirq.c | 24 ++++++--
>> 8 files changed, 155 insertions(+), 43 deletions(-)
> Applied, thanks.
Thanks so much!
>
> Karel
>
^ permalink raw reply [flat|nested] 13+ messages in thread