From: Andrew Morton <akpm@linux-foundation.org>
To: akpm@linux-foundation.org, alexander.shishkin@linux.intel.com,
amit@kernel.org, benh@kernel.crashing.org,
brendanhiggins@google.com, corbet@lwn.net, david@redhat.com,
dwmw@amazon.com, elver@google.com, fan.du@intel.com,
foersleo@amazon.de, greg@kroah.com, gthelen@google.com,
joe@perches.com, Jonathan.Cameron@huawei.com, linux-mm@kvack.org,
markubo@amazon.de, mgorman@suse.de, mheyne@amazon.de,
minchan@kernel.org, mingo@redhat.com, mm-commits@vger.kernel.org,
namhyung@kernel.org, peterz@infradead.org, riel@surriel.com,
rientjes@google.com, rostedt@goodmis.org, shakeelb@google.com,
shuah@kernel.org, sieberf@amazon.com, sjpark@amazon.de,
torvalds@linux-foundation.org, vbabka@suse.cz,
vdavydov.dev@gmail.com
Subject: [patch 072/147] Documentation: add documents for DAMON
Date: Tue, 07 Sep 2021 19:57:05 -0700 [thread overview]
Message-ID: <20210908025705.mtZ98s0mq%akpm@linux-foundation.org> (raw)
In-Reply-To: <20210907195226.14b1d22a07c085b22968b933@linux-foundation.org>
From: SeongJae Park <sjpark@amazon.de>
Subject: Documentation: add documents for DAMON
This commit adds documents for DAMON under
`Documentation/admin-guide/mm/damon/` and `Documentation/vm/damon/`.
Link: https://lkml.kernel.org/r/20210716081449.22187-11-sj38.park@gmail.com
Signed-off-by: SeongJae Park <sjpark@amazon.de>
Reviewed-by: Fernand Sieber <sieberf@amazon.com>
Reviewed-by: Markus Boehme <markubo@amazon.de>
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: Leonard Foerster <foersleo@amazon.de>
Cc: Marco Elver <elver@google.com>
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: Andrew Morton <akpm@linux-foundation.org>
---
Documentation/admin-guide/mm/damon/index.rst | 15 +
Documentation/admin-guide/mm/damon/start.rst | 114 +++++++++++
Documentation/admin-guide/mm/damon/usage.rst | 112 +++++++++++
Documentation/admin-guide/mm/index.rst | 1
Documentation/vm/damon/api.rst | 20 ++
Documentation/vm/damon/design.rst | 166 +++++++++++++++++
Documentation/vm/damon/faq.rst | 51 +++++
Documentation/vm/damon/index.rst | 30 +++
Documentation/vm/index.rst | 1
9 files changed, 510 insertions(+)
--- /dev/null
+++ a/Documentation/admin-guide/mm/damon/index.rst
@@ -0,0 +1,15 @@
+.. SPDX-License-Identifier: GPL-2.0
+
+========================
+Monitoring Data Accesses
+========================
+
+:doc:`DAMON </vm/damon/index>` allows light-weight data access monitoring.
+Using DAMON, users can analyze the memory access patterns of their systems and
+optimize those.
+
+.. toctree::
+ :maxdepth: 2
+
+ start
+ usage
--- /dev/null
+++ a/Documentation/admin-guide/mm/damon/start.rst
@@ -0,0 +1,114 @@
+.. SPDX-License-Identifier: GPL-2.0
+
+===============
+Getting Started
+===============
+
+This document briefly describes how you can use DAMON by demonstrating its
+default user space tool. Please note that this document describes only a part
+of its features for brevity. Please refer to :doc:`usage` for more details.
+
+
+TL; DR
+======
+
+Follow the commands below to monitor and visualize the memory access pattern of
+your workload. ::
+
+ # # build the kernel with CONFIG_DAMON_*=y, install it, and reboot
+ # mount -t debugfs none /sys/kernel/debug/
+ # git clone https://github.com/awslabs/damo
+ # ./damo/damo record $(pidof <your workload>)
+ # ./damo/damo report heat --plot_ascii
+
+The final command draws the access heatmap of ``<your workload>``. The heatmap
+shows which memory region (x-axis) is accessed when (y-axis) and how frequently
+(number; the higher the more accesses have been observed). ::
+
+ 111111111111111111111111111111111111111111111111111111110000
+ 111121111111111111111111111111211111111111111111111111110000
+ 000000000000000000000000000000000000000000000000001555552000
+ 000000000000000000000000000000000000000000000222223555552000
+ 000000000000000000000000000000000000000011111677775000000000
+ 000000000000000000000000000000000000000488888000000000000000
+ 000000000000000000000000000000000177888400000000000000000000
+ 000000000000000000000000000046666522222100000000000000000000
+ 000000000000000000000014444344444300000000000000000000000000
+ 000000000000000002222245555510000000000000000000000000000000
+ # access_frequency: 0 1 2 3 4 5 6 7 8 9
+ # x-axis: space (140286319947776-140286426374096: 101.496 MiB)
+ # y-axis: time (605442256436361-605479951866441: 37.695430s)
+ # resolution: 60x10 (1.692 MiB and 3.770s for each character)
+
+
+Prerequisites
+=============
+
+Kernel
+------
+
+You should first ensure your system is running on a kernel built with
+``CONFIG_DAMON_*=y``.
+
+
+User Space Tool
+---------------
+
+For the demonstration, we will use the default user space tool for DAMON,
+called DAMON Operator (DAMO). It is available at
+https://github.com/awslabs/damo. The examples below assume that ``damo`` is on
+your ``$PATH``. It's not mandatory, though.
+
+Because DAMO is using the debugfs interface (refer to :doc:`usage` for the
+detail) of DAMON, you should ensure debugfs is mounted. Mount it manually as
+below::
+
+ # mount -t debugfs none /sys/kernel/debug/
+
+or append the following line to your ``/etc/fstab`` file so that your system
+can automatically mount debugfs upon booting::
+
+ debugfs /sys/kernel/debug debugfs defaults 0 0
+
+
+Recording Data Access Patterns
+==============================
+
+The commands below record the memory access patterns of a program and save the
+monitoring results to a file. ::
+
+ $ git clone https://github.com/sjp38/masim
+ $ cd masim; make; ./masim ./configs/zigzag.cfg &
+ $ sudo damo record -o damon.data $(pidof masim)
+
+The first two lines of the commands download an artificial memory access
+generator program and run it in the background. The generator will repeatedly
+access two 100 MiB sized memory regions one by one. You can substitute this
+with your real workload. The last line asks ``damo`` to record the access
+pattern in the ``damon.data`` file.
+
+
+Visualizing Recorded Patterns
+=============================
+
+The following three commands visualize the recorded access patterns and save
+the results as separate image files. ::
+
+ $ damo report heats --heatmap access_pattern_heatmap.png
+ $ damo report wss --range 0 101 1 --plot wss_dist.png
+ $ damo report wss --range 0 101 1 --sortby time --plot wss_chron_change.png
+
+- ``access_pattern_heatmap.png`` will visualize the data access pattern in a
+ heatmap, showing which memory region (y-axis) got accessed when (x-axis)
+ and how frequently (color).
+- ``wss_dist.png`` will show the distribution of the working set size.
+- ``wss_chron_change.png`` will show how the working set size has
+ chronologically changed.
+
+You can view the visualizations of this example workload at [1]_.
+Visualizations of other realistic workloads are available at [2]_ [3]_ [4]_.
+
+.. [1] https://damonitor.github.io/doc/html/v17/admin-guide/mm/damon/start.html#visualizing-recorded-patterns
+.. [2] https://damonitor.github.io/test/result/visual/latest/rec.heatmap.1.png.html
+.. [3] https://damonitor.github.io/test/result/visual/latest/rec.wss_sz.png.html
+.. [4] https://damonitor.github.io/test/result/visual/latest/rec.wss_time.png.html
--- /dev/null
+++ a/Documentation/admin-guide/mm/damon/usage.rst
@@ -0,0 +1,112 @@
+.. SPDX-License-Identifier: GPL-2.0
+
+===============
+Detailed Usages
+===============
+
+DAMON provides below three interfaces for different users.
+
+- *DAMON user space tool.*
+ This is for privileged people such as system administrators who want a
+ just-working human-friendly interface. Using this, users can use the DAMON’s
+ major features in a human-friendly way. It may not be highly tuned for
+ special cases, though. It supports only virtual address spaces monitoring.
+- *debugfs interface.*
+ This is for privileged user space programmers who want more optimized use of
+ DAMON. Using this, users can use DAMON’s major features by reading
+ from and writing to special debugfs files. Therefore, you can write and use
+ your personalized DAMON debugfs wrapper programs that reads/writes the
+ debugfs files instead of you. The DAMON user space tool is also a reference
+ implementation of such programs. It supports only virtual address spaces
+ monitoring.
+- *Kernel Space Programming Interface.*
+ This is for kernel space programmers. Using this, users can utilize every
+ feature of DAMON most flexibly and efficiently by writing kernel space
+ DAMON application programs for you. You can even extend DAMON for various
+ address spaces.
+
+Nevertheless, you could write your own user space tool using the debugfs
+interface. A reference implementation is available at
+https://github.com/awslabs/damo. If you are a kernel programmer, you could
+refer to :doc:`/vm/damon/api` for the kernel space programming interface. For
+the reason, this document describes only the debugfs interface
+
+debugfs Interface
+=================
+
+DAMON exports three files, ``attrs``, ``target_ids``, and ``monitor_on`` under
+its debugfs directory, ``<debugfs>/damon/``.
+
+
+Attributes
+----------
+
+Users can get and set 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. To know about the monitoring
+attributes in detail, please refer to the :doc:`/vm/damon/design`. For
+example, below commands set those values to 5 ms, 100 ms, 1,000 ms, 10 and
+1000, and then 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 target
+process is 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.
+
+
+Tracepoint for Monitoring Results
+=================================
+
+DAMON provides the monitoring results via a tracepoint,
+``damon:damon_aggregated``. While the monitoring is turned on, you could
+record the tracepoint events and show results using tracepoint supporting tools
+like ``perf``. For example::
+
+ # echo on > monitor_on
+ # perf record -e damon:damon_aggregated &
+ # sleep 5
+ # kill 9 $(pidof perf)
+ # echo off > monitor_on
+ # perf script
--- a/Documentation/admin-guide/mm/index.rst~documentation-add-documents-for-damon
+++ a/Documentation/admin-guide/mm/index.rst
@@ -27,6 +27,7 @@ the Linux memory management.
concepts
cma_debugfs
+ damon/index
hugetlbpage
idle_page_tracking
ksm
--- /dev/null
+++ a/Documentation/vm/damon/api.rst
@@ -0,0 +1,20 @@
+.. SPDX-License-Identifier: GPL-2.0
+
+=============
+API Reference
+=============
+
+Kernel space programs can use every feature of DAMON using below APIs. All you
+need to do is including ``damon.h``, which is located in ``include/linux/`` of
+the source tree.
+
+Structures
+==========
+
+.. kernel-doc:: include/linux/damon.h
+
+
+Functions
+=========
+
+.. kernel-doc:: mm/damon/core.c
--- /dev/null
+++ a/Documentation/vm/damon/design.rst
@@ -0,0 +1,166 @@
+.. SPDX-License-Identifier: GPL-2.0
+
+======
+Design
+======
+
+Configurable Layers
+===================
+
+DAMON provides data access monitoring functionality while making the accuracy
+and the overhead controllable. The fundamental access monitorings require
+primitives that dependent on and optimized for the target address space. On
+the other hand, the accuracy and overhead tradeoff mechanism, which is the core
+of DAMON, is in the pure logic space. DAMON separates the two parts in
+different layers and defines its interface to allow various low level
+primitives implementations configurable with the core logic.
+
+Due to this separated design and the configurable interface, users can extend
+DAMON for any address space by configuring the core logics with appropriate low
+level primitive implementations. If appropriate one is not provided, users can
+implement the primitives on their own.
+
+For example, physical memory, virtual memory, swap space, those for specific
+processes, NUMA nodes, files, and backing memory devices would be supportable.
+Also, if some architectures or devices support special optimized access check
+primitives, those will be easily configurable.
+
+
+Reference Implementations of Address Space Specific Primitives
+==============================================================
+
+The low level primitives for the fundamental access monitoring are defined in
+two parts:
+
+1. Identification of the monitoring target address range for the address space.
+2. Access check of specific address range in the target space.
+
+DAMON currently provides the implementation of the primitives for only the
+virtual address spaces. Below two subsections describe how it works.
+
+
+VMA-based Target Address Range Construction
+-------------------------------------------
+
+Only small parts in the super-huge virtual address space of the processes are
+mapped to the physical memory and accessed. Thus, tracking the unmapped
+address regions is just wasteful. However, because DAMON can deal with some
+level of noise using the adaptive regions adjustment mechanism, tracking every
+mapping is not strictly required but could even incur a high overhead in some
+cases. That said, too huge unmapped areas inside the monitoring target should
+be removed to not take the time for the adaptive mechanism.
+
+For the reason, this implementation converts the complex mappings to three
+distinct regions that cover every mapped area of the address space. The two
+gaps between the three regions are the two biggest unmapped areas in the given
+address space. The two biggest unmapped areas would be the gap between the
+heap and the uppermost mmap()-ed region, and the gap between the lowermost
+mmap()-ed region and the stack in most of the cases. Because these gaps are
+exceptionally huge in usual address spaces, excluding these will be sufficient
+to make a reasonable trade-off. Below shows this in detail::
+
+ <heap>
+ <BIG UNMAPPED REGION 1>
+ <uppermost mmap()-ed region>
+ (small mmap()-ed regions and munmap()-ed regions)
+ <lowermost mmap()-ed region>
+ <BIG UNMAPPED REGION 2>
+ <stack>
+
+
+PTE Accessed-bit Based Access Check
+-----------------------------------
+
+The implementation for the virtual address space uses PTE Accessed-bit for
+basic access checks. It finds the relevant PTE Accessed bit from the address
+by walking the page table for the target task of the address. In this way, the
+implementation finds and clears the bit for next sampling target address and
+checks whether the bit set again after one sampling period. This could disturb
+other kernel subsystems using the Accessed bits, namely Idle page tracking and
+the reclaim logic. To avoid such disturbances, DAMON makes it mutually
+exclusive with Idle page tracking and uses ``PG_idle`` and ``PG_young`` page
+flags to solve the conflict with the reclaim logic, as Idle page tracking does.
+
+
+Address Space Independent Core Mechanisms
+=========================================
+
+Below four sections describe each of the DAMON core mechanisms and the five
+monitoring attributes, ``sampling interval``, ``aggregation interval``,
+``regions update interval``, ``minimum number of regions``, and ``maximum
+number of regions``.
+
+
+Access Frequency Monitoring
+---------------------------
+
+The output of DAMON says what pages are how frequently accessed for a given
+duration. The resolution of the access frequency is controlled by setting
+``sampling interval`` and ``aggregation interval``. In detail, DAMON checks
+access to each page per ``sampling interval`` and aggregates the results. In
+other words, counts the number of the accesses to each page. After each
+``aggregation interval`` passes, DAMON calls callback functions that previously
+registered by users so that users can read the aggregated results and then
+clears the results. This can be described in below simple pseudo-code::
+
+ while monitoring_on:
+ for page in monitoring_target:
+ if accessed(page):
+ nr_accesses[page] += 1
+ if time() % aggregation_interval == 0:
+ for callback in user_registered_callbacks:
+ callback(monitoring_target, nr_accesses)
+ for page in monitoring_target:
+ nr_accesses[page] = 0
+ sleep(sampling interval)
+
+The monitoring overhead of this mechanism will arbitrarily increase as the
+size of the target workload grows.
+
+
+Region Based Sampling
+---------------------
+
+To avoid the unbounded increase of the overhead, DAMON groups adjacent pages
+that assumed to have the same access frequencies into a region. As long as the
+assumption (pages in a region have the same access frequencies) is kept, only
+one page in the region is required to be checked. Thus, for each ``sampling
+interval``, DAMON randomly picks one page in each region, waits for one
+``sampling interval``, checks whether the page is accessed meanwhile, and
+increases the access frequency of the region if so. Therefore, the monitoring
+overhead is controllable by setting the number of regions. DAMON allows users
+to set the minimum and the maximum number of regions for the trade-off.
+
+This scheme, however, cannot preserve the quality of the output if the
+assumption is not guaranteed.
+
+
+Adaptive Regions Adjustment
+---------------------------
+
+Even somehow the initial monitoring target regions are well constructed to
+fulfill the assumption (pages in same region have similar access frequencies),
+the data access pattern can be dynamically changed. This will result in low
+monitoring quality. To keep the assumption as much as possible, DAMON
+adaptively merges and splits each region based on their access frequency.
+
+For each ``aggregation interval``, it compares the access frequencies of
+adjacent regions and merges those if the frequency difference is small. Then,
+after it reports and clears the aggregated access frequency of each region, it
+splits each region into two or three regions if the total number of regions
+will not exceed the user-specified maximum number of regions after the split.
+
+In this way, DAMON provides its best-effort quality and minimal overhead while
+keeping the bounds users set for their trade-off.
+
+
+Dynamic Target Space Updates Handling
+-------------------------------------
+
+The monitoring target address range could dynamically changed. For example,
+virtual memory could be dynamically mapped and unmapped. Physical memory could
+be hot-plugged.
+
+As the changes could be quite frequent in some cases, DAMON checks the dynamic
+memory mapping changes and applies it to the abstracted target area only for
+each of a user-specified time interval (``regions update interval``).
--- /dev/null
+++ a/Documentation/vm/damon/faq.rst
@@ -0,0 +1,51 @@
+.. SPDX-License-Identifier: GPL-2.0
+
+==========================
+Frequently Asked Questions
+==========================
+
+Why a new subsystem, instead of extending perf or other user space tools?
+=========================================================================
+
+First, because it needs to be lightweight as much as possible so that it can be
+used online, any unnecessary overhead such as kernel - user space context
+switching cost should be avoided. Second, DAMON aims to be used by other
+programs including the kernel. Therefore, having a dependency on specific
+tools like perf is not desirable. These are the two biggest reasons why DAMON
+is implemented in the kernel space.
+
+
+Can 'idle pages tracking' or 'perf mem' substitute DAMON?
+=========================================================
+
+Idle page tracking is a low level primitive for access check of the physical
+address space. 'perf mem' is similar, though it can use sampling to minimize
+the overhead. On the other hand, DAMON is a higher-level framework for the
+monitoring of various address spaces. It is focused on memory management
+optimization and provides sophisticated accuracy/overhead handling mechanisms.
+Therefore, 'idle pages tracking' and 'perf mem' could provide a subset of
+DAMON's output, but cannot substitute DAMON.
+
+
+Does DAMON support virtual memory only?
+=======================================
+
+No. The core of the DAMON is address space independent. The address space
+specific low level primitive parts including monitoring target regions
+constructions and actual access checks can be implemented and configured on the
+DAMON core by the users. In this way, DAMON users can monitor any address
+space with any access check technique.
+
+Nonetheless, DAMON provides vma tracking and PTE Accessed bit check based
+implementations of the address space dependent functions for the virtual memory
+by default, for a reference and convenient use. In near future, we will
+provide those for physical memory address space.
+
+
+Can I simply monitor page granularity?
+======================================
+
+Yes. You can do so by setting the ``min_nr_regions`` attribute higher than the
+working set size divided by the page size. Because the monitoring target
+regions size is forced to be ``>=page size``, the region split will make no
+effect.
--- /dev/null
+++ a/Documentation/vm/damon/index.rst
@@ -0,0 +1,30 @@
+.. SPDX-License-Identifier: GPL-2.0
+
+==========================
+DAMON: Data Access MONitor
+==========================
+
+DAMON is a data access monitoring framework subsystem for the Linux kernel.
+The core mechanisms of DAMON (refer to :doc:`design` for the detail) make it
+
+ - *accurate* (the monitoring output is useful enough for DRAM level memory
+ management; It might not appropriate for CPU Cache levels, though),
+ - *light-weight* (the monitoring overhead is low enough to be applied online),
+ and
+ - *scalable* (the upper-bound of the overhead is in constant range regardless
+ of the size of target workloads).
+
+Using this framework, therefore, the kernel's memory management mechanisms can
+make advanced decisions. Experimental memory management optimization works
+that incurring high data accesses monitoring overhead could implemented again.
+In user space, meanwhile, users who have some special workloads can write
+personalized applications for better understanding and optimizations of their
+workloads and systems.
+
+.. toctree::
+ :maxdepth: 2
+
+ faq
+ design
+ api
+ plans
--- a/Documentation/vm/index.rst~documentation-add-documents-for-damon
+++ a/Documentation/vm/index.rst
@@ -32,6 +32,7 @@ descriptions of data structures and algo
arch_pgtable_helpers
balance
cleancache
+ damon/index
free_page_reporting
frontswap
highmem
_
next prev parent reply other threads:[~2021-09-08 2:57 UTC|newest]
Thread overview: 186+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-09-08 2:52 incoming Andrew Morton
2021-09-08 2:52 ` [patch 001/147] mm, slub: don't call flush_all() from slab_debug_trace_open() Andrew Morton
2021-09-08 2:53 ` [patch 002/147] mm, slub: allocate private object map for debugfs listings Andrew Morton
2021-09-08 2:53 ` [patch 003/147] mm, slub: allocate private object map for validate_slab_cache() Andrew Morton
2021-09-08 2:53 ` [patch 004/147] mm, slub: don't disable irq for debug_check_no_locks_freed() Andrew Morton
2021-09-08 2:53 ` [patch 005/147] mm, slub: remove redundant unfreeze_partials() from put_cpu_partial() Andrew Morton
2021-09-08 2:53 ` [patch 006/147] mm, slub: extract get_partial() from new_slab_objects() Andrew Morton
2021-09-08 2:53 ` [patch 007/147] mm, slub: dissolve new_slab_objects() into ___slab_alloc() Andrew Morton
2021-09-08 2:53 ` [patch 008/147] mm, slub: return slab page from get_partial() and set c->page afterwards Andrew Morton
2021-09-08 2:53 ` [patch 009/147] mm, slub: restructure new page checks in ___slab_alloc() Andrew Morton
2021-09-08 2:53 ` [patch 010/147] mm, slub: simplify kmem_cache_cpu and tid setup Andrew Morton
2021-09-08 2:53 ` [patch 011/147] mm, slub: move disabling/enabling irqs to ___slab_alloc() Andrew Morton
2021-09-08 2:53 ` [patch 012/147] mm, slub: do initial checks in ___slab_alloc() with irqs enabled Andrew Morton
2021-09-08 2:53 ` [patch 013/147] mm, slub: move disabling irqs closer to get_partial() in ___slab_alloc() Andrew Morton
2021-09-08 2:53 ` [patch 014/147] mm, slub: restore irqs around calling new_slab() Andrew Morton
2021-09-08 2:53 ` [patch 015/147] mm, slub: validate slab from partial list or page allocator before making it cpu slab Andrew Morton
2021-09-08 2:53 ` [patch 016/147] mm, slub: check new pages with restored irqs Andrew Morton
2021-09-08 2:53 ` [patch 017/147] mm, slub: stop disabling irqs around get_partial() Andrew Morton
2021-09-08 2:53 ` [patch 018/147] mm, slub: move reset of c->page and freelist out of deactivate_slab() Andrew Morton
2021-09-08 2:53 ` [patch 019/147] mm, slub: make locking in deactivate_slab() irq-safe Andrew Morton
2021-09-08 2:54 ` [patch 020/147] mm, slub: call deactivate_slab() without disabling irqs Andrew Morton
2021-09-08 2:54 ` [patch 021/147] mm, slub: move irq control into unfreeze_partials() Andrew Morton
2021-09-08 2:54 ` [patch 022/147] mm, slub: discard slabs in unfreeze_partials() without irqs disabled Andrew Morton
2021-09-08 2:54 ` [patch 023/147] mm, slub: detach whole partial list at once in unfreeze_partials() Andrew Morton
2021-09-08 2:54 ` [patch 024/147] mm, slub: separate detaching of partial list in unfreeze_partials() from unfreezing Andrew Morton
2021-09-08 2:54 ` [patch 025/147] mm, slub: only disable irq with spin_lock in __unfreeze_partials() Andrew Morton
2021-09-08 2:54 ` [patch 026/147] mm, slub: don't disable irqs in slub_cpu_dead() Andrew Morton
2021-09-08 2:54 ` [patch 027/147] mm, slab: split out the cpu offline variant of flush_slab() Andrew Morton
2021-09-08 2:54 ` [patch 028/147] mm: slub: move flush_cpu_slab() invocations __free_slab() invocations out of IRQ context Andrew Morton
2021-09-08 2:54 ` [patch 029/147] mm: slub: make object_map_lock a raw_spinlock_t Andrew Morton
2021-09-08 2:54 ` [patch 030/147] mm, slub: make slab_lock() disable irqs with PREEMPT_RT Andrew Morton
2021-09-08 2:54 ` [patch 031/147] mm, slub: protect put_cpu_partial() with disabled irqs instead of cmpxchg Andrew Morton
2021-09-08 13:05 ` Jesper Dangaard Brouer
2021-09-08 13:58 ` Vlastimil Babka
2021-09-08 14:55 ` David Hildenbrand
2021-09-08 14:59 ` David Hildenbrand
2021-09-08 17:14 ` Jesper Dangaard Brouer
2021-09-08 17:24 ` David Hildenbrand
2021-09-08 16:11 ` Jesper Dangaard Brouer
2021-09-08 16:31 ` Linus Torvalds
2021-09-08 2:54 ` [patch 032/147] mm, slub: use migrate_disable() on PREEMPT_RT Andrew Morton
2021-09-08 2:54 ` [patch 033/147] mm, slub: convert kmem_cpu_slab protection to local_lock Andrew Morton
2021-09-08 2:54 ` [patch 034/147] memory-hotplug.rst: remove locking details from admin-guide Andrew Morton
2021-09-08 2:54 ` [patch 035/147] memory-hotplug.rst: complete admin-guide overhaul Andrew Morton
2021-09-08 2:54 ` [patch 036/147] mm: remove pfn_valid_within() and CONFIG_HOLES_IN_ZONE Andrew Morton
2021-09-08 2:54 ` [patch 037/147] mm: memory_hotplug: cleanup after removal of pfn_valid_within() Andrew Morton
2021-09-08 2:54 ` [patch 038/147] mm/memory_hotplug: use "unsigned long" for PFN in zone_for_pfn_range() Andrew Morton
2021-09-08 2:55 ` [patch 039/147] mm/memory_hotplug: remove nid parameter from arch_remove_memory() Andrew Morton
2021-09-08 2:55 ` [patch 040/147] mm/memory_hotplug: remove nid parameter from remove_memory() and friends Andrew Morton
2021-09-08 2:55 ` [patch 041/147] ACPI: memhotplug: memory resources cannot be enabled yet Andrew Morton
2021-09-08 2:55 ` [patch 042/147] mm: track present early pages per zone Andrew Morton
2021-09-08 2:55 ` [patch 043/147] mm/memory_hotplug: introduce "auto-movable" online policy Andrew Morton
2021-09-08 2:55 ` [patch 044/147] drivers/base/memory: introduce "memory groups" to logically group memory blocks Andrew Morton
2021-09-08 2:55 ` [patch 045/147] mm/memory_hotplug: track present pages in memory groups Andrew Morton
2021-09-08 2:55 ` [patch 046/147] ACPI: memhotplug: use a single static memory group for a single memory device Andrew Morton
2021-09-08 2:55 ` [patch 047/147] dax/kmem: use a single static memory group for a single probed unit Andrew Morton
2021-09-08 2:55 ` [patch 048/147] virtio-mem: use a single dynamic memory group for a single virtio-mem device Andrew Morton
2021-09-08 2:55 ` [patch 049/147] mm/memory_hotplug: memory group aware "auto-movable" online policy Andrew Morton
2021-09-08 2:55 ` [patch 050/147] mm/memory_hotplug: improved dynamic " Andrew Morton
2021-09-08 2:55 ` [patch 051/147] mm/memory_hotplug: use helper zone_is_zone_device() to simplify the code Andrew Morton
2021-09-08 2:55 ` [patch 052/147] mm: remove redundant compound_head() calling Andrew Morton
2021-09-08 2:55 ` [patch 053/147] riscv: only select GENERIC_IOREMAP if MMU support is enabled Andrew Morton
2021-09-08 2:56 ` [patch 054/147] mm: move ioremap_page_range to vmalloc.c Andrew Morton
2021-09-08 2:56 ` [patch 055/147] mm: don't allow executable ioremap mappings Andrew Morton
2021-09-08 2:56 ` [patch 056/147] mm/early_ioremap.c: remove redundant early_ioremap_shutdown() Andrew Morton
2021-09-08 2:56 ` [patch 057/147] highmem: don't disable preemption on RT in kmap_atomic() Andrew Morton
2021-09-08 2:56 ` [patch 058/147] mm: in_irq() cleanup Andrew Morton
2021-09-08 2:56 ` [patch 059/147] mm: introduce PAGEFLAGS_MASK to replace ((1UL << NR_PAGEFLAGS) - 1) Andrew Morton
2021-09-08 2:56 ` [patch 060/147] mm/secretmem: use refcount_t instead of atomic_t Andrew Morton
2021-09-08 2:56 ` [patch 061/147] kfence: show cpu and timestamp in alloc/free info Andrew Morton
2021-09-08 2:56 ` [patch 062/147] kfence: test: fail fast if disabled at boot Andrew Morton
2021-09-08 2:56 ` [patch 063/147] mm: introduce Data Access MONitor (DAMON) Andrew Morton
2021-09-08 2:56 ` [patch 064/147] mm/damon/core: implement region-based sampling Andrew Morton
2021-09-08 2:56 ` [patch 065/147] mm/damon: adaptively adjust regions Andrew Morton
2021-09-08 2:56 ` [patch 066/147] mm/idle_page_tracking: make PG_idle reusable Andrew Morton
2021-09-08 2:56 ` [patch 067/147] mm/damon: implement primitives for the virtual memory address spaces Andrew Morton
2021-09-08 2:56 ` [patch 068/147] mm/damon: add a tracepoint Andrew Morton
2021-09-08 2:56 ` [patch 069/147] mm/damon: implement a debugfs-based user space interface Andrew Morton
2021-09-08 2:56 ` [patch 070/147] mm/damon/dbgfs: export kdamond pid to the user space Andrew Morton
2021-09-08 2:57 ` [patch 071/147] mm/damon/dbgfs: support multiple contexts Andrew Morton
2021-09-08 2:57 ` Andrew Morton [this message]
2021-09-08 2:57 ` [patch 073/147] mm/damon: add kunit tests Andrew Morton
2021-09-08 2:57 ` [patch 074/147] mm/damon: add user space selftests Andrew Morton
2021-09-08 2:57 ` [patch 075/147] MAINTAINERS: update for DAMON Andrew Morton
2021-09-08 2:57 ` [patch 076/147] alpha: agp: make empty macros use do-while-0 style Andrew Morton
2021-09-08 2:57 ` [patch 077/147] alpha: pci-sysfs: fix all kernel-doc warnings Andrew Morton
2021-09-08 2:57 ` [patch 078/147] percpu: remove export of pcpu_base_addr Andrew Morton
2021-09-08 2:57 ` [patch 079/147] fs/proc/kcore.c: add mmap interface Andrew Morton
2021-09-08 18:13 ` Linus Torvalds
2021-09-09 9:56 ` [External] " Feng Zhou
2021-09-09 17:32 ` Linus Torvalds
2021-09-09 17:34 ` Linus Torvalds
2021-09-10 3:18 ` Feng Zhou
2021-09-10 10:08 ` David Hildenbrand
2021-09-10 12:00 ` Mike Rapoport
2021-09-10 12:02 ` David Hildenbrand
2021-09-08 2:57 ` [patch 080/147] proc: stop using seq_get_buf in proc_task_name Andrew Morton
2021-09-08 2:57 ` [patch 081/147] connector: send event on write to /proc/[pid]/comm Andrew Morton
2021-09-08 2:57 ` [patch 082/147] arch: Kconfig: fix spelling mistake "seperate" -> "separate" Andrew Morton
2021-09-08 2:57 ` [patch 083/147] include/linux/once.h: fix trivia typo Not -> Note Andrew Morton
2021-09-08 2:57 ` [patch 084/147] units: change from 'L' to 'UL' Andrew Morton
2021-09-08 2:57 ` [patch 085/147] units: add the HZ macros Andrew Morton
2021-09-08 2:57 ` [patch 086/147] thermal/drivers/devfreq_cooling: use " Andrew Morton
2021-09-08 2:57 ` [patch 087/147] devfreq: " Andrew Morton
2021-09-08 2:57 ` [patch 088/147] iio/drivers/as73211: " Andrew Morton
2021-09-08 2:58 ` [patch 089/147] hwmon/drivers/mr75203: " Andrew Morton
2021-09-08 2:58 ` [patch 090/147] iio/drivers/hid-sensor: " Andrew Morton
2021-09-08 2:58 ` [patch 091/147] i2c/drivers/ov02q10: " Andrew Morton
2021-09-08 2:58 ` [patch 092/147] mtd/drivers/nand: " Andrew Morton
2021-09-08 6:39 ` Miquel Raynal
2021-09-08 2:58 ` [patch 093/147] phy/drivers/stm32: " Andrew Morton
2021-09-08 2:58 ` [patch 094/147] kernel/acct.c: use dedicated helper to access rlimit values Andrew Morton
2021-09-08 2:58 ` [patch 095/147] profiling: fix shift-out-of-bounds bugs Andrew Morton
2021-09-08 2:58 ` [patch 096/147] MAINTAINERS: update ClangBuiltLinux mailing list Andrew Morton
2021-09-08 2:58 ` [patch 097/147] Documentation/llvm: update " Andrew Morton
2021-09-08 2:58 ` [patch 098/147] Documentation/llvm: update IRC location Andrew Morton
2021-09-08 2:58 ` [patch 099/147] math: make RATIONAL tristate Andrew Morton
2021-09-08 2:58 ` [patch 100/147] math: RATIONAL_KUNIT_TEST should depend on RATIONAL instead of selecting it Andrew Morton
2021-09-08 2:58 ` [patch 101/147] lib/string: optimized memcpy Andrew Morton
2021-09-08 18:26 ` Linus Torvalds
2021-09-08 2:58 ` [patch 102/147] lib/string: optimized memmove Andrew Morton
2021-09-08 18:29 ` Linus Torvalds
2021-09-09 8:28 ` David Laight
2021-09-08 2:58 ` [patch 103/147] lib/string: optimized memset Andrew Morton
2021-09-08 18:34 ` Linus Torvalds
2021-09-09 10:27 ` Matteo Croce
2021-09-08 2:58 ` [patch 104/147] lib/test: convert test_sort.c to use KUnit Andrew Morton
2021-09-08 2:58 ` [patch 105/147] lib/dump_stack: correct kernel-doc notation Andrew Morton
2021-09-08 2:58 ` [patch 106/147] lib/iov_iter.c: fix kernel-doc warnings Andrew Morton
2021-09-08 2:58 ` [patch 107/147] bitops: protect find_first_{,zero}_bit properly Andrew Morton
2021-09-08 2:59 ` [patch 108/147] bitops: move find_bit_*_le functions from le.h to find.h Andrew Morton
2021-09-08 18:37 ` Linus Torvalds
2021-09-08 19:38 ` Yury Norov
2021-09-08 19:46 ` Linus Torvalds
2021-09-08 19:49 ` Andrew Morton
2021-09-08 19:56 ` Linus Torvalds
2021-09-08 20:08 ` Linus Torvalds
2021-09-08 20:16 ` Yury Norov
2021-09-08 2:59 ` [patch 109/147] include: move find.h from asm_generic to linux Andrew Morton
2021-09-08 2:59 ` [patch 110/147] arch: remove GENERIC_FIND_FIRST_BIT entirely Andrew Morton
2021-09-08 2:59 ` [patch 111/147] lib: add find_first_and_bit() Andrew Morton
2021-09-08 2:59 ` [patch 112/147] cpumask: use find_first_and_bit() Andrew Morton
2021-09-08 2:59 ` [patch 113/147] all: replace find_next{,_zero}_bit with find_first{,_zero}_bit where appropriate Andrew Morton
2021-09-08 2:59 ` [patch 114/147] tools: sync tools/bitmap with mother linux Andrew Morton
2021-09-08 2:59 ` [patch 115/147] cpumask: replace cpumask_next_* with cpumask_first_* where appropriate Andrew Morton
2021-09-08 2:59 ` [patch 116/147] include/linux: move for_each_bit() macros from bitops.h to find.h Andrew Morton
2021-09-08 2:59 ` [patch 117/147] find: micro-optimize for_each_{set,clear}_bit() Andrew Morton
2021-09-08 2:59 ` [patch 118/147] bitops: replace for_each_*_bit_from() with for_each_*_bit() where appropriate Andrew Morton
2021-09-08 2:59 ` [patch 119/147] tools: rename bitmap_alloc() to bitmap_zalloc() Andrew Morton
2021-09-08 2:59 ` [patch 120/147] mm/percpu: micro-optimize pcpu_is_populated() Andrew Morton
2021-09-08 2:59 ` [patch 121/147] bitmap: unify find_bit operations Andrew Morton
2021-09-08 2:59 ` [patch 122/147] lib: bitmap: add performance test for bitmap_print_to_pagebuf Andrew Morton
2021-09-08 2:59 ` [patch 123/147] vsprintf: rework bitmap_list_string Andrew Morton
2021-09-08 2:59 ` [patch 124/147] checkpatch: support wide strings Andrew Morton
2021-09-08 2:59 ` [patch 125/147] checkpatch: make email address check case insensitive Andrew Morton
2021-09-08 2:59 ` [patch 126/147] checkpatch: improve GIT_COMMIT_ID test Andrew Morton
2021-09-08 3:00 ` [patch 127/147] fs/epoll: use a per-cpu counter for user's watches count Andrew Morton
2021-09-08 3:00 ` [patch 128/147] init: move usermodehelper_enable() to populate_rootfs() Andrew Morton
2021-09-08 15:44 ` Luis Chamberlain
2021-09-10 8:12 ` Rasmus Villemoes
2021-09-10 17:47 ` H. Peter Anvin
2021-09-10 17:51 ` Luis Chamberlain
2021-09-08 3:00 ` [patch 130/147] nilfs2: fix memory leak in nilfs_sysfs_create_device_group Andrew Morton
2021-09-08 3:00 ` [patch 131/147] nilfs2: fix NULL pointer in nilfs_##name##_attr_release Andrew Morton
2021-09-08 3:00 ` [patch 132/147] nilfs2: fix memory leak in nilfs_sysfs_create_##name##_group Andrew Morton
2021-09-08 3:00 ` [patch 133/147] nilfs2: fix memory leak in nilfs_sysfs_delete_##name##_group Andrew Morton
2021-09-08 3:00 ` [patch 134/147] nilfs2: fix memory leak in nilfs_sysfs_create_snapshot_group Andrew Morton
2021-09-08 3:00 ` [patch 135/147] nilfs2: fix memory leak in nilfs_sysfs_delete_snapshot_group Andrew Morton
2021-09-08 3:00 ` [patch 136/147] nilfs2: use refcount_dec_and_lock() to fix potential UAF Andrew Morton
2021-09-24 10:35 ` Pavel Machek
2021-09-24 11:09 ` Ryusuke Konishi
2021-09-24 12:12 ` Matthew Wilcox
2021-09-24 15:09 ` Ryusuke Konishi
2021-09-08 3:00 ` [patch 137/147] fs/coredump.c: log if a core dump is aborted due to changed file permissions Andrew Morton
2021-09-08 3:00 ` [patch 138/147] coredump: fix memleak in dump_vma_snapshot() Andrew Morton
2021-09-08 3:00 ` [patch 139/147] kernel/fork.c: unexport get_{mm,task}_exe_file Andrew Morton
2021-09-08 3:00 ` [patch 140/147] pid: cleanup the stale comment mentioning pidmap_init() Andrew Morton
2021-09-08 3:00 ` [patch 141/147] prctl: allow to setup brk for et_dyn executables Andrew Morton
2021-09-08 3:00 ` [patch 142/147] configs: remove the obsolete CONFIG_INPUT_POLLDEV Andrew Morton
2021-09-08 3:00 ` [patch 143/147] Kconfig.debug: drop selecting non-existing HARDLOCKUP_DETECTOR_ARCH Andrew Morton
2021-09-08 3:00 ` [patch 144/147] selftests/memfd: remove unused variable Andrew Morton
2021-09-08 3:00 ` [patch 145/147] ipc: replace costly bailout check in sysvipc_find_ipc() Andrew Morton
2021-09-08 3:00 ` [patch 146/147] mm/workingset: correct kernel-doc notations Andrew Morton
2021-09-08 3:00 ` [patch 147/147] scripts: check_extable: fix typo in user error message Andrew Morton
2021-09-08 3:16 ` [patch 129/147] trap: cleanup trap_init() Andrew Morton
2021-09-08 8:57 ` incoming Vlastimil Babka
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20210908025705.mtZ98s0mq%akpm@linux-foundation.org \
--to=akpm@linux-foundation.org \
--cc=Jonathan.Cameron@huawei.com \
--cc=alexander.shishkin@linux.intel.com \
--cc=amit@kernel.org \
--cc=benh@kernel.crashing.org \
--cc=brendanhiggins@google.com \
--cc=corbet@lwn.net \
--cc=david@redhat.com \
--cc=dwmw@amazon.com \
--cc=elver@google.com \
--cc=fan.du@intel.com \
--cc=foersleo@amazon.de \
--cc=greg@kroah.com \
--cc=gthelen@google.com \
--cc=joe@perches.com \
--cc=linux-mm@kvack.org \
--cc=markubo@amazon.de \
--cc=mgorman@suse.de \
--cc=mheyne@amazon.de \
--cc=minchan@kernel.org \
--cc=mingo@redhat.com \
--cc=mm-commits@vger.kernel.org \
--cc=namhyung@kernel.org \
--cc=peterz@infradead.org \
--cc=riel@surriel.com \
--cc=rientjes@google.com \
--cc=rostedt@goodmis.org \
--cc=shakeelb@google.com \
--cc=shuah@kernel.org \
--cc=sieberf@amazon.com \
--cc=sjpark@amazon.de \
--cc=torvalds@linux-foundation.org \
--cc=vbabka@suse.cz \
--cc=vdavydov.dev@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).