mirror of
https://github.com/rd-stuffs/msm-4.14.git
synced 2025-02-20 11:45:48 +08:00
procfs: optimize seq_pad() to speed up /proc/pid/maps
seq_printf() is slow and it can be replaced by memset() in this case. == test.py num = 0 with open("/proc/1/maps") as f: while num < 10000 : data = f.read() f.seek(0, 0) num = num + 1 == == Before patch == $ time python test.py real 0m0.986s user 0m0.279s sys 0m0.707s == After patch == $ time python test.py real 0m0.932s user 0m0.261s sys 0m0.669s $ perf record -g python test.py == Before patch == - 47.35% 3.38% python [kernel.kallsyms] [k] show_map_vma.isra.23 - 43.97% show_map_vma.isra.23 + 20.84% seq_path - 15.73% show_vma_header_prefix + 6.96% seq_pad + 2.94% __GI___libc_read == After patch == - 44.01% 0.34% python [kernel.kallsyms] [k] show_pid_map - 43.67% show_pid_map - 42.91% show_map_vma.isra.23 + 21.55% seq_path - 15.68% show_vma_header_prefix + 2.08% seq_pad 0.55% seq_putc Link: http://lkml.kernel.org/r/20180112185812.7710-2-avagin@openvz.org Signed-off-by: Andrei Vagin <avagin@openvz.org> Cc: Alexey Dobriyan <adobriyan@gmail.com> Cc: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> Signed-off-by: Panchajanya1999 <rsk52959@gmail.com> Signed-off-by: Panchajanya1999 <panchajanya@azure-dev.live> (cherry picked from commit e29c242fe3af7ff38fe3a116cfcaddb6d81af2bf) Signed-off-by: Adithya R <gh0strider.2k18.reborn@gmail.com> Signed-off-by: Salllz <sal235222727@gmail.com> Signed-off-by: alanndz <alanndz7@gmail.com> Signed-off-by: azrim <mirzaspc@gmail.com>
This commit is contained in:
parent
349bee1b05
commit
14acda4264
@ -831,8 +831,14 @@ EXPORT_SYMBOL(seq_write);
|
||||
void seq_pad(struct seq_file *m, char c)
|
||||
{
|
||||
int size = m->pad_until - m->count;
|
||||
if (size > 0)
|
||||
seq_printf(m, "%*s", size, "");
|
||||
if (size > 0) {
|
||||
if (size + m->count > m->size) {
|
||||
seq_set_overflow(m);
|
||||
return;
|
||||
}
|
||||
memset(m->buf + m->count, ' ', size);
|
||||
m->count += size;
|
||||
}
|
||||
if (c)
|
||||
seq_putc(m, c);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user