• SeongJae Park's avatar
    mm/damon/core: account age of target regions · fda504fa
    SeongJae Park authored
    Patch series "Implement Data Access Monitoring-based Memory Operation Schemes".
    
    Introduction
    ============
    
    DAMON[1] can be used as a primitive for data access aware memory
    management optimizations.  For that, users who want such optimizations
    should run DAMON, read the monitoring results, analyze it, plan a new
    memory management scheme, and apply the new scheme by themselves.  Such
    efforts will be inevitable for some complicated optimizations.
    
    However, in many other cases, the users would simply want the system to
    apply a memory management action 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 keeping only rare accesses
    more than 2 minutes", or "Do not use THP for a memory region larger than
    2 MiB rarely accessed for more than 1 seconds".
    
    To make the works easier and non-redundant, this patchset implements a
    new feature of DAMON, which is called Data Access Monitoring-based
    Operation Schemes (DAMOS).  Using the feature, users can describe the
    normal schemes in a simple way and ask DAMON to execute those on its
    own.
    
    [1] https://damonitor.github.io
    
    Evaluations
    ===========
    
    DAMOS is accurate and useful for memory management optimizations.  An
    experimental DAMON-based operation scheme for THP, 'ethp', removes
    76.15% of THP memory overheads while preserving 51.25% of THP speedup.
    Another experimental DAMON-based 'proactive reclamation' implementation,
    'prcl', reduces 93.38% of residential sets and 23.63% of system memory
    footprint while incurring only 1.22% runtime overhead in the best case
    (parsec3/freqmine).
    
    NOTE that the experimental THP optimization and proactive reclamation
    are not for production but only for proof of concepts.
    
    Please refer to the showcase web site's evaluation document[1] for
    detailed evaluation setup and results.
    
    [1] https://damonitor.github.io/doc/html/v34/vm/damon/eval.html
    
    Long-term Support Trees
    -----------------------
    
    For people who want to test DAMON but using LTS kernels, there are
    another couple of trees based on two latest LTS kernels respectively and
    containing the 'damon/master' backports.
    
    - For v5.4.y: https://git.kernel.org/sj/h/damon/for-v5.4.y
    - For v5.10.y: https://git.kernel.org/sj/h/damon/for-v5.10.y
    
    Sequence Of Patches
    ===================
    
    The 1st patch accounts age of each region.  The 2nd patch implements the
    core of the DAMON-based operation schemes feature.  The 3rd patch makes
    the default monitoring primitives for virtual address spaces to support
    the schemes.  From this point, the kernel space users can use DAMOS.
    The 4th patch exports the feature to the user space via the debugfs
    interface.  The 5th patch implements schemes statistics feature for
    easier tuning of the schemes and runtime access pattern analysis, and
    the 6th patch adds selftests for these changes.  Finally, the 7th patch
    documents this new feature.
    
    This patch (of 7):
    
    DAMON can be used for data access pattern aware memory management
    optimizations.  For that, users should run DAMON, read the monitoring
    results, analyze it, plan a new memory management scheme, and apply the
    new scheme by themselves.  It would not be too hard, but still require
    some level of effort.  For complicated cases, this effort is inevitable.
    
    That said, in many cases, users would simply want to apply an actions 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".
    
    For such optimizations, users will need to first account the age of each
    region themselves.  To reduce such efforts, this implements a simple age
    account of each region in DAMON.  For each aggregation step, DAMON
    compares the access frequency with that from last aggregation and reset
    the age of the region if the change is significant.  Else, the age is
    incremented.  Also, in case of the merge of regions, the region
    size-weighted average of the ages is set as the age of merged new
    region.
    
    Link: https://lkml.kernel.org/r/20211001125604.29660-1-sj@kernel.org
    Link: https://lkml.kernel.org/r/20211001125604.29660-2-sj@kernel.orgSigned-off-by: default avatarSeongJae Park <sj@kernel.org>
    Cc: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    Cc: Amit Shah <amit@kernel.org>
    Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
    Cc: Jonathan Corbet <corbet@lwn.net>
    Cc: David Hildenbrand <david@redhat.com>
    Cc: David Woodhouse <dwmw@amazon.com>
    Cc: Marco Elver <elver@google.com>
    Cc: Leonard Foerster <foersleo@amazon.de>
    Cc: Greg Thelen <gthelen@google.com>
    Cc: Markus Boehme <markubo@amazon.de>
    Cc: David Rienjes <rientjes@google.com>
    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>
    fda504fa
core.c 17.1 KB