fs/proc/array.c: slightly improve render_sigset_t
format_decode and vsnprintf occasionally show up in perf top, so I went looking for places that might not need the full printf power. With the help of kprobes, I gathered some statistics on which format strings we mostly pass to vsnprintf. On a trivial desktop workload, I hit "%x" 25% of the time, so something apparently reads /proc/pid/status (which does 5*16 printf("%x") calls) a lot. With this patch, reading /proc/pid/status is 30% faster according to this microbenchmark: char buf[4096]; int i, fd; for (i = 0; i < 10000; ++i) { fd = open("/proc/self/status", O_RDONLY); read(fd, buf, sizeof(buf)); close(fd); } Link: http://lkml.kernel.org/r/1474410485-1305-1-git-send-email-linux@rasmusvillemoes.dk Signed-off-by: Rasmus Villemoes <linux@rasmusvillemoes.dk> Acked-by: Andrei Vagin <avagin@openvz.org> Acked-by: Kees Cook <keescook@chromium.org> Cc: Alexey Dobriyan <adobriyan@gmail.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
492b2da605
commit
209b14dc03
1 changed files with 1 additions and 1 deletions
|
@ -245,7 +245,7 @@ void render_sigset_t(struct seq_file *m, const char *header,
|
||||||
if (sigismember(set, i+2)) x |= 2;
|
if (sigismember(set, i+2)) x |= 2;
|
||||||
if (sigismember(set, i+3)) x |= 4;
|
if (sigismember(set, i+3)) x |= 4;
|
||||||
if (sigismember(set, i+4)) x |= 8;
|
if (sigismember(set, i+4)) x |= 8;
|
||||||
seq_printf(m, "%x", x);
|
seq_putc(m, hex_asc[x]);
|
||||||
} while (i >= 4);
|
} while (i >= 4);
|
||||||
|
|
||||||
seq_putc(m, '\n');
|
seq_putc(m, '\n');
|
||||||
|
|
Loading…
Reference in a new issue