From patchwork Sun Nov 12 19:46:03 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: SeongJae Park X-Patchwork-Id: 13453383 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 ADAE8C4332F for ; Sun, 12 Nov 2023 19:46:25 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 6F7AD8D001E; Sun, 12 Nov 2023 14:46:21 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 65A5D8D001F; Sun, 12 Nov 2023 14:46:21 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 3C5978D001E; Sun, 12 Nov 2023 14:46:21 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0013.hostedemail.com [216.40.44.13]) by kanga.kvack.org (Postfix) with ESMTP id 1CB398D001D for ; Sun, 12 Nov 2023 14:46:21 -0500 (EST) Received: from smtpin03.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id EBBA480191 for ; Sun, 12 Nov 2023 19:46:20 +0000 (UTC) X-FDA: 81450333720.03.0C04A52 Received: from sin.source.kernel.org (sin.source.kernel.org [145.40.73.55]) by imf19.hostedemail.com (Postfix) with ESMTP id BA0351A000E for ; Sun, 12 Nov 2023 19:46:18 +0000 (UTC) Authentication-Results: imf19.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b="ilsJm/vr"; spf=pass (imf19.hostedemail.com: domain of sj@kernel.org designates 145.40.73.55 as permitted sender) smtp.mailfrom=sj@kernel.org; dmarc=pass (policy=none) header.from=kernel.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1699818379; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=8jJDnazw4CPbQhsvvDn1i0KylqzCFjmFWUxf5kvsA0k=; b=Jj4mMOFOu6NxusspZSk6WB9YH5Zvef0b7LfMzxYBqoyHqfZkOXv0jt/88lfjxT/P60BdQC GU9bdyFeaClMNzrAQgN1YJu2XaUh9WxvJk7t7pJvvZW0UCMlkli/XHg3rOiDoMeoe4Rj8h p6ip/KGcda3NUwLeBFWwCGNIc05sWpo= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1699818379; a=rsa-sha256; cv=none; b=OE8GMEkIsnNz2j2iEn7h6GZV/nNhXAGZw7V8Pa2hmSabVjYkIufErarLbE0T38kazs23Pg QCK7oHC7ox2nINur69fPXGQgEpVJpPIpht9s81zKXEjhTwsm3xviatPLi4fgRNsXNnEIPN 3SP6SPAIhgaqGZaFO9QdQ7G+Z/k28ow= ARC-Authentication-Results: i=1; imf19.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b="ilsJm/vr"; spf=pass (imf19.hostedemail.com: domain of sj@kernel.org designates 145.40.73.55 as permitted sender) smtp.mailfrom=sj@kernel.org; dmarc=pass (policy=none) header.from=kernel.org Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by sin.source.kernel.org (Postfix) with ESMTP id DB14ACE0F24; Sun, 12 Nov 2023 19:46:15 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 2906DC433C7; Sun, 12 Nov 2023 19:46:15 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1699818375; bh=3hLtCq4IeSzVAzt9xwdt8SFMTkOmxWIve71ZhjNphZs=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=ilsJm/vrsBo6Yu1ARBJXfw+m015LoFYGrGhL/3VpYDAsxMUdX9vYwdMYJDtgee/3r 2BobP/nc2JGuXBqoYQqTNwcHNW5Ul9h5jQBXL8J9jNE/kU9f+YyP4IB3ucA1GKwMF/ aVX7CwYjHhsScSiQ6bEPXWZXfsqDaxSSXIIamlhSeqRsvgt7urc/TcfeDoBssuSlIs 5nsUjlIN3IEX+FEQIB4x0276ygds0KDvX8pHGguetiHuUDPLdMrlnI0JiCa8UY/bm7 Hd5jdrzrPWfkBHm2Us92VOCJDsEJu9z7ez2YSTrZ29EZEOa9USrpWHji/+z1pjDsqj yaPQldDJREiJg== From: SeongJae Park To: Cc: SeongJae Park , Andrew Morton , damon@lists.linux.dev, linux-mm@kvack.org, linux-kernel@vger.kernel.org Subject: [RFC PATCH 4/8] mm/damon/sysfs-schemes: implement a command for scheme quota goals only commit Date: Sun, 12 Nov 2023 19:46:03 +0000 Message-Id: <20231112194607.61399-5-sj@kernel.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20231112194607.61399-1-sj@kernel.org> References: <20231112194607.61399-1-sj@kernel.org> MIME-Version: 1.0 X-Rspamd-Queue-Id: BA0351A000E X-Rspam-User: X-Rspamd-Server: rspam11 X-Stat-Signature: thadgfghbue89fng9pdr5mfad6rctc4e X-HE-Tag: 1699818378-313616 X-HE-Meta: U2FsdGVkX1/7/OsKKwXlv6up+Ir9t8JeFiMibefENasui8EaHmtiY+18Pw/otp/QuoaJbWIwnme0+RRC8QVhBup5r7QE8RvOIrFOOw43MDC2R941itoNK2xRY3Oo/0s/hJ7BI21TqRN/weJ5ILxa1aVm0crLZFhOT+XbwLaJXGy67Ne5bRqmmyFjDerARyi0iE39cyVgJ9ZWwtYMR4VKnIQsV56h3R1ltXsK/+FkwKuRHAD8dSkogxPSSDNgsXElOdv5ljqbjpGQn6vdPnHW7o0ujl6dz+6fJCOzzrqqON9X+kFEqhDODCIFgqJvVTLU0O4rEN42QIF98VhW5DPXo5uPCVpALcLXYVhwO2DZ/a0LcGrcZ+Hzx2gktfw5e+Kk+/cDKxvoLKbFaaFIwY1fnEaTj7kMyoyOt3KaPIllW8T1i/1HgkPaO9+2kh8aF/UcoJZgC2/KaBMFjIDTFgi0N7WYFP+KLwCkrZ43yNpHEshB83s6fPivpD7a9ETDGlnPk2RlFuhV7sSJSssA94iJWYRb/k/3jjR7qDdqW8m8w1xSNC2p+3nHxfvDRa8iEUVj4W/m2VQOvHbS/0I+qNMl70K0Xij5ZbTKVsZxlGMrScOLYyRqrFpbLQv3X3j6pcRiox9EHJlQQVYJkopEismMLiRN0qFP/ZQeXXIRr0chEK0Zy/8LdAs1a7vVV3Co1TLOtm0fp/p26G3l3VYMk3HtHMKDkjyZE+r46epEbOGOyDmfDesUrMoAgTaNGd20XYGonomx1GL09+Ra7/XFtczoMDktV8DHYhEiq6liZkwfom11zxsum+YpSfeZF2GbM37/PUhjG+6zeOJDmX4/WdldAlWllaJUB6NMSmtXeS0bEaJ7e3ARfjoJtPh7uN7zYt9qGLdmpswMVc8ywqC2VSLKFP2tgq/w9Cl//Y3HcaBVTuZhUgVN+xI5JyUvqxbDghQQVMFGy1JevROb5iXXyac bHYzGspM pt8glHW2bRz/V4nA5n6/DA9Zlqw1j3Ol+CFg69wrLe0uK+BL7G6Fxk82CvvOXnW48jlz1acA/I7RoiHiQTy8mHONejiUaJogmV7M/OTuIpDVFJFFgl2udXZW5dUWNKxssscNiU4VyNo2VsHfLks06A3L0+kcFBblFoQWBx1cH30+sd4yMj8L9a8zuFdRivrOXVld8SlZ3FbBEhntpNZ0UIZkY3g2XTv/Bah733w1d+V9guyM= 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: List-Subscribe: List-Unsubscribe: To update DAMOS quota goals, users need to enter 'commit' command to the 'state' file of the kdamond, which reads and commits not only the goals but entire inputs. It is inefficient. Implement yet another 'state' file input command for reading and committing only the scheme quota goals, namely 'commit_schemes_quota_goals'. Signed-off-by: SeongJae Park --- mm/damon/sysfs-common.h | 3 +++ mm/damon/sysfs-schemes.c | 16 ++++++++++++++++ mm/damon/sysfs.c | 27 +++++++++++++++++++++++++++ 3 files changed, 46 insertions(+) diff --git a/mm/damon/sysfs-common.h b/mm/damon/sysfs-common.h index 5ff081226e28..4c37a166eb81 100644 --- a/mm/damon/sysfs-common.h +++ b/mm/damon/sysfs-common.h @@ -56,3 +56,6 @@ int damon_sysfs_schemes_update_regions_stop(struct damon_ctx *ctx); int damon_sysfs_schemes_clear_regions( struct damon_sysfs_schemes *sysfs_schemes, struct damon_ctx *ctx); + +void damos_sysfs_set_quota_scores(struct damon_sysfs_schemes *sysfs_schemes, + struct damon_ctx *ctx); diff --git a/mm/damon/sysfs-schemes.c b/mm/damon/sysfs-schemes.c index 10d8678e48ea..273fb7862fce 100644 --- a/mm/damon/sysfs-schemes.c +++ b/mm/damon/sysfs-schemes.c @@ -1888,6 +1888,22 @@ static void damos_sysfs_set_quota_score( } } +void damos_sysfs_set_quota_scores(struct damon_sysfs_schemes *sysfs_schemes, + struct damon_ctx *ctx) +{ + struct damos *scheme; + int i = 0; + + damon_for_each_scheme(scheme, ctx) { + struct damon_sysfs_scheme *sysfs_scheme; + + sysfs_scheme = sysfs_schemes->schemes_arr[i]; + damos_sysfs_set_quota_score(sysfs_scheme->quotas->goals, + &scheme->quota); + i++; + } +} + static struct damos *damon_sysfs_mk_scheme( struct damon_sysfs_scheme *sysfs_scheme) { diff --git a/mm/damon/sysfs.c b/mm/damon/sysfs.c index 2d31390edfc0..f6952cec9f19 100644 --- a/mm/damon/sysfs.c +++ b/mm/damon/sysfs.c @@ -994,6 +994,11 @@ enum damon_sysfs_cmd { DAMON_SYSFS_CMD_OFF, /* @DAMON_SYSFS_CMD_COMMIT: Update kdamond inputs. */ DAMON_SYSFS_CMD_COMMIT, + /* + * @DAMON_SYSFS_CMD_COMMIT_SCHEMES_QUOTA_GOALS: Commit the quota goals + * to DAMON. + */ + DAMON_SYSFS_CMD_COMMIT_SCHEMES_QUOTA_GOALS, /* * @DAMON_SYSFS_CMD_UPDATE_SCHEMES_STATS: Update scheme stats sysfs * files. @@ -1025,6 +1030,7 @@ static const char * const damon_sysfs_cmd_strs[] = { "on", "off", "commit", + "commit_schemes_quota_goals", "update_schemes_stats", "update_schemes_tried_bytes", "update_schemes_tried_regions", @@ -1351,6 +1357,24 @@ static int damon_sysfs_commit_input(struct damon_sysfs_kdamond *kdamond) kdamond->contexts->contexts_arr[0]); } +static int damon_sysfs_commit_schemes_quota_goals( + struct damon_sysfs_kdamond *sysfs_kdamond) +{ + struct damon_ctx *ctx; + struct damon_sysfs_context *sysfs_ctx; + + if (!damon_sysfs_kdamond_running(sysfs_kdamond)) + return -EINVAL; + /* TODO: Support multiple contexts per kdamond */ + if (sysfs_kdamond->contexts->nr != 1) + return -EINVAL; + + ctx = sysfs_kdamond->damon_ctx; + sysfs_ctx = sysfs_kdamond->contexts->contexts_arr[0]; + damos_sysfs_set_quota_scores(sysfs_ctx->schemes, ctx); + return 0; +} + /* * damon_sysfs_cmd_request_callback() - DAMON callback for handling requests. * @c: The DAMON context of the callback. @@ -1379,6 +1403,9 @@ static int damon_sysfs_cmd_request_callback(struct damon_ctx *c, bool active) case DAMON_SYSFS_CMD_COMMIT: err = damon_sysfs_commit_input(kdamond); break; + case DAMON_SYSFS_CMD_COMMIT_SCHEMES_QUOTA_GOALS: + err = damon_sysfs_commit_schemes_quota_goals(kdamond); + break; case DAMON_SYSFS_CMD_UPDATE_SCHEMES_TRIED_BYTES: total_bytes_only = true; fallthrough;