Skip to content
  • Andrei Vagin's avatar
    procfs: optimize seq_pad() to speed up /proc/pid/maps · 8cfa67b4
    Andrei Vagin authored
    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: default avatarAndrei Vagin <avagin@openvz.org>
    Cc: Alexey Dobriyan <adobriyan@gmail.com>
    Cc: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    8cfa67b4