From patchwork Tue Oct 10 01:25:58 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: SeongJae Park X-Patchwork-Id: 13414731 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 8D3C9CD68E4 for ; Tue, 10 Oct 2023 01:26:11 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 01AFA8D0089; Mon, 9 Oct 2023 21:26:11 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id EBCCF8E0002; Mon, 9 Oct 2023 21:26:10 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id C71198D00AA; Mon, 9 Oct 2023 21:26:10 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0015.hostedemail.com [216.40.44.15]) by kanga.kvack.org (Postfix) with ESMTP id B8D138D0089 for ; Mon, 9 Oct 2023 21:26:10 -0400 (EDT) Received: from smtpin23.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id 91E5B1CAAF6 for ; Tue, 10 Oct 2023 01:26:10 +0000 (UTC) X-FDA: 81327810900.23.C54BD6B Received: from ams.source.kernel.org (ams.source.kernel.org [145.40.68.75]) by imf20.hostedemail.com (Postfix) with ESMTP id C2FE01C0005 for ; Tue, 10 Oct 2023 01:26:08 +0000 (UTC) Authentication-Results: imf20.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b="tAWQTp/K"; dmarc=pass (policy=none) header.from=kernel.org; spf=pass (imf20.hostedemail.com: domain of sj@kernel.org designates 145.40.68.75 as permitted sender) smtp.mailfrom=sj@kernel.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1696901169; 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=kVignUki5JZnCPqJilSs5i8raEK8eQaEo1c0T2dA0wQ=; b=nY1OfrFRv+JG/1veug1N7JBWXkhsk+H0XW/CH42eIHvm+VgkFlcGNuuYz/1/+A9oCLR9XY du0E8fLMIKemzCdpCw48VBThidMn0pi7T7kLh/U23c3U+/SZYXNa9+osuBiU+3kqoQ87ek Jquhgfq70TYoHT+MEauHOnwXMjNZP/s= ARC-Authentication-Results: i=1; imf20.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b="tAWQTp/K"; dmarc=pass (policy=none) header.from=kernel.org; spf=pass (imf20.hostedemail.com: domain of sj@kernel.org designates 145.40.68.75 as permitted sender) smtp.mailfrom=sj@kernel.org ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1696901169; a=rsa-sha256; cv=none; b=SXq8+DLVN2It2xa59DCe1VqYeKKOEjAq2hZhZsomkA9XCXGYd1fd81u5Ye+1xQ9rnFdIGK I6Y8f0A+/sMEP59BLD+sVZ93Upd9sz6zE780fGxqSz/42A9bmNM48KcuQxqpt1ErdE8oAp f2B3d/yTDmF+wzqPFR7mn5skXd+/PKU= Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by ams.source.kernel.org (Postfix) with ESMTP id 6138AB80B55; Tue, 10 Oct 2023 01:26:07 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 50667C433C8; Tue, 10 Oct 2023 01:26:06 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1696901166; bh=tkpBuPAHcXxVtnYMQEIhabnoxptCyM9g6IJhkHy1SMg=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=tAWQTp/K52moV1cPuIjdEwQJ611H9Xy78nBYCj90TW3I4Ov5uPdLOFPNqJYK3VXAw +Ll4igPCl10aeRmwGmu+DHjgv08wOmOQnBGquWSiyOwjVkyU5kwz6VG35hAUTxFH8K f8KTLiado7LKukenztqwf8o17fVXIAEb73doXRJgHbgOTxzJN4mVRFatJlxSjI7Bxk qR1+S0Y6NMcIOJdjIMZL7PrPU7rS0HH/3Wh/0Le67RiElATC2oJrBpt8heZ6JaVPDS TVZCQHhFbEQqHjYysEhkeyr2R2d810evFOuASv+otwr6W4Jx3TF3+7v9YBY7zHqMjB uV1ETgeQCVyxw== 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 1/3] mm/damon/sysfs-schemes: do not update tried regions more than one DAMON snapshot Date: Tue, 10 Oct 2023 01:25:58 +0000 Message-Id: <20231010012600.83140-2-sj@kernel.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20231010012600.83140-1-sj@kernel.org> References: <20231010012600.83140-1-sj@kernel.org> MIME-Version: 1.0 X-Rspam-User: X-Rspamd-Server: rspam12 X-Rspamd-Queue-Id: C2FE01C0005 X-Stat-Signature: ep31orqfh5s6onwrcyyhyhqwdd948p3w X-HE-Tag: 1696901168-200364 X-HE-Meta: U2FsdGVkX1+QZJEQ8DK9OrgfFb4Aa4BZfNKWETJ0jKtn1LMa+xyQAyDPCnjtf2NEmE0JX+NBxf4KxcefNPxCwoedZBsDMB0b4FnYIE84B6ptkx5BvoKFM4dzt6PGxkIqm1JMmfgax5kCMMwTpPWfLehVMX2BocwX5c2QfA8PmqMLykuL4Cirkjx05H0zZjTm91ObXEmWCQ70Naeh115bIzRnH62MXTl+80NhwJMTNWxxZHGLP7m/XV3KlBVIINuH3b1+NOke+BjHG61PeQQ45+iggO/Lpbw5/wHmr8fcmMB2Wl1n/xdb0wUgFJJdA3Cpee541tDfMU3EDbsiMlL7G1M1MiW45Phz8pSN9OuEItLuTCtQaqPCogCnH6eNAa2F5YqBZ9NDjYjbkOHQ4hzoEvTWW9QFCs1NVG+SidaSKreJh0Y+9Ynajb4QCUAL/MEN+vE2IbguX+fjzpfCHjC5xBdUhEKpP79nRDrtf2MInFWdumM59cHKMPLMCl0EIn0cU8G++mhbzB8dP433iOeREPxH6DpmZkNTubFzY8sDHbN/lFGbdGLakpmvywQ+gyc4dIHOE5I8q4VKfDYfGr/iV82/z/eN7y8kvGl2xSMglG9e9iS5KJ8V/1A8qPEBtsGf090c+eq6y9/IkAsbmD9CzSEFCm52JPF5yHjIInSzN6Dn41ZjqXOPSLRkEEd/7DV06pdOupeNy4M4i8i19lTFllBOP53aM6G6+2AWTyVH8El5XFFgR/ezMHZ4sksCrGdTvOAYnP18/YbEGPsWKNEjQ9LUWTYtbnP6ONepYvRK8O+JaFbRkYMPgEUpalYuYO+YhD7Lfsac3oFbCLW0zdcEJAi+ArLRFaJU7MNYElamTz9HkRSmXdhNXbiK7qnCmdi/JK0xlnaV4cT6cIavnEju6Wz8hUQZL1vJGSAiOCYyXsGgCuTqCh91ezoFe3ih32jBjePUqjYDQ5rHrg3zidh GqRHP8Cd 8KOPS9jY7Q/0D5QNbkOHyC8/UWtGQrsz5JMBd3CivTPahGsYOskuiwZZZzYnWUgy5nLr2R/MH//fxJJfG7cJnOdAT0W1ib/CetYK4IJuqItZ7eDY6YhOtVrDoJ8trgXV9m72f7SQ8asZkUDFUtycVcdj4tkaotRZccAiENZCg0IBwdNoMWr3HQ47SHamd73X8vL/n8AjgazWs2W/qZNM0b0vCVQTdIotl3u8Wpm5+AOidQCoPU/NaY+0icw== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000064, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: DAMON_SYSFS exposes every DAMON-found region that eligible for applying the scheme action for one aggregation interval. However, each DAMON-based operation scheme has its own apply interval. Hence, for a scheme that having its apply interval much smaller than the aggregation interval, DAMON_SYSFS will expose the scheme regions that applied to more than one DAMON monitoring results snapshots. Since the purpose of DAMON tried regions is exposing single snapshot, this makes no much sense. Track progress of each scheme's tried regions update and avoid the case. Signed-off-by: SeongJae Park --- mm/damon/sysfs-schemes.c | 77 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) diff --git a/mm/damon/sysfs-schemes.c b/mm/damon/sysfs-schemes.c index a7d70b95c4dd..b07a5c544b34 100644 --- a/mm/damon/sysfs-schemes.c +++ b/mm/damon/sysfs-schemes.c @@ -113,11 +113,47 @@ static const struct kobj_type damon_sysfs_scheme_region_ktype = { * scheme regions directory */ +/* + * enum damos_sysfs_regions_upd_status - Represent DAMOS tried regions update + * status + * @DAMOS_TRIED_REGIONS_UPD_IDLE: Waiting for next request. + * @DAMOS_TRIED_REGIONS_UPD_STARTED: Update started. + * @DAMOS_TRIED_REGIONS_UPD_FINISHED: Update finished. + * + * Each DAMON-based operation scheme (&struct damos) has its own apply + * interval, and we need to expose the scheme tried regions based on only + * single snapshot. For this, we keep the tried regions update status for each + * scheme. The status becomes 'idle' at the beginning. + * + * Once the tried regions update request is received, the request handling + * start function (damon_sysfs_scheme_update_regions_start()) sets the status + * of all schemes as 'idle' again, and register ->before_damos_apply() and + * ->after_sampling() callbacks. + * + * Then, the first followup ->before_damos_apply() callback + * (damon_sysfs_before_damos_apply()) sets the status 'started'. The first + * ->after_sampling() callback (damon_sysfs_after_sampling()) after the call + * is called only after the scheme is completely applied + * to the given snapshot. Hence the callback knows the situation by showing + * 'started' status, and sets the status as 'finished'. Then, + * damon_sysfs_before_damos_apply() understands the situation by showing the + * 'finished' status and do nothing. + * + * Finally, the tried regions request handling finisher function + * (damon_sysfs_schemes_update_regions_stop()) unregisters the callbacks. + */ +enum damos_sysfs_regions_upd_status { + DAMOS_TRIED_REGIONS_UPD_IDLE, + DAMOS_TRIED_REGIONS_UPD_STARTED, + DAMOS_TRIED_REGIONS_UPD_FINISHED, +}; + struct damon_sysfs_scheme_regions { struct kobject kobj; struct list_head regions_list; int nr_regions; unsigned long total_bytes; + enum damos_sysfs_regions_upd_status upd_status; }; static struct damon_sysfs_scheme_regions * @@ -130,6 +166,7 @@ damon_sysfs_scheme_regions_alloc(void) INIT_LIST_HEAD(®ions->regions_list); regions->nr_regions = 0; regions->total_bytes = 0; + regions->upd_status = DAMOS_TRIED_REGIONS_UPD_IDLE; return regions; } @@ -1777,6 +1814,10 @@ static int damon_sysfs_before_damos_apply(struct damon_ctx *ctx, return 0; sysfs_regions = sysfs_schemes->schemes_arr[schemes_idx]->tried_regions; + if (sysfs_regions->upd_status == DAMOS_TRIED_REGIONS_UPD_FINISHED) + return 0; + if (sysfs_regions->upd_status == DAMOS_TRIED_REGIONS_UPD_IDLE) + sysfs_regions->upd_status = DAMOS_TRIED_REGIONS_UPD_STARTED; sysfs_regions->total_bytes += r->ar.end - r->ar.start; if (damos_regions_upd_total_bytes_only) return 0; @@ -1793,6 +1834,29 @@ static int damon_sysfs_before_damos_apply(struct damon_ctx *ctx, return 0; } +/* + * DAMON callback that called after each accesses sampling. While this + * callback is registered, damon_sysfs_lock should be held to ensure the + * regions directories exist. + */ +static int damon_sysfs_after_sampling(struct damon_ctx *ctx) +{ + struct damon_sysfs_schemes *sysfs_schemes = + damon_sysfs_schemes_for_damos_callback; + struct damon_sysfs_scheme_regions *sysfs_regions; + int i; + + for (i = 0; i < sysfs_schemes->nr; i++) { + sysfs_regions = sysfs_schemes->schemes_arr[i]->tried_regions; + if (sysfs_regions->upd_status == + DAMOS_TRIED_REGIONS_UPD_STARTED) + sysfs_regions->upd_status = + DAMOS_TRIED_REGIONS_UPD_FINISHED; + } + + return 0; +} + /* Called from damon_sysfs_cmd_request_callback under damon_sysfs_lock */ int damon_sysfs_schemes_clear_regions( struct damon_sysfs_schemes *sysfs_schemes, @@ -1816,6 +1880,16 @@ int damon_sysfs_schemes_clear_regions( return 0; } +static void damos_tried_regions_init_upd_status( + struct damon_sysfs_schemes *sysfs_schemes) +{ + int i; + + for (i = 0; i < sysfs_schemes->nr; i++) + sysfs_schemes->schemes_arr[i]->tried_regions->upd_status = + DAMOS_TRIED_REGIONS_UPD_IDLE; +} + /* Called from damon_sysfs_cmd_request_callback under damon_sysfs_lock */ int damon_sysfs_schemes_update_regions_start( struct damon_sysfs_schemes *sysfs_schemes, @@ -1823,8 +1897,10 @@ int damon_sysfs_schemes_update_regions_start( { damon_sysfs_schemes_clear_regions(sysfs_schemes, ctx); damon_sysfs_schemes_for_damos_callback = sysfs_schemes; + damos_tried_regions_init_upd_status(sysfs_schemes); damos_regions_upd_total_bytes_only = total_bytes_only; ctx->callback.before_damos_apply = damon_sysfs_before_damos_apply; + ctx->callback.after_sampling = damon_sysfs_after_sampling; return 0; } @@ -1837,6 +1913,7 @@ int damon_sysfs_schemes_update_regions_stop(struct damon_ctx *ctx) { damon_sysfs_schemes_for_damos_callback = NULL; ctx->callback.before_damos_apply = NULL; + ctx->callback.after_sampling = NULL; damon_sysfs_schemes_region_idx = 0; return 0; } From patchwork Tue Oct 10 01:25:59 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: SeongJae Park X-Patchwork-Id: 13414732 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 B7D0BCD68E2 for ; Tue, 10 Oct 2023 01:26:13 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 5BD598E0002; Mon, 9 Oct 2023 21:26:11 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 545D580027; Mon, 9 Oct 2023 21:26:11 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 3E7478E000A; Mon, 9 Oct 2023 21:26:11 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0016.hostedemail.com [216.40.44.16]) by kanga.kvack.org (Postfix) with ESMTP id 318358E0002 for ; Mon, 9 Oct 2023 21:26:11 -0400 (EDT) Received: from smtpin21.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay05.hostedemail.com (Postfix) with ESMTP id 043D4404D9 for ; Tue, 10 Oct 2023 01:26:10 +0000 (UTC) X-FDA: 81327810942.21.2FB07F2 Received: from ams.source.kernel.org (ams.source.kernel.org [145.40.68.75]) by imf04.hostedemail.com (Postfix) with ESMTP id 4228C40007 for ; Tue, 10 Oct 2023 01:26:09 +0000 (UTC) Authentication-Results: imf04.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=IV6y0JX+; dmarc=pass (policy=none) header.from=kernel.org; spf=pass (imf04.hostedemail.com: domain of sj@kernel.org designates 145.40.68.75 as permitted sender) smtp.mailfrom=sj@kernel.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1696901169; 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=ZEt4SZ6nWhXI9Pu5fkBbNmR1B5GQg29zXBzEboxveTQ=; b=NvzATl8xr4XUyTmIuVvV4YLGd5RA3S5mEcqTo9G5oQgqA30jqwPx4GVRxsIL2wa4GwiWBf fcIQnxIHdDduxLHrpkygfPzJZnF+3I/jmjRRUgW3dDuVfkHpTA0MLc9nPIKQ1ZODqSHG8M WKVQclUr6ghGmSazfSkz0aJMEeclKXM= ARC-Authentication-Results: i=1; imf04.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=IV6y0JX+; dmarc=pass (policy=none) header.from=kernel.org; spf=pass (imf04.hostedemail.com: domain of sj@kernel.org designates 145.40.68.75 as permitted sender) smtp.mailfrom=sj@kernel.org ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1696901169; a=rsa-sha256; cv=none; b=iX/dfPpB306FLI0OaNpqz1BEev0IUVf76uW3Gps2kxU0s6heO9Gc4GWT7/BKM3gYbDzpru vf71/yMejRgIuVwqJ6+SBQUdie4+DPohjB73xAM/8hiQeTxHQWV5CZv2cSy+xchugd96lK QuQWebQGWBuQB9Fx4+fmLG9SDfpOycI= Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by ams.source.kernel.org (Postfix) with ESMTP id 04798B818AA; Tue, 10 Oct 2023 01:26:08 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id F0390C433CA; Tue, 10 Oct 2023 01:26:06 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1696901167; bh=yWXWsEsp+bNgfqib0es1oavC1e2n/ntLxLviyD7crcg=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=IV6y0JX+4rigSdZUd1hRuiKh2HaDEEjIDljRDMOeW3AB7wxj72XOAJc5kYFlY5w2S 6PJMuETlqeosgA3sjPLApwudm850uFTqJPJ0j4OWEx1F+Pu/1On7KhLpiVnGqjsVJA U919sGnrb5xWyy5fBHtR73Lxdef0AhDjAWfeT2+QjS0hrJAQEBnAVdtA6AphxFOok5 BYhVIM1RMW9qvCFCEvcBK2Pp44sWxKZU62mLlJjSI0foETCl6z0Rxl4fFvX6sbEWw8 5fFJYuZwgmxG5HJcTrU1FXI3VbuRvFTXe9ksDIQHOM/TkM8tFfDcWK54+oYPBBdc1n vUksMtObrMpBg== 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 2/3] mm/damon/sysfs: avoid empty scheme tried regions for large apply interval Date: Tue, 10 Oct 2023 01:25:59 +0000 Message-Id: <20231010012600.83140-3-sj@kernel.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20231010012600.83140-1-sj@kernel.org> References: <20231010012600.83140-1-sj@kernel.org> MIME-Version: 1.0 X-Rspamd-Queue-Id: 4228C40007 X-Rspam-User: X-Rspamd-Server: rspam05 X-Stat-Signature: gisf6urd8wr6xh18m1gii1w7cupyhjf4 X-HE-Tag: 1696901169-51281 X-HE-Meta: U2FsdGVkX19uduSqMVyknSBb+z9XFUXdMbKrF7uR+gqLMUUi465wT0o/+0HuKuqZ99kjhGy5FeKHOkBKUqaIQX4x2vHCe+Fhr/aUtEpKFxWewMUdKnnizjACApJ7pR5/oSLUNvJzJmcR3DDQAgrDiXH2EeqNcWvDMKkKLnIsmjvec0LJqs8Ud1HZaJJZsif9eo6DJlbznDLkOTfdQT6dPJ+oZ5m1jZ9BMWZd86vLJ/SWjh5Zp+Iv2NI+rTBHM3a4NCGqsFrfsWe2n1YARnGywKBiVcwT6XpES7FbGbHZvsvQqhe95WyXZNUw1nXfIttNTaaiiV5smJmZoWkaD2Yi8G4NAXbBi0eUChA2yQozZRFoJpbbQGTuSyunZDbTeLK3vUQ6CEEj6QHLhIE33Q+cPL1ymyye4YJZRMMgND1orsIFjLawIFzYMC4QIiHdSo247yRqHIP7qdFYdC88LrnpQIHV1oAmFLVR13V0rSuqTIqYzlslM/y1G8cLRssOCVfPBwxvXOi1VCPuiYZfDQRa/PJ7ZVJ11fcZ57oP5LVcXsQKq6v/jwM3l2+iOy7yN8HDUwJvcQM39Z9u1LdHlrCyUNMhDs5YZY0mJnwTjm7v7K9UXGNTBizuddfhGu+j0tjRAtb+oaG+ORFRMmofIudfgih/ijeby45FVJfiTTfcwaUV4wbeBP02kY/sbrkwNcFwnn9qj0uWX2oZm1Fpq4zbBKTa/FruQu4lw02VhDCqmzG715ZfwrvHI1hE5E0N2j9VkHyQVWmwU2inmkc+k4z0Z6MCSibnrcWzyrRpVRxJJYJW1qQ5QfOVV2y9Joe9ogz6Ev6xNwf/hGG1F0VpiSDsFLnwNguVvVvGgcwLnWRPIcGEcSZNsYcF0NP1PpfZrN7hlFW8IriujLf5gsMiNkmxUh4ARSLE/e16MelfiGKrIZedTc6ZAUYZCIjViQm8EIurRCTrpstnIxcObbb7F4z O3PoV+B9 2GGX2TDoNpDvWqzd1Ulqlm9YygQNrVAtnXZEMk9NG5bRnficfnAcKxZmWVU6y7Ptmcf9iabBo0v5XGuGD9ea2e35uFKKPd7PLnFa4V1VrSQHh2sM+q3b2vy+m5z+/5Zh4gYQbE7wYDnd7zwcX7eKgoRyWRIaLxc8xXF3Mus5LCQnNtHX3p+HbxbbKc33UgFSg6ICqHdghQngq98XDK87XZa2OcYu8i230Z4wrEBI0xUN5FTfbAhhO7msAFQ== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000014, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: DAMON_SYSFS assumes all schemes will be applied for at least one DAMON monitoring results snapshot within one aggregation interval, or makes no sense to wait for it while DAMON is deactivated by the watermarks. That for deactivated status still makes sense, but the aggregation interval based assumption is invalid now because each scheme can has its own apply interval. For schemes having larger than the aggregation or watermarks check interval, DAMOS tried regions update request can be finished without the update. Avoid the case by explicitly checking the status of the schemes tried regions update and watermarks based DAMON deactivation. Signed-off-by: SeongJae Park --- mm/damon/sysfs-common.h | 2 ++ mm/damon/sysfs-schemes.c | 16 ++++++++++++++++ mm/damon/sysfs.c | 34 ++++++++++++++++++++++++++++++---- 3 files changed, 48 insertions(+), 4 deletions(-) diff --git a/mm/damon/sysfs-common.h b/mm/damon/sysfs-common.h index fd482a0639b4..5ff081226e28 100644 --- a/mm/damon/sysfs-common.h +++ b/mm/damon/sysfs-common.h @@ -49,6 +49,8 @@ int damon_sysfs_schemes_update_regions_start( struct damon_sysfs_schemes *sysfs_schemes, struct damon_ctx *ctx, bool total_bytes_only); +bool damos_sysfs_regions_upd_done(void); + int damon_sysfs_schemes_update_regions_stop(struct damon_ctx *ctx); int damon_sysfs_schemes_clear_regions( diff --git a/mm/damon/sysfs-schemes.c b/mm/damon/sysfs-schemes.c index b07a5c544b34..45bd0fd4a8b1 100644 --- a/mm/damon/sysfs-schemes.c +++ b/mm/damon/sysfs-schemes.c @@ -1904,6 +1904,22 @@ int damon_sysfs_schemes_update_regions_start( return 0; } +bool damos_sysfs_regions_upd_done(void) +{ + struct damon_sysfs_schemes *sysfs_schemes = + damon_sysfs_schemes_for_damos_callback; + struct damon_sysfs_scheme_regions *sysfs_regions; + int i; + + for (i = 0; i < sysfs_schemes->nr; i++) { + sysfs_regions = sysfs_schemes->schemes_arr[i]->tried_regions; + if (sysfs_regions->upd_status != + DAMOS_TRIED_REGIONS_UPD_FINISHED) + return false; + } + return true; +} + /* * Called from damon_sysfs_cmd_request_callback under damon_sysfs_lock. Caller * should unlock damon_sysfs_lock which held before diff --git a/mm/damon/sysfs.c b/mm/damon/sysfs.c index e6b8e90bd450..71bdc51bea6e 100644 --- a/mm/damon/sysfs.c +++ b/mm/damon/sysfs.c @@ -1336,12 +1336,13 @@ static int damon_sysfs_commit_input(struct damon_sysfs_kdamond *kdamond) /* * damon_sysfs_cmd_request_callback() - DAMON callback for handling requests. - * @c: The DAMON context of the callback. + * @c: The DAMON context of the callback. + * @active: Whether @c is not deactivated due to watermarks. * * This function is periodically called back from the kdamond thread for @c. * Then, it checks if there is a waiting DAMON sysfs request and handles it. */ -static int damon_sysfs_cmd_request_callback(struct damon_ctx *c) +static int damon_sysfs_cmd_request_callback(struct damon_ctx *c, bool active) { struct damon_sysfs_kdamond *kdamond; bool total_bytes_only = false; @@ -1373,6 +1374,13 @@ static int damon_sysfs_cmd_request_callback(struct damon_ctx *c) goto keep_lock_out; } } else { + /* + * Continue regions updating if DAMON is till + * active and the update for all schemes is not + * finished. + */ + if (active && !damos_sysfs_regions_upd_done()) + goto keep_lock_out; err = damon_sysfs_upd_schemes_regions_stop(kdamond); damon_sysfs_schemes_regions_updating = false; } @@ -1392,6 +1400,24 @@ static int damon_sysfs_cmd_request_callback(struct damon_ctx *c) return err; } +static int damon_sysfs_after_wmarks_check(struct damon_ctx *c) +{ + /* + * after_wmarks_check() is called back while the context is deactivated + * by watermarks. + */ + return damon_sysfs_cmd_request_callback(c, false); +} + +static int damon_sysfs_after_aggregation(struct damon_ctx *c) +{ + /* + * after_aggregation() is called back only while the context is not + * deactivated by watermarks. + */ + return damon_sysfs_cmd_request_callback(c, true); +} + static struct damon_ctx *damon_sysfs_build_ctx( struct damon_sysfs_context *sys_ctx) { @@ -1407,8 +1433,8 @@ static struct damon_ctx *damon_sysfs_build_ctx( return ERR_PTR(err); } - ctx->callback.after_wmarks_check = damon_sysfs_cmd_request_callback; - ctx->callback.after_aggregation = damon_sysfs_cmd_request_callback; + ctx->callback.after_wmarks_check = damon_sysfs_after_wmarks_check; + ctx->callback.after_aggregation = damon_sysfs_after_aggregation; ctx->callback.before_terminate = damon_sysfs_before_terminate; return ctx; } From patchwork Tue Oct 10 01:26:00 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: SeongJae Park X-Patchwork-Id: 13414733 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 3F8F8CD68E3 for ; Tue, 10 Oct 2023 01:26:16 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 76C7580035; Mon, 9 Oct 2023 21:26:14 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 6F48F80027; Mon, 9 Oct 2023 21:26:14 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 56DCE80035; Mon, 9 Oct 2023 21:26:14 -0400 (EDT) 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 3AE2280027 for ; Mon, 9 Oct 2023 21:26:14 -0400 (EDT) Received: from smtpin01.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id 021A7A047C for ; Tue, 10 Oct 2023 01:26:13 +0000 (UTC) X-FDA: 81327811068.01.2001401 Received: from sin.source.kernel.org (sin.source.kernel.org [145.40.73.55]) by imf15.hostedemail.com (Postfix) with ESMTP id EA0F4A001C for ; Tue, 10 Oct 2023 01:26:11 +0000 (UTC) Authentication-Results: imf15.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=DinnA0mI; spf=pass (imf15.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=1696901172; 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=wWqb5RF5u3LfoSr5/spsiKSMAyxjfAb4rLdwv4pzIqA=; b=bUJ9x53AD5Zk6BNT5QuPBWFLiyAdKyJdEGLyfVT9HHIdk/MBe4/eoPHgWHZqTBataONAKE MFMyMY9S1eeSESfMSosbZN9Osyj3ETWB3cVZtF10+n9FNEDvxQnbj4BIXyT66azBYrrc6Y dZP2VrveBQUis7KE8OVkYT7qn3+sBcc= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1696901172; a=rsa-sha256; cv=none; b=7npQGrlixDcbjNgPEuBwIsgKDRsXkMOBL7RlKLNqGyvZZrvtqKCE5JYxH7o72SS3DlMkyL uwKKtemUDtfyPbHvo7i0vV4ImjeG75d792P0u6iLaQUCDvoioMcKPrgLGz1CheHJlYmP6X UtOqlscbmIP7Z7CdDhGHS5KjfE9ihG8= ARC-Authentication-Results: i=1; imf15.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=DinnA0mI; spf=pass (imf15.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 710A0CE1B62; Tue, 10 Oct 2023 01:26:08 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 93F91C433CD; Tue, 10 Oct 2023 01:26:07 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1696901168; bh=PRMNaWi4eLwEr1ddca0C6ItteLnRKdFxcFRimSLMbuo=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=DinnA0mIa0xXyxJyvyJPWRn0gfhZL4OuTtZEyU3zDNJ24JTTZMqczCXaW2VxkR2HD 9/SCzw1uhvAFQOO25rh75JnffxCNj6eyVIgAoSbetEBVXf7UZoouWyNpUYRhKPVzFL hsXezDNiIK/6jDuO3EJf2XG2trq4vlFHii7KB+umOOp6rlfwtGkO7RikibyFV9WOgB fBwpcMEJb+9ze5Mn8+zY9PMJoZiDp0LrwO/3PNxkdUjxCJ2TVeuVbNIBjl8+upxgTH Mag4Z3w65XlP8fXvzuI0flSiII5ELHCFKiSEEtuzTZqS65EarNJLY/SLDy6g5Xp3Cg LgwoNZvdyVH6Q== From: SeongJae Park To: Cc: SeongJae Park , Andrew Morton , Jonathan Corbet , damon@lists.linux.dev, linux-mm@kvack.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [RFC PATCH 3/3] Docs/admin-guide/mm/damon/usage: update for tried regions update time interval Date: Tue, 10 Oct 2023 01:26:00 +0000 Message-Id: <20231010012600.83140-4-sj@kernel.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20231010012600.83140-1-sj@kernel.org> References: <20231010012600.83140-1-sj@kernel.org> MIME-Version: 1.0 X-Stat-Signature: n49jwjfzqyoyu96kjzsodbixiqbbwopo X-Rspamd-Server: rspam10 X-Rspamd-Queue-Id: EA0F4A001C X-Rspam-User: X-HE-Tag: 1696901171-71154 X-HE-Meta: U2FsdGVkX1/7maMASl/Db6d8a6ajplI3v92tMSJs7p+V91ezLSa62nLXnk3khEVx/0JYty7w7XHR5w3ANuykXYecMxxaiOTDTj5i1eWqjTxHrabFLNZ5Udu2TdmVtfGyHWkOkNsraEAewTNJJjKMQJ+VfTs7H6IMfl1Zi9/P43OFGpMgSsXwYrrV72eBjc/I19arJRhLSa3I8trIDsWWZwxHy9XGQ2IZ3AYKLGDvCpBQ8FisreYWHbPBa9ScaVcpWvoyU5bLbBGuclhMy955U3p45YxU4u05BBJOkigrErTdkmgLuCYyarbltI2Lse3fvRB7xmucKbNLd1z12NNiPQeNG31aM1SQ9VJOV4GXQBpnsRkZeOWPoh/UmwMSkySeHoK4/zpXouzV+5lF6Il40GmF4zLlSpzeCnHuejV9rC7QyrH39REvsBbwfQdrapXWCpMVD/4gnIZjVvCeMvmBYMLlFWTADOGg3wRFoMdMYaT3aDrfXf88xSXLFfwvmBmTs6NcQ0gbQbU4zMNaelxEI1UDbD+PsCyeH2yf2NjeUmESSe7h8bjz2NloH1cQ2bm7zkjrAEtpltYmUrK5uk2Pg+206gEFpaf4gPJTHOx33wp8EBqUcatI4gLjtVdzDY801zz+lVTgy9P23jvAGoj6caSlooXokxTsQOoXjPkPyOh+TS1ZD1rrvSiwAo88zUDcwNMVE6hcJjI6TaU/rUqUediAUEZHl/jRlRjkGnvHREDk8dKKyOhcMPuhh9FodRSnRuAQB9V+8vbZ8SnhDmiO7vvD8wyURO+FYOwbA/enAsoCFxBesBr/iIWFZqH5SFtgdj1l7QCDJIl8ibo9Dn4bS8lt/eCrNEx+Xa3I/WueDYtjI9Wd27kHqwsMm6cvX3BKo3fOAK0Xaj72MynzAJsPhy/DR8feWlftTT7AnRjrjA2pCCvdfeQJtQ9FPEr+XJziuSiQRTGX5xm/aRECA6Z 7xEmO5r+ Mu0X5XpMrIryVJZhosUDRFl5gKVN3Wbu9xe1O2A8o6uc7GiqiLTYPevzuPivYsNTXo3QxIVq3aGQc1K5rOr+0yot3twpnpuOPL6zG+S3KswAXgGI5wGs698kj0aVIYZ3eF7IoZMwuZPtJp2XPVKJHnxg4w/NS7g/WOsvdqko1qyLtvl9k7BJL4H9JSfpOGdGYj71piDuaqnTokqyjrv/sDUduknBfLZyd2gBunoGalcxJ+qYLCZGhPDEBUQ== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000013, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: The documentation says DAMOS tried regions update feature of DAMON sysfs interface is doing the update for one aggregation interval after the request is made. Since the introduction of the per-scheme apply interval, that behavior makes no much sense. Hence the implementation has changed to update the regions for each scheme for only its apply interval. Further update the document to reflect the real behavior. Signed-off-by: SeongJae Park --- Documentation/admin-guide/mm/damon/usage.rst | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Documentation/admin-guide/mm/damon/usage.rst b/Documentation/admin-guide/mm/damon/usage.rst index 8507a6e45d86..da94feb97ed1 100644 --- a/Documentation/admin-guide/mm/damon/usage.rst +++ b/Documentation/admin-guide/mm/damon/usage.rst @@ -432,9 +432,9 @@ that reading it returns the total size of the scheme tried regions, and creates directories named integer starting from ``0`` under this directory. Each directory contains files exposing detailed information about each of the memory region that the corresponding scheme's ``action`` has tried to be applied under -this directory, during next :ref:`aggregation interval -`. The information includes address range, -``nr_accesses``, and ``age`` of the region. +this directory, during next :ref:`apply interval ` of the +corresponding scheme. The information includes address range, ``nr_accesses``, +and ``age`` of the region. Writing ``update_schemes_tried_bytes`` to the relevant ``kdamonds//state`` file will only update the ``total_bytes`` file, and will not create the