From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 7C0E6C4332F for ; Fri, 25 Feb 2022 07:32:56 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id C485A8D0002; Fri, 25 Feb 2022 02:32:55 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id BF62D8D0001; Fri, 25 Feb 2022 02:32:55 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id ABDCE8D0002; Fri, 25 Feb 2022 02:32:55 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0031.hostedemail.com [216.40.44.31]) by kanga.kvack.org (Postfix) with ESMTP id 986C78D0001 for ; Fri, 25 Feb 2022 02:32:55 -0500 (EST) Received: from smtpin24.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay05.hostedemail.com (Postfix) with ESMTP id 48EED181CCCAA for ; Fri, 25 Feb 2022 07:32:55 +0000 (UTC) X-FDA: 79180485510.24.61DC0FE Received: from out30-44.freemail.mail.aliyun.com (out30-44.freemail.mail.aliyun.com [115.124.30.44]) by imf31.hostedemail.com (Postfix) with ESMTP id C4F6B20005 for ; Fri, 25 Feb 2022 07:32:53 +0000 (UTC) X-Alimail-AntiSpam:AC=PASS;BC=-1|-1;BR=01201311R811e4;CH=green;DM=||false|;DS=||;FP=0|-1|-1|-1|0|-1|-1|-1;HT=e01e01424;MF=xhao@linux.alibaba.com;NM=1;PH=DS;RN=10;SR=0;TI=SMTPD_---0V5S64K8_1645774367; Received: from B-X3VXMD6M-2058.local(mailfrom:xhao@linux.alibaba.com fp:SMTPD_---0V5S64K8_1645774367) by smtp.aliyun-inc.com(127.0.0.1); Fri, 25 Feb 2022 15:32:48 +0800 From: xhao@linux.alibaba.com Reply-To: xhao@linux.alibaba.com Subject: Re: [PATCH 00/12] Introduce DAMON sysfs interface To: SeongJae Park , akpm@linux-foundation.org Cc: corbet@lwn.net, skhan@linuxfoundation.org, rientjes@google.com, linux-damon@amazon.com, linux-mm@kvack.org, linux-doc@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org References: <20220223152051.22936-1-sj@kernel.org> Message-ID: <1dbf6a7e-0805-bc44-ec4b-379405d619d1@linux.alibaba.com> Date: Fri, 25 Feb 2022 15:32:47 +0800 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0) Gecko/20100101 Thunderbird/78.14.0 MIME-Version: 1.0 In-Reply-To: <20220223152051.22936-1-sj@kernel.org> Content-Type: text/plain; charset=utf-8; format=flowed X-Rspamd-Queue-Id: C4F6B20005 X-Stat-Signature: y5jz9y1e49griz3fctgc9dke98wgict4 X-Rspam-User: Authentication-Results: imf31.hostedemail.com; dkim=none; spf=pass (imf31.hostedemail.com: domain of xhao@linux.alibaba.com designates 115.124.30.44 as permitted sender) smtp.mailfrom=xhao@linux.alibaba.com; dmarc=pass (policy=none) header.from=alibaba.com X-Rspamd-Server: rspam05 X-HE-Tag: 1645774373-420833 Content-Transfer-Encoding: quoted-printable X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: Hi SeongJae: On 2/23/22 11:20 PM, SeongJae Park wrote: > Chages from Previous Version (RFC) > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > > Compared to the RFC version of this patchset > (https://lore.kernel.org/linux-mm/20220217161938.8874-1-sj@kernel.org/)= , this > version contains below changes. > > - Implement all DAMON debugfs interface providing features > - Writeup documents > - Add more selftests > > Introduction > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > > DAMON's debugfs-based user interface (DAMON_DBGFS) served very well, so= far. > However, it unnecessarily depends on debugfs, while DAMON is not aimed = to be > used for only debugging. Also, the interface receives multiple values = via one > file. For example, schemes file receives 18 values. As a result, it i= s > inefficient, hard to be used, and difficult to be extended. Especially= , > keeping backward compatibility of user space tools is getting only chal= lenging. > It would be better to implement another reliable and flexible interface= and > deprecate DAMON_DBGFS in long term. > > For the reason, this patchset introduces a sysfs-based new user interfa= ce of > DAMON. The idea of the new interface is, using directory hierarchies a= nd > having one dedicated file for each value. For a short example, users c= an do > the virtual address monitoring via the interface as below: > > # cd /sys/kernel/mm/damon/admin/ > # echo 1 > kdamonds/nr > # echo 1 > kdamonds/0/contexts/nr > # echo vaddr > kdamonds/0/contexts/0/operations > # echo 1 > kdamonds/0/contexts/0/targets/nr > # echo $(pidof ) > kdamonds/0/contexts/0/targets/0/pid > # echo on > kdamonds/0/state > > A brief representation of the files hierarchy of DAMON sysfs interface = is as > below. Childs are represented with indentation, directories are having= '/' > suffix, and files in each directory are separated by comma. > > /sys/kernel/mm/damon/admin > =E2=94=82 kdamonds/nr > =E2=94=82 =E2=94=82 0/state,pid > =E2=94=82 =E2=94=82 =E2=94=82 contexts/nr > =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 0/operations > =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 monitoring_attrs= / > =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 interv= als/sample_us,aggr_us,update_us > =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 nr_reg= ions/min,max > =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 targets/nr > =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 0/pid > =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94= =82 regions/nr > =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94= =82 =E2=94=82 0/start,end > =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94= =82 =E2=94=82 ... > =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 ... > =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 schemes/nr > =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 0/action > =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 access= _pattern/ > =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94= =82 sz/min,max > =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94= =82 nr_accesses/min,max > =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94= =82 age/min,max > =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 quotas= /ms,sz,reset_interval_ms > =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94= =82 weights/sz,nr_accesses,age > =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 waterm= arks/metric,interval_us,high,mid,low > =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 stats/= nr_tried,sz_tried,nr_applied,sz_applied,qt_exceeds > =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 ... > =E2=94=82 =E2=94=82 ... > > Detailed usage of the files will be described in the final Documentatio= n patch > of this patchset. The introduction of the sys DAMON interface makes DAMON seem more=20 hierarchical, but it brings a problem. From a user's perspective, I find it difficult to operate. For example: step one: echo xxx > /sys/kernel/mm/damon/admin/kdamonds/0/contexts/0/targets/nr step two: echo /sys/kernel/mm/damon/admin/kdamonds/0/contexts/0/targets/nr/1/pid echo /sys/kernel/mm/damon/admin/kdamonds/0/contexts/0/targets/nr/0/pid ......... Alas, it is really too troublesome to operate, can you make it as simple=20 as possible, perhaps by referring to the implementation of cgroup. > Main Difference Between DAMON_DBGFS and DAMON_SYSFS > --------------------------------------------------- > > At the moment, DAMON_DBGFS and DAMON_SYSFS provides same features. One > important difference between them is their exclusiveness. DAMON_DBGFS = works in > an exclusive manner, so that no DAMON worker thread (kdamond) in the sy= stem can > run concurrently and interfere somehow. For the reason, DAMON_DBGFS as= ks users > to construct all monitoring contexts and start them at once. It's not = a big > problem but makes the operation a little bit complex and unflexible. > > For more flexible usage, DAMON_SYSFS moves the responsibility of preven= ting any > possible interference to the admins and work in a non-exclusive manner.= That > is, users can configure and start contexts one by one. Note that DAMON > respects both exclusive groups and non-exclusive groups of contexts, in= a > manner similar to that of reader-writer locks. That is, if any exclusi= ve > monitoring contexts (e.g., contexts that started via DAMON_DBGFS) are r= unning, > DAMON_SYSFS does not start new contexts, and vice versa. > > Future Plan of DAMON_DBGFS Deprecation > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > > Once this patchset is merged, DAMON_DBGFS development will be frozen. = That is, > we will maintain it to work as is now so that no users will be break. = But, it > will not be extended to provide any new feature of DAMON. The support = will be > continued only until next LTS release. After that, we will drop DAMON_= DBGFS. > > User-space Tooling Compatibility > -------------------------------- > > As DAMON_SYSFS provides all features of DAMON_DBGFS, all user space too= ling can > move to DAMON_SYSFS. As we will continue supporting DAMON_DBGFS until = next LTS > kernel release, user space tools would have enough time to move to DAMO= N_SYSFS. > > The official user space tool, damo[1], is already supporting both DAMON= _SYSFS > and DAMON_DBGFS. Both correctness tests[2] and performance tests[3] of= DAMON > using DAMON_SYSFS also passed. > > [1] https://github.com/awslabs/damo > [2] https://github.com/awslabs/damon-tests/tree/master/corr > [3] https://github.com/awslabs/damon-tests/tree/master/perf > > Complete Git Tree > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > > You can get the complete git tree from > https://git.kernel.org/sj/h/damon/sysfs/patches/v1. > > Sequence of Patches > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > > First two patches (patches 1-2) make core changes for DAMON_SYSFS. The= first > one (patch 1) allows non-exclusive DAMON contexts so that DAMON_SYSFS c= an work > in non-exclusive mode, while the second one (patch 2) adds size of DAMO= N enum > types so that DAMON API users can safely iterate the enums. > > Third patch (patch 3) implements basic sysfs stub for virtual address s= paces > monitoring. Note that this implements only sysfs files and DAMON is no= t > linked. Fourth patch (patch 4) links the DAMON_SYSFS to DAMON so that = users > can control DAMON using the sysfs files. > > Following six patches (patches 5-10) implements other DAMON features th= at > DAMON_DBGFS supports one by one (physical address space monitoring, DAM= ON-based > operation schemes, schemes quotas, schemes prioritization weights, sche= mes > watermarks, and schemes stats). > > Following patch (patch 11) adds a simple selftest for DAMON_SYSFS, and = the > final one (patch 12) documents DAMON_SYSFS. > > SeongJae Park (12): > mm/damon/core: Allow non-exclusive DAMON start/stop > mm/damon/core: Add number of each enum type values > mm/damon: Implement a minimal stub for sysfs-based DAMON interface > mm/damon/sysfs: Link DAMON for virtual address spaces monitoring > mm/damon/sysfs: Support physical address space monitoring > mm/damon/sysfs: Support DAMON-based Operation Schemes > mm/damon/sysfs: Support DAMOS quotas > mm/damon/sysfs: Support schemes prioritization weights > mm/damon/sysfs: Support DAMOS watermarks > mm/damon/sysfs: Support DAMOS stats > selftests/damon: Add a test for DAMON sysfs interface > Docs/admin-guide/mm/damon/usage: Document DAMON sysfs interface > > Documentation/admin-guide/mm/damon/usage.rst | 349 ++- > include/linux/damon.h | 6 +- > mm/damon/Kconfig | 7 + > mm/damon/Makefile | 1 + > mm/damon/core.c | 23 +- > mm/damon/dbgfs.c | 2 +- > mm/damon/reclaim.c | 2 +- > mm/damon/sysfs.c | 2684 +++++++++++++++++= + > tools/testing/selftests/damon/Makefile | 1 + > tools/testing/selftests/damon/sysfs.sh | 306 ++ > 10 files changed, 3364 insertions(+), 17 deletions(-) > create mode 100644 mm/damon/sysfs.c > create mode 100755 tools/testing/selftests/damon/sysfs.sh > --=20 Best Regards! Xin Hao