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
This commit is contained in:
Warner Losh 2022-05-06 11:31:18 -06:00
parent 6910fee62e
commit 45ae223ac6
2 changed files with 14 additions and 3 deletions

View file

@ -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.

View file

@ -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;