git: 45ae223ac654 - main - msgbuf: Allow microsecond granularity timestamps

From: Warner Losh <imp_at_FreeBSD.org>
Date: Sat, 07 May 2022 15:34:37 UTC
The branch main has been updated by imp:

URL: https://cgit.FreeBSD.org/src/commit/?id=45ae223ac654c0ab6cdc4eaacca693244802383e

commit 45ae223ac654c0ab6cdc4eaacca693244802383e
Author:     Warner Losh <imp@FreeBSD.org>
AuthorDate: 2022-05-06 17:31:18 +0000
Commit:     Warner Losh <imp@FreeBSD.org>
CommitDate: 2022-05-07 15:32:22 +0000

    msgbuf: Allow microsecond granularity timestamps
    
    Today, kern.msgbuf_show_timestamp=1 will give 1 second granularity
    timestamps on dmesg lines. When kern.msgbuf_show_timestamp=2, we'll
    produce microsecond level graunlarity.
    For example:
    old (== 1):
    [13] Dual Console: Video Primary, Serial Secondary
    [14] lo0: link state changed to UP
    [15] bxe0: NIC Link is Up, 10000 Mbps full duplex, Flow control: ON - receive & transmit
    [15] bxe0: link state changed to UP
    new (== 2):
    [13.807015] Dual Console: Video Primary, Serial Secondary
    [14.544150] lo0: link state changed to UP
    [15.272044] bxe0: NIC Link is Up, 10000 Mbps full duplex, Flow control: ON - receive & transmit
    [15.272052] bxe0: link state changed to UP
    
    Sponsored by:           Netflix
---
 sbin/dmesg/dmesg.8     |  5 ++++-
 sys/kern/subr_msgbuf.c | 12 ++++++++++--
 2 files changed, 14 insertions(+), 3 deletions(-)

diff --git a/sbin/dmesg/dmesg.8 b/sbin/dmesg/dmesg.8
index 13101baf7e78..a924549264cd 100644
--- a/sbin/dmesg/dmesg.8
+++ b/sbin/dmesg/dmesg.8
@@ -78,7 +78,10 @@ the message buffer:
 The default value is shown next to each variable.
 .Bl -tag -width indent
 .It  kern.msgbuf_show_timestamp : No 0
-If set to 1, then a timestamp will be added to most lines in the message buffer.
+If set to 0, no timetamps are added.
+If set to 1, then a 1-second granularity timestamp will be added to most lines
+in the message buffer.
+If set to 2, then a microsecond granularity timestamp will be added.
 This may also be set as a boot
 .Xr loader 8
 tunable.
diff --git a/sys/kern/subr_msgbuf.c b/sys/kern/subr_msgbuf.c
index b41e78dd886e..4664e742c5fb 100644
--- a/sys/kern/subr_msgbuf.c
+++ b/sys/kern/subr_msgbuf.c
@@ -234,8 +234,16 @@ msgbuf_addstr(struct msgbuf *mbp, int pri, const char *str, int filter_cr)
 
 		if (msgbuf_show_timestamp && needtime == 1 &&
 		    (mbp->msg_flags & MSGBUF_NEEDNL) == 0) {
-			snprintf(buf, sizeof(buf), "[%jd] ",
-			    (intmax_t)time_uptime);
+			if (msgbuf_show_timestamp == 1) {
+				snprintf(buf, sizeof(buf), "[%jd] ",
+				    (intmax_t)time_uptime);
+			} else {
+				struct timeval tv;
+
+				microuptime(&tv);
+				snprintf(buf, sizeof(buf), "[%jd.%06d] ",
+				    (intmax_t)tv.tv_sec, (int)tv.tv_usec);
+			}
 			for (j = 0; buf[j] != '\0'; j++)
 				msgbuf_do_addchar(mbp, buf[j]);
 			needtime = 0;