lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-Id: <20250103174400.54890-1-sj@kernel.org>
Date: Fri,  3 Jan 2025 09:43:50 -0800
From: SeongJae Park <sj@...nel.org>
To: Andrew Morton <akpm@...ux-foundation.org>
Cc: SeongJae Park <sj@...nel.org>,
	Jonathan Corbet <corbet@....net>,
	damon@...ts.linux.dev,
	linux-doc@...r.kernel.org,
	linux-kernel@...r.kernel.org,
	linux-mm@...ck.org
Subject: [PATCH 00/10] mm/damon: replace most damon_callback usages in sysfs with new core functions

DAMON provides damon_callback API that notifies monitoring events and
allows safe access to damon_ctx internal data.  The usage is simple.
Users register and deregister callback functions for different
monitoring events in damon_ctx.  Then the DAMON worker thread (kdamond)
of the damon_ctx calls back the registered functions on the events.

It is designed in such simple way because it was sufficient for usages
of DAMON at the early days.  We also wanted to make it flexible so that
API user code can implement any required additional features on top of
damon_callback on their demands.

As expected, more sophisticated usages have invented.  Online updates of
DAMON parameters and DAMOS auto-tuning inputs, and online retrieval of
DAMOS statistics and tried regions information are such usages.  Because
damon_callback doesn't provide any explicit synchronization mechanism,
the user ABIs for exposing such functionalities are implemented in
asynchronous ways (DAMON_RECLAIM and DAMON_LRU_SORT}), or synchronous
ways (DAMON_SYSFS) with additional synchronization mechanisms that built
inside the ABI implementation, on top of damon_callback.

So damon_callback is working as expected.  However, the additional
mechanisms built inside ABI on top of damon_callback is becoming
somewhat too big and not easy to maintain.  The additional mechanisms
can be smaller and easier to maintain when implemented inside the core
logic layer.

Introduce two new DAMON core API, namely 'damon_call()' and
'damos_walk()'.  The two functions support synchronous access to
- damon_ctx internal data including DAMON parameters and monitoring
  results, and
- DAMOS-specific data such as regions that each DAMOS action is applied,
respectively.

And replace most of damon_callback usages in DAMON sysfs interface with
the new core API functions.  damon_callback usage for online DAMON
parameters tuning is not replaced in this series, since it has specific
callback timing assumptions that require more works.

Patch sequence
==============

First two patches are fixups for simplifying the following changes.
Those remove a unnecessary condition check and a synchronization,
respectively.

Third patch implements one of the new DAMON core APIs, namely
damon_call().  Three patches replacing damon_callback usages in DAMON
sysfs interface using damon_call() follow.

Then, seventh and eighth patches introduces the other new DAMON API,
damos_walk(), and document it on the design doc.  Ninth patch replaces
two damon_callback usages in DAMON sysfs interface using damos_walk().

The tenth patch finally cleans up code that no more being used.

Revision History
================

Changes from RFC
(https://lore.kernel.org/20241213215306.54778-1-sj@kernel.org)
- Call damos_call_cotnrol->walk_fn() after applying action
- Document DAMOS regions walk feature on design doc
- Wordsmith and fix typos in commit messages

SeongJae Park (10):
  mm/damon/sysfs-schemes: remove unnecessary schemes existence check in
    damon_sysfs_schemes_clear_regions()
  mm/damon/sysfs: handle clear_schemes_tried_regions from DAMON sysfs
    context
  mm/damon/core: introduce damon_call()
  mm/damon/sysfs: use damon_call() for update_schemes_stats
  mm/damon/sysfs: use damon_call() for commit_schemes_quota_goals
  mm/damon/sysfs: use damon_call() for update_schemes_effective_quotas
  mm/damon/core: implement damos_walk()
  Docs/mm/damon/design: document DAMOS regions walking
  mm/damon/sysfs: use damos_walk() for
    update_schemes_tried_{bytes,regions}
  mm/damon/sysfs: remove unused code for schemes tried regions update

 Documentation/mm/damon/design.rst |  11 ++
 include/linux/damon.h             |  59 +++++++-
 mm/damon/core.c                   | 218 ++++++++++++++++++++++++++++++
 mm/damon/sysfs-common.h           |  16 +--
 mm/damon/sysfs-schemes.c          | 206 +++-------------------------
 mm/damon/sysfs.c                  | 187 +++++++++++--------------
 6 files changed, 395 insertions(+), 302 deletions(-)

-- 
2.39.5

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ