Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 4 Oct 2009 20:16:21 +0100
From:      Andrew Brampton <brampton+freebsd-hackers@gmail.com>
To:        freebsd-hackers@freebsd.org
Subject:   Make top display thread IDs
Message-ID:  <d41814900910041216m183a364bk6dc62d6c475a73a7@mail.gmail.com>

index | next in thread | raw e-mail

[-- Attachment #1 --]
Hello,

I was using "top -H" to display all the different threads on my
system. I then wanted to use cpuset to pin a thread to a particular
core, however, I couldn't find the thread ID. So I've hacked top to
display thread IDs. Hopefully this patch is useful to something, and
perhaps it should be included with FreeBSD.

I'd be grateful for any feedback or suggestions.

thanks
Andrew

[-- Attachment #2 --]
Index: usr.bin/top/machine.c
===================================================================
--- usr.bin/top/machine.c	(revision 197611)
+++ usr.bin/top/machine.c	(working copy)
@@ -108,18 +108,18 @@
 static char smp_header_thr[] =
     "  PID%s %-*.*s  THR PRI NICE   SIZE    RES STATE   C   TIME %6s COMMAND";
 static char smp_header[] =
-    "  PID%s %-*.*s "   "PRI NICE   SIZE    RES STATE   C   TIME %6s COMMAND";
+    "  PID    TID%s %-*.*s PRI NICE   SIZE    RES STATE   C   TIME %6s COMMAND";
 
 #define smp_Proc_format \
-    "%5d%s %-*.*s %s%3d %4s%7s %6s %-6.6s %2d%7s %5.2f%% %.*s"
+    "%5d%s%s %-*.*s %s%3d %4s%7s %6s %-6.6s %2d%7s %5.2f%% %.*s"
 
 static char up_header_thr[] =
     "  PID%s %-*.*s  THR PRI NICE   SIZE    RES STATE    TIME %6s COMMAND";
 static char up_header[] =
-    "  PID%s %-*.*s "   "PRI NICE   SIZE    RES STATE    TIME %6s COMMAND";
+    "  PID    TID%s %-*.*s PRI NICE   SIZE    RES STATE    TIME %6s COMMAND";
 
 #define up_Proc_format \
-    "%5d%s %-*.*s %s%3d %4s%7s %6s %-6.6s%.0d%7s %5.2f%% %.*s"
+    "%5d%s%s %-*.*s %s%3d %4s%7s %6s %-6.6s%.0d%7s %5.2f%% %.*s"
 
 
 /* process state names for the "STATE" column of the display */
@@ -757,7 +757,7 @@
 	int state;
 	struct rusage ru, *rup;
 	long p_tot, s_tot;
-	char *proc_fmt, thr_buf[6], jid_buf[6];
+	char *proc_fmt, tid_buf[8], thr_buf[6], jid_buf[6];
 	char *cmdbuf = NULL;
 	char **args;
 
@@ -942,14 +942,19 @@
 
 	/* format this entry */
 	proc_fmt = smpmode ? smp_Proc_format : up_Proc_format;
-	if (ps.thread != 0)
+	if (ps.thread) {
 		thr_buf[0] = '\0';
-	else
+		snprintf(tid_buf, sizeof(tid_buf), "%*d",
+		    sizeof(tid_buf) - 1, pp->ki_tid);
+	} else {
+		tid_buf[0] = '\0';
 		snprintf(thr_buf, sizeof(thr_buf), "%*d ",
 		    sizeof(thr_buf) - 2, pp->ki_numthreads);
+	}
 
 	sprintf(fmt, proc_fmt,
 	    pp->ki_pid,
+	    tid_buf,
 	    jid_buf,
 	    namelength, namelength, (*get_userid)(pp->ki_ruid),
 	    thr_buf,
help

Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?d41814900910041216m183a364bk6dc62d6c475a73a7>