Module Name: src
Committed By: jdolecek
Date: Sat Oct 15 12:06:27 UTC 2016
Modified Files:
src/usr.sbin/intrctl: intrctl.8 intrctl.c
Log Message:
add -c option to list command for compact list, it displays totals rather then
per-CPU stats
To generate a diff of this commit:
cvs rdiff -u -r1.3 -r1.4 src/usr.sbin/intrctl/intrctl.8 \
src/usr.sbin/intrctl/intrctl.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/usr.sbin/intrctl/intrctl.8
diff -u src/usr.sbin/intrctl/intrctl.8:1.3 src/usr.sbin/intrctl/intrctl.8:1.4
--- src/usr.sbin/intrctl/intrctl.8:1.3 Wed Oct 12 21:47:37 2016
+++ src/usr.sbin/intrctl/intrctl.8 Sat Oct 15 12:06:27 2016
@@ -1,4 +1,4 @@
-.\" $NetBSD: intrctl.8,v 1.3 2016/10/12 21:47:37 jdolecek Exp $
+.\" $NetBSD: intrctl.8,v 1.4 2016/10/15 12:06:27 jdolecek Exp $
.\"
.\" Copyright (c) 2015 Internet Initiative Japan Inc.
.\" All rights reserved.
@@ -24,7 +24,7 @@
.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
.\" POSSIBILITY OF SUCH DAMAGE.
.\"
-.Dd October 12, 2016
+.Dd October 15, 2016
.Dt INTRCTL 8
.Os
.Sh NAME
@@ -56,9 +56,14 @@ enable to set an interrupt's affinity to
If
.Ar cpu_index
is already enabled, this command has no effect.
-.It list
+.It list Op Fl c
for each intrid in the system, display interrupt counts per CPU.
The intrid is an interrupt name such as "ioapic0 pin 22" for x86.
+.Pp
+If
+.Fl c
+is specified, display compact list with total counts per interrupt,
+and CPU affinity as comma separated list of CPU indexes.
.It nointr Fl c Ar cpu_index
disable to set an interrupt's affinity to
.Ar cpu_index .
Index: src/usr.sbin/intrctl/intrctl.c
diff -u src/usr.sbin/intrctl/intrctl.c:1.3 src/usr.sbin/intrctl/intrctl.c:1.4
--- src/usr.sbin/intrctl/intrctl.c:1.3 Mon Sep 19 18:46:39 2016
+++ src/usr.sbin/intrctl/intrctl.c Sat Oct 15 12:06:27 2016
@@ -1,4 +1,4 @@
-/* $NetBSD: intrctl.c,v 1.3 2016/09/19 18:46:39 ryo Exp $ */
+/* $NetBSD: intrctl.c,v 1.4 2016/10/15 12:06:27 jdolecek Exp $ */
/*
* Copyright (c) 2015 Internet Initiative Japan Inc.
@@ -27,7 +27,7 @@
*/
#include <sys/cdefs.h>
-__RCSID("$NetBSD: intrctl.c,v 1.3 2016/09/19 18:46:39 ryo Exp $");
+__RCSID("$NetBSD: intrctl.c,v 1.4 2016/10/15 12:06:27 jdolecek Exp $");
#include <sys/param.h>
#include <sys/sysctl.h>
@@ -99,7 +99,7 @@ usage(void)
{
const char *progname = getprogname();
- fprintf(stderr, "usage: %s list\n", progname);
+ fprintf(stderr, "usage: %s list [-c]\n", progname);
fprintf(stderr, " %s affinity -i interrupt_name -c cpu_index\n", progname);
fprintf(stderr, " %s intr -c cpu_index\n", progname);
fprintf(stderr, " %s nointr -c cpu_index\n", progname);
@@ -117,6 +117,18 @@ intrctl_list(int argc, char **argv)
int i, ncpus, *cpucol;
void *handle;
size_t intridlen;
+ int compact = 0;
+ char ch;
+
+ while ((ch = getopt(argc, argv, "c")) != -1) {
+ switch (ch) {
+ case 'c':
+ compact = 1;
+ break;
+ default:
+ usage();
+ }
+ }
handle = intrctl_io_alloc(intrctl_io_alloc_retry_count);
if (handle == NULL)
@@ -152,21 +164,49 @@ intrctl_list(int argc, char **argv)
}
/* header */
- printf("%-*s ", (int)intridlen, "interrupt id");
- for (i = 0; i < ncpus; i++) {
- snprintf(buf, sizeof(buf), "CPU%u", i);
- printf("%*s ", cpucol[i], buf);
+ printf("%-*s", (int)intridlen, "interrupt id");
+ if (compact) {
+ printf(" %20s ", "total");
+ printf(" %20s ", "affinity");
+ } else {
+ for (i = 0; i < ncpus; i++) {
+ snprintf(buf, sizeof(buf), "CPU%u", i);
+ printf("%*s ", cpucol[i], buf);
+ }
}
printf("device name(s)\n");
/* body */
for (illine = intrctl_io_firstline(handle); illine != NULL;
illine = intrctl_io_nextline(handle, illine)) {
- printf("%-*s ", (int)intridlen, illine->ill_intrid);
- for (i = 0; i < ncpus; i++) {
- struct intrio_list_line_cpu *illc = &illine->ill_cpu[i];
- printf("%*" PRIu64 "%c ", cpucol[i], illc->illc_count,
- illc->illc_assigned ? '*' : ' ');
+ struct intrio_list_line_cpu *illc;
+
+ printf("%-*s ", (int)intridlen, illine->ill_intrid);
+ if (compact) {
+ uint64_t total = 0;
+ char *affinity, *oaffinity = NULL;
+ for (i = 0; i < ncpus; i++) {
+ illc = &illine->ill_cpu[i];
+ total += illc->illc_count;
+ if (illc->illc_assigned) {
+ asprintf(&affinity, "%s%s%d",
+ oaffinity ? oaffinity : "",
+ oaffinity ? ", " : "",
+ i);
+ if (oaffinity)
+ free(oaffinity);
+ oaffinity = affinity;
+ }
+ }
+ printf("%20" PRIu64 " ", total);
+ printf("%20s ", affinity ? affinity : "none");
+ free(affinity);
+ } else {
+ for (i = 0; i < ncpus; i++) {
+ illc = &illine->ill_cpu[i];
+ printf("%*" PRIu64 "%c ", cpucol[i], illc->illc_count,
+ illc->illc_assigned ? '*' : ' ');
+ }
}
printf("%s\n", illine->ill_xname);
}