• Suren Baghdasaryan's avatar
    mm: add anonymous vma name refcounting · 78db3412
    Suren Baghdasaryan authored
    While forking a process with high number (64K) of named anonymous vmas
    the overhead caused by strdup() is noticeable.  Experiments with ARM64
    Android device show up to 40% performance regression when forking a
    process with 64k unpopulated anonymous vmas using the max name lengths
    vs the same process with the same number of anonymous vmas having no
    name.
    
    Introduce anon_vma_name refcounted structure to avoid the overhead of
    copying vma names during fork() and when splitting named anonymous vmas.
    
    When a vma is duplicated, instead of copying the name we increment the
    refcount of this structure.  Multiple vmas can point to the same
    anon_vma_name as long as they increment the refcount.  The name member
    of anon_vma_name structure is assigned at structure allocation time and
    is never changed.  If vma name changes then the refcount of the original
    structure is dropped, a new anon_vma_name structure is allocated to hold
    the new name and the vma pointer is updated to point to the new
    structure.
    
    With this approach the fork() performance regressions is reduced 3-4x
    times and with usecases using more reasonable number of VMAs (a few
    thousand) the regressions is not measurable.
    
    Link: https://lkml.kernel.org/r/20211019215511.3771969-3-surenb@google.comSigned-off-by: default avatarSuren Baghdasaryan <surenb@google.com>
    Reviewed-by: default avatarKees Cook <keescook@chromium.org>
    Cc: Al Viro <viro@zeniv.linux.org.uk>
    Cc: Colin Cross <ccross@google.com>
    Cc: Cyrill Gorcunov <gorcunov@openvz.org>
    Cc: Dave Hansen <dave.hansen@intel.com>
    Cc: David Rientjes <rientjes@google.com>
    Cc: "Eric W. Biederman" <ebiederm@xmission.com>
    Cc: Hugh Dickins <hughd@google.com>
    Cc: Ingo Molnar <mingo@kernel.org>
    Cc: Jan Glauber <jan.glauber@gmail.com>
    Cc: Johannes Weiner <hannes@cmpxchg.org>
    Cc: John Stultz <john.stultz@linaro.org>
    Cc: Mel Gorman <mgorman@suse.de>
    Cc: Minchan Kim <minchan@kernel.org>
    Cc: Oleg Nesterov <oleg@redhat.com>
    Cc: Pekka Enberg <penberg@kernel.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Rob Landley <rob@landley.net>
    Cc: "Serge E. Hallyn" <serge.hallyn@ubuntu.com>
    Cc: Shaohua Li <shli@fusionio.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    78db3412
madvise.c 36.4 KB