aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorColin Percival <cperciva@FreeBSD.org>2021-09-25 03:20:33 +0000
committerColin Percival <cperciva@FreeBSD.org>2021-09-25 03:23:49 +0000
commit0a35c4b3cab563e3ab1bf5b7b49bf26e0bb7cb04 (patch)
treea845c10773441d5d67857f74215b2d1501ddbf0f
parent242923eb848a94d657344c2ff45c4f15433cdf3c (diff)
downloadsrc-0a35c4b3cab563e3ab1bf5b7b49bf26e0bb7cb04.tar.gz
src-0a35c4b3cab563e3ab1bf5b7b49bf26e0bb7cb04.zip
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
-rw-r--r--stand/libsa/printf.c5
1 files changed, 4 insertions, 1 deletions
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;