Received: by 2002:a05:6a10:9afc:0:0:0:0 with SMTP id t28csp1071296pxm; Wed, 23 Feb 2022 17:21:51 -0800 (PST) X-Google-Smtp-Source: ABdhPJwJga00OKUAlERUV1h//6JG/o2fwb+adSGq6dBStDlThvwTCtzTwfh1dH5hpG6ZUJX7Itha X-Received: by 2002:a63:e42:0:b0:374:7dae:aa98 with SMTP id 2-20020a630e42000000b003747daeaa98mr413701pgo.586.1645665711604; Wed, 23 Feb 2022 17:21:51 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1645665711; cv=none; d=google.com; s=arc-20160816; b=BhiM7lVxWYb+HeNzePBTD54eWTczX9WeMcqbMZbxb/IQBRHpkTCTTXbRMz/ZsgZfCF l1bBLSKjX9OqM/YuZ5K+wd9SYXuQgUrDebYkGtqaX/CNB25fgL/LyhQP0FoBPTOOkBJm oYWDVtdbGnx4qhFhxEaNYFhCwj3oKwwEquF7mXWDP05pUpVxV3rHk29qekKyPA+W6iGI mF6+5ioR9kIMvk0fKvuqIv68KMI2e0rFTByb9BddOoJ8vEaBBoiDJrM2CDKpa1IsYPKX LKUxPwVoKFYd7ZUOAFr9kgJO9LiqoQHuY4fgOZ+gvDie1oh6J4hvluW2bnQAIDM0Y9+j VKag== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from:dkim-signature; bh=jYbwE63nZ7RGpxm53hXFP279eYEpUsbMIlfhE0ed/IM=; b=iBVVRMPNArf9uzPRULOj9GIis5KEyWTVmTjIM16GbKSU6clQoGKQmKQ5YwHF+D8ZBk 8k2pzZ2SgI+7PlxHEYwEitzeAcJ5o3Ng75F+wHYbR8TsN4zglCdtzglxXie0X2NNX0s8 CtW/0DCXIXJ8PqEFVskzLaVCgNIkCgSUmq89PjxOgghlPwCHw2DEPhQELsGJ/zIx65pr TgPYXb09Kw87A/pKsnuDU1HBXlx0tYGrFn3k4H5AIQ7HI5Hxx0dlDvcFkrrUVHUJU1Gm UUtQfW65L+YWRQHjsUfphCpBwQQ7VOp2oXpy8Xb8s959qHh4FQuAK0aQw/LH5XR7uibX SSTQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=gA5a3UNq; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from lindbergh.monkeyblade.net (lindbergh.monkeyblade.net. [2620:137:e000::1:18]) by mx.google.com with ESMTPS id z12si1229606pgr.412.2022.02.23.17.21.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 23 Feb 2022 17:21:51 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:18 as permitted sender) client-ip=2620:137:e000::1:18; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=gA5a3UNq; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 355B11A58C0; Wed, 23 Feb 2022 17:05:47 -0800 (PST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S241797AbiBWPVu (ORCPT + 99 others); Wed, 23 Feb 2022 10:21:50 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:58220 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232357AbiBWPVt (ORCPT ); Wed, 23 Feb 2022 10:21:49 -0500 Received: from dfw.source.kernel.org (dfw.source.kernel.org [IPv6:2604:1380:4641:c500::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 8DCF7A9942; Wed, 23 Feb 2022 07:21:21 -0800 (PST) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id 296CF61767; Wed, 23 Feb 2022 15:21:21 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 95711C340E7; Wed, 23 Feb 2022 15:21:19 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1645629680; bh=VSQR+hx02n7ejqcnmXQ4srcfdfDnZENuxQVT/EaK31A=; h=From:To:Cc:Subject:Date:From; b=gA5a3UNquyhltWkY1aMDYPpOIwRgGUfagIY7vYRNdG4Xtod8tfIuKS+xpOXvqJQHI gzQLOWlrhvPvB4lnQzzqjcWA7W0xSclVmKkrM2Yb3MbkRXNZDxtcdi/bxptpdnx7O6 JA3HZj5mqEk1u1CGAt4Yy1Hx/bq3Vs/BDDIi3r6a9Ii8zHHkXbYi0VtNdDqS213h6+ idlRWwZw+vcis6dNNkOWpJn87whlrGKQYGGzw42jXUEnZ+64c6867nd7whU1LIsLR1 FPiIHdD/3jmcKHekDDGLNHcH7Um7TyOyTEA/ZdS3kSWVo8yFyAWN8rSUV/4uJsWJ8R h6brnx4CXQPDg== From: SeongJae Park To: akpm@linux-foundation.org Cc: corbet@lwn.net, skhan@linuxfoundation.org, rientjes@google.com, xhao@linux.alibaba.com, linux-damon@amazon.com, linux-mm@kvack.org, linux-doc@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org, SeongJae Park Subject: [PATCH 00/12] Introduce DAMON sysfs interface Date: Wed, 23 Feb 2022 15:20:39 +0000 Message-Id: <20220223152051.22936-1-sj@kernel.org> X-Mailer: git-send-email 2.17.1 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-2.3 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI, RDNS_NONE,SPF_HELO_NONE,T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Chages from Previous Version (RFC) ================================== 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 ============ 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 is inefficient, hard to be used, and difficult to be extended. Especially, keeping backward compatibility of user space tools is getting only challenging. 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 interface of DAMON. The idea of the new interface is, using directory hierarchies and having one dedicated file for each value. For a short example, users can 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 │ kdamonds/nr │ │ 0/state,pid │ │ │ contexts/nr │ │ │ │ 0/operations │ │ │ │ │ monitoring_attrs/ │ │ │ │ │ │ intervals/sample_us,aggr_us,update_us │ │ │ │ │ │ nr_regions/min,max │ │ │ │ │ targets/nr │ │ │ │ │ │ 0/pid │ │ │ │ │ │ │ regions/nr │ │ │ │ │ │ │ │ 0/start,end │ │ │ │ │ │ │ │ ... │ │ │ │ │ │ ... │ │ │ │ │ schemes/nr │ │ │ │ │ 0/action │ │ │ │ │ │ access_pattern/ │ │ │ │ │ │ │ sz/min,max │ │ │ │ │ │ │ nr_accesses/min,max │ │ │ │ │ │ │ age/min,max │ │ │ │ │ │ quotas/ms,sz,reset_interval_ms │ │ │ │ │ │ │ weights/sz,nr_accesses,age │ │ │ │ │ │ watermarks/metric,interval_us,high,mid,low │ │ │ │ │ │ stats/nr_tried,sz_tried,nr_applied,sz_applied,qt_exceeds │ │ │ │ │ ... │ │ ... Detailed usage of the files will be described in the final Documentation patch of this patchset. 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 system can run concurrently and interfere somehow. For the reason, DAMON_DBGFS asks 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 preventing 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 exclusive monitoring contexts (e.g., contexts that started via DAMON_DBGFS) are running, DAMON_SYSFS does not start new contexts, and vice versa. Future Plan of DAMON_DBGFS Deprecation ====================================== 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 tooling 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 DAMON_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 ================= You can get the complete git tree from https://git.kernel.org/sj/h/damon/sysfs/patches/v1. Sequence of Patches =================== 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 can work in non-exclusive mode, while the second one (patch 2) adds size of DAMON enum types so that DAMON API users can safely iterate the enums. Third patch (patch 3) implements basic sysfs stub for virtual address spaces monitoring. Note that this implements only sysfs files and DAMON is not 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 that DAMON_DBGFS supports one by one (physical address space monitoring, DAMON-based operation schemes, schemes quotas, schemes prioritization weights, schemes 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 -- 2.17.1