git: 0a35c4b3cab5 - main - loader printf: Profile with TSLOG

Colin Percival cperciva at FreeBSD.org
Sat Sep 25 03:23:57 UTC 2021


The branch main has been updated by cperciva:

URL: https://cgit.FreeBSD.org/src/commit/?id=0a35c4b3cab563e3ab1bf5b7b49bf26e0bb7cb04

commit 0a35c4b3cab563e3ab1bf5b7b49bf26e0bb7cb04
Author:     Colin Percival <cperciva at FreeBSD.org>
AuthorDate: 2021-09-25 03:20:33 +0000
Commit:     Colin Percival <cperciva at FreeBSD.org>
CommitDate: 2021-09-25 03:23:49 +0000

    loader printf: Profile with TSLOG
    
    Now that the loader tslog code doesn't call printf, we can profile
    printf using TSLOG.  On an EC2 c5.xlarge instance, we spend roughly
    45 ms here (out of roughly 500 ms), presumably due to the time spent
    writing output to the console.
    
    MFC after:      1 week
    Sponsored by:   https://www.patreon.com/cperciva
---
 stand/libsa/printf.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/stand/libsa/printf.c b/stand/libsa/printf.c
index 1602a2dc519d..4de547b644dd 100644
--- a/stand/libsa/printf.c
+++ b/stand/libsa/printf.c
@@ -271,6 +271,7 @@ kvprintf(char const *fmt, kvprintf_fn_t *func, void *arg, int radix, va_list ap)
 	char padc;
 	int stop = 0, retval = 0;
 
+	TSENTER();
 	num = 0;
 	if (!func)
 		d = (char *) arg;
@@ -287,8 +288,10 @@ kvprintf(char const *fmt, kvprintf_fn_t *func, void *arg, int radix, va_list ap)
 		padc = ' ';
 		width = 0;
 		while ((ch = (u_char)*fmt++) != '%' || stop) {
-			if (ch == '\0')
+			if (ch == '\0') {
+				TSEXIT();
 				return (retval);
+			}
 			PCHAR(ch);
 		}
 		percent = fmt - 1;


More information about the dev-commits-src-all mailing list