• SeongJae Park's avatar
    mm/damon: implement a debugfs-based user space interface · 4bc05954
    SeongJae Park authored
    DAMON is designed to be used by kernel space code such as the memory
    management subsystems, and therefore it provides only kernel space API.
    That said, letting the user space control DAMON could provide some
    benefits to them.  For example, it will allow user space to analyze their
    specific workloads and make their own special optimizations.
    
    For such cases, this commit implements a simple DAMON application kernel
    module, namely 'damon-dbgfs', which merely wraps the DAMON api and exports
    those to the user space via the debugfs.
    
    'damon-dbgfs' exports three files, ``attrs``, ``target_ids``, and
    ``monitor_on`` under its debugfs directory, ``<debugfs>/damon/``.
    
    Attributes
    ----------
    
    Users can read and write the ``sampling interval``, ``aggregation
    interval``, ``regions update interval``, and min/max number of monitoring
    target regions by reading from and writing to the ``attrs`` file.  For
    example, below commands set those values to 5 ms, 100 ms, 1,000 ms, 10,
    1000 and check it again::
    
        # cd <debugfs>/damon
        # echo 5000 100000 1000000 10 1000 > attrs
        # cat attrs
        5000 100000 1000000 10 1000
    
    Target IDs
    ----------
    
    Some types of address spaces supports multiple monitoring target.  For
    example, the virtual memory address spaces monitoring can have multiple
    processes as the monitoring targets.  Users can set the targets by writing
    relevant id values of the targets to, and get the ids of the current
    targets by reading from the ``target_ids`` file.  In case of the virtual
    address spaces monitoring, the values should be pids of the monitoring
    target processes.  For example, below commands set processes having pids
    42 and 4242 as the monitoring targets and check it again::
    
        # cd <debugfs>/damon
        # echo 42 4242 > target_ids
        # cat target_ids
        42 4242
    
    Note that setting the target ids doesn't start the monitoring.
    
    Turning On/Off
    --------------
    
    Setting the files as described above doesn't incur effect unless you
    explicitly start the monitoring.  You can start, stop, and check the
    current status of the monitoring by writing to and reading from the
    ``monitor_on`` file.  Writing ``on`` to the file starts the monitoring of
    the targets with the attributes.  Writing ``off`` to the file stops those.
    DAMON also stops if every targets are invalidated (in case of the virtual
    memory monitoring, target processes are invalidated when terminated).
    Below example commands turn on, off, and check the status of DAMON::
    
        # cd <debugfs>/damon
        # echo on > monitor_on
        # echo off > monitor_on
        # cat monitor_on
        off
    
    Please note that you cannot write to the above-mentioned debugfs files
    while the monitoring is turned on.  If you write to the files while DAMON
    is running, an error code such as ``-EBUSY`` will be returned.
    
    [akpm@linux-foundation.org: remove unneeded "alloc failed" printks]
    [akpm@linux-foundation.org: replace macro with static inline]
    
    Link: https://lkml.kernel.org/r/20210716081449.22187-8-sj38.park@gmail.comSigned-off-by: default avatarSeongJae Park <sjpark@amazon.de>
    Reviewed-by: default avatarLeonard Foerster <foersleo@amazon.de>
    Reviewed-by: default avatarFernand Sieber <sieberf@amazon.com>
    Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
    Cc: Amit Shah <amit@kernel.org>
    Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
    Cc: Brendan Higgins <brendanhiggins@google.com>
    Cc: David Hildenbrand <david@redhat.com>
    Cc: David Rientjes <rientjes@google.com>
    Cc: David Woodhouse <dwmw@amazon.com>
    Cc: Fan Du <fan.du@intel.com>
    Cc: Greg Kroah-Hartman <greg@kroah.com>
    Cc: Greg Thelen <gthelen@google.com>
    Cc: Ingo Molnar <mingo@redhat.com>
    Cc: Joe Perches <joe@perches.com>
    Cc: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    Cc: Jonathan Corbet <corbet@lwn.net>
    Cc: Marco Elver <elver@google.com>
    Cc: Markus Boehme <markubo@amazon.de>
    Cc: Maximilian Heyne <mheyne@amazon.de>
    Cc: Mel Gorman <mgorman@suse.de>
    Cc: Minchan Kim <minchan@kernel.org>
    Cc: Namhyung Kim <namhyung@kernel.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Rik van Riel <riel@surriel.com>
    Cc: Shakeel Butt <shakeelb@google.com>
    Cc: Shuah Khan <shuah@kernel.org>
    Cc: Steven Rostedt (VMware) <rostedt@goodmis.org>
    Cc: Vladimir Davydov <vdavydov.dev@gmail.com>
    Cc: Vlastimil Babka <vbabka@suse.cz>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    4bc05954
Makefile 141 Bytes