From patchwork Fri Feb 28 22:03:21 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: SeongJae Park X-Patchwork-Id: 13997206 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 52600C282C6 for ; Fri, 28 Feb 2025 22:03:36 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id D3E7F280003; Fri, 28 Feb 2025 17:03:35 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id CEEC2280001; Fri, 28 Feb 2025 17:03:35 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id B19F7280003; Fri, 28 Feb 2025 17:03:35 -0500 (EST) 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 86D12280001 for ; Fri, 28 Feb 2025 17:03:35 -0500 (EST) Received: from smtpin15.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id 10B9F121366 for ; Fri, 28 Feb 2025 22:03:35 +0000 (UTC) X-FDA: 83170730790.15.1098B06 Received: from tor.source.kernel.org (tor.source.kernel.org [172.105.4.254]) by imf12.hostedemail.com (Postfix) with ESMTP id 8220640006 for ; Fri, 28 Feb 2025 22:03:33 +0000 (UTC) Authentication-Results: imf12.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=Qolasen7; dmarc=pass (policy=quarantine) header.from=kernel.org; spf=pass (imf12.hostedemail.com: domain of sj@kernel.org designates 172.105.4.254 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=1740780213; 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=1YzCRybioufq7zplolrw6tSUnX2tLxgOwfIBlndR6SA=; b=a+ZIRv+Yg6j54FLFpLtsxbME9E3pcVgpOSRXB3UvsG9CJV/Xbsfkaj/fVFEJVCMYxbY0mH xh0ROr3wm7lm0bgB45MAf8/dx1cNcT7Pc04Li9vIzKAT4/twFAigEelWKsVDIvWvv5SLhh DEd+liOu/SePEtbJWBf2XQFyPsLqQzw= ARC-Authentication-Results: i=1; imf12.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=Qolasen7; dmarc=pass (policy=quarantine) header.from=kernel.org; spf=pass (imf12.hostedemail.com: domain of sj@kernel.org designates 172.105.4.254 as permitted sender) smtp.mailfrom=sj@kernel.org ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1740780213; a=rsa-sha256; cv=none; b=8ppmo9QCYt4mTq1GsYgrAqSTBza3lnWD33kTMFhBh8+jtVFPW61XxhVWt6Wl1LZQhG7XfJ 64huwFVj9STtlAqb9SBiGw5mZBG2UQDfvzQc1r0Cnc2o4FCkOTIFUSjksqyZqMR+WPwhg+ OBroMAeqR56ovGvsWyDdCaWQe3aUWZk= Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by tor.source.kernel.org (Postfix) with ESMTP id 3B8596116A; Fri, 28 Feb 2025 22:03:24 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 45DD2C4CEE2; Fri, 28 Feb 2025 22:03:32 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1740780212; bh=WFfBywqImxG6v/56XXskkWPj4/LAxcRbv+8nhLsSUtU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Qolasen77R4AKPul7302i/J/jc8m4WE1xtdK4RjnK3EFxeh9+4t71+pj9Z2eSeEdT woOrrZeEfGUNT2vNx7Gb4lkglQ8b4ISsvdsp/GEW/mG6ru7MgqV4z8JcaKmY2ElFgl 6MwBJQ6yxN+kyFlfctzeiQk0632wQ+iiBriNfSTVX/vy3042/Zg5KS/5v7hGCGS+1r uTRbplH9kcsuqWh5CC2AxegMw8s2Bs3ZrrfnVrWGyDIk1JnP7tVOMoFBP7/FmsNlNF l+4A8q1lKR6HjvEaxmwVujZkk/bHiReBrHC5gUsX37bU6D1LztW1c4Go5Ro/05v2HW RdIpeOQy5BPwQ== From: SeongJae Park To: Cc: SeongJae Park , Andrew Morton , damon@lists.linux.dev, kernel-team@meta.com, linux-kernel@vger.kernel.org, linux-mm@kvack.org Subject: [RFC PATCH v2 1/8] mm/damon: add data structure for monitoring intervals auto-tuning Date: Fri, 28 Feb 2025 14:03:21 -0800 Message-Id: <20250228220328.49438-2-sj@kernel.org> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20250228220328.49438-1-sj@kernel.org> References: <20250228220328.49438-1-sj@kernel.org> MIME-Version: 1.0 X-Rspamd-Server: rspam04 X-Rspamd-Queue-Id: 8220640006 X-Rspam-User: X-Stat-Signature: dxhwu1bozf4ybr519xkp4cwo85uf6kbb X-HE-Tag: 1740780213-553339 X-HE-Meta: U2FsdGVkX19Nk0mYXYw6WB6w/onoPjtMJ+PHKTkNzA5wjFz/xKqfp139aGTsO1nQRXg+rweCaEyMXx+UfPzUkeHr04BGPerpQEZNa6nSw4bsWmHh95p8jEIzBZA6yBh5fuDmPpB2eKFS6vkSROF88MhVcE2VUmy8qNbmGMJDGuvnp/wGrDkNv/Ny8GTWyo3rcOqTSQ2kKjmNtLMThpdqIKxPHSJujBLLyfJ0cre7q2PlgRK8+KY5hMWNaRYGtps5o0/dO7u6p1RZUT0FHW1oYhwq5HGl1tFz7IHmWq8pMFMxso9OVzM0Pqv8LAZFxykBPndfI7Vr532MRdi8QKalo15UgKIujk5mZ+0/5k1Zy3cE+1LceBfrY56cvegOUqE/pCGqums0Z4MBvh5iataUSg185KW3dQHY0bRtVKTeW7mT4mHF5LMekYcEMSQ4vWK9uqbjK99QOJX6q1Nhd28+XebE0X7PN8Cw/pEvDNQfyESc8l0XYm8hzBYoRx+lXvEzhwStBf+f2aha5iI94/eoiUEBq7/o/HHaeEOZcrEo+KXLFLfRenfywrsCoV3nf5QNpwunsajsf7wG+vkrLxcyJfbildzAn7k43INr9jKvIQA8alfLhWrlj3ZY1IrPPsxi8jT4lyLDHwJ+N4N5wAw5844ClHYUNXG7ldlFqew5hqRy6gfH8TjvREgZ/kzUtrT1hC25WGLm/fGc8dCwJ9G0s6lPSP5axFw3WI+7p+aDXN8uqkgbL2mjTXTsQsa44ypLpvB4TUM3MxCIHeQ5ocv9BL1ueEbJ5RFn5kC0fhTP1uOBBRE/DvhdeJGGHeYAdE/+Eu0BCvtohBv4xyIp+3N3qTaP0CELKDF06xRbhvUZykbBPbEqdlas4pPiiXNDSKgYEWFziFG8VmrAOEsbY8VOvw3eW4tHattjQndOO4W+41YPpTdFOTG4Sw1cwPR5ItRhp6hS7u2YvCwpVzSFucw azg2yZ/K AxHGkBz5PfyWIficDnub5x3d6RNtX4gJJIVxosuLZrui78IkBVNH3i9rKffnJw5NQEZr9pbtXhVKnb+KNT0wDNzKt75WC2htPFltFQB6NFda7jejOMIr8lHg7zUSuBRew6mb1Q9SMgPjYk/kVqSIVtgP2etLKreUp75wafq1CITIwODifIr4upuQG8mdJfbm7i8NaSN6QtuEWWXMnkMyo9A/3RkKGY+Twz4qfz6mArK53wYk= X-Bogosity: Ham, tests=bogofilter, spamicity=0.000653, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: Add data structures for DAMON sampling and aggregation intervals automatic tuning that aims specific amount of DAMON-observed access events per snapshot. In more detail, define the data structure for the tuning goal, link it to the monitoring attributes data structure so that DAMON kernel API callers can make the request, and update parameters setup DAMON function to respect the new parameter. Signed-off-by: SeongJae Park --- include/linux/damon.h | 27 +++++++++++++++++++++++++++ mm/damon/core.c | 22 ++++++++++++++++++++++ 2 files changed, 49 insertions(+) diff --git a/include/linux/damon.h b/include/linux/damon.h index 8264e9f1db7e..130c3e01089c 100644 --- a/include/linux/damon.h +++ b/include/linux/damon.h @@ -664,12 +664,38 @@ struct damon_call_control { bool canceled; }; +/** + * struct damon_intervals_goal - Monitoring intervals auto-tuning goal. + * + * @access_bp: Access events observation ratio to achieve in bp. + * @aggrs: Number of aggregations to acheive @access_bp within. + * @min_sample_us: Minimum resulting sampling interval in microseconds. + * @max_sample_us: Maximum resulting sampling interval in microseconds. + * + * DAMON automatically tunes &damon_attrs->sample_interval and + * &damon_attrs->aggr_interval aiming the ratio in bp (1/10,000) of + * DAMON-observed access events to theoretical maximum amount within @aggrs + * aggregations be same to @access_bp. The logic increases + * &damon_attrs->aggr_interval and &damon_attrs->sampling_interval in same + * ratio if the current access events observation ratio is lower than the + * target for each @aggrs aggregations, and vice versa. + * + * If @aggrs is zero, the tuning is disabled and hence this struct is ignored. + */ +struct damon_intervals_goal { + unsigned long access_bp; + unsigned long aggrs; + unsigned long min_sample_us; + unsigned long max_sample_us; +}; + /** * struct damon_attrs - Monitoring attributes for accuracy/overhead control. * * @sample_interval: The time between access samplings. * @aggr_interval: The time between monitor results aggregations. * @ops_update_interval: The time between monitoring operations updates. + * @intervals_goal: Intervals auto-tuning goal. * @min_nr_regions: The minimum number of adaptive monitoring * regions. * @max_nr_regions: The maximum number of adaptive monitoring @@ -689,6 +715,7 @@ struct damon_attrs { unsigned long sample_interval; unsigned long aggr_interval; unsigned long ops_update_interval; + struct damon_intervals_goal intervals_goal; unsigned long min_nr_regions; unsigned long max_nr_regions; }; diff --git a/mm/damon/core.c b/mm/damon/core.c index 4bf8fb4e7ab2..b11595c01c37 100644 --- a/mm/damon/core.c +++ b/mm/damon/core.c @@ -638,6 +638,25 @@ static void damon_update_monitoring_results(struct damon_ctx *ctx, r, old_attrs, new_attrs); } +/* + * damon_valid_intervals_goal() - return if the intervals goal of @attrs is + * valid. + */ +static bool damon_valid_intervals_goal(struct damon_attrs *attrs) +{ + struct damon_intervals_goal *goal = &attrs->intervals_goal; + + /* tuning is disabled */ + if (!goal->aggrs) + return true; + if (goal->min_sample_us > goal->max_sample_us) + return false; + if (attrs->sample_interval < goal->min_sample_us || + goal->max_sample_us < attrs->sample_interval) + return false; + return true; +} + /** * damon_set_attrs() - Set attributes for the monitoring. * @ctx: monitoring context @@ -658,6 +677,9 @@ int damon_set_attrs(struct damon_ctx *ctx, struct damon_attrs *attrs) attrs->sample_interval : 1; struct damos *s; + if (!damon_valid_intervals_goal(attrs)) + return -EINVAL; + if (attrs->min_nr_regions < 3) return -EINVAL; if (attrs->min_nr_regions > attrs->max_nr_regions)