• SeongJae Park's avatar
    mm/damon/core: implement DAMON-based Operation Schemes (DAMOS) · 1f366e42
    SeongJae Park authored
    In many cases, users might use DAMON for simple data access aware memory
    management optimizations such as applying an operation scheme to a
    memory region of a specific size having a specific access frequency for
    a specific time.  For example, "page out a memory region larger than 100
    MiB but having a low access frequency more than 10 minutes", or "Use THP
    for a memory region larger than 2 MiB having a high access frequency for
    more than 2 seconds".
    
    Most simple form of the solution would be doing offline data access
    pattern profiling using DAMON and modifying the application source code
    or system configuration based on the profiling results.  Or, developing
    a daemon constructed with two modules (one for access monitoring and the
    other for applying memory management actions via mlock(), madvise(),
    sysctl, etc) is imaginable.
    
    To avoid users spending their time for implementation of such simple
    data access monitoring-based operation schemes, this makes DAMON to
    handle such schemes directly.  With this change, users can simply
    specify their desired schemes to DAMON.  Then, DAMON will automatically
    apply the schemes to the user-specified target processes.
    
    Each of the schemes is composed with conditions for filtering of the
    target memory regions and desired memory management action for the
    target.  Specifically, the format is::
    
        <min/max size> <min/max access frequency> <min/max age> <action>
    
    The filtering conditions are size of memory region, number of accesses
    to the region monitored by DAMON, and the age of the region.  The age of
    region is incremented periodically but reset when its addresses or
    access frequency has significantly changed or the action of a scheme was
    applied.  For the action, current implementation supports a few of
    madvise()-like hints, ``WILLNEED``, ``COLD``, ``PAGEOUT``, ``HUGEPAGE``,
    and ``NOHUGEPAGE``.
    
    Because DAMON supports various address spaces and application of the
    actions to a monitoring target region is dependent to the type of the
    target address space, the application code should be implemented by each
    primitives and registered to the framework.  Note that this only
    implements the framework part.  Following commit will implement the
    action applications for virtual address spaces primitives.
    
    Link: https://lkml.kernel.org/r/20211001125604.29660-3-sj@kernel.orgSigned-off-by: default avatarSeongJae Park <sj@kernel.org>
    Cc: Amit Shah <amit@kernel.org>
    Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
    Cc: David Hildenbrand <david@redhat.com>
    Cc: David Rienjes <rientjes@google.com>
    Cc: David Woodhouse <dwmw@amazon.com>
    Cc: Greg Thelen <gthelen@google.com>
    Cc: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    Cc: Jonathan Corbet <corbet@lwn.net>
    Cc: Leonard Foerster <foersleo@amazon.de>
    Cc: Marco Elver <elver@google.com>
    Cc: Markus Boehme <markubo@amazon.de>
    Cc: Shakeel Butt <shakeelb@google.com>
    Cc: Shuah Khan <shuah@kernel.org>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    1f366e42
core.c 19.7 KB