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 588C0C021B2 for ; Tue, 25 Feb 2025 18:14:58 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id C7848280008; Tue, 25 Feb 2025 13:14:57 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id C0112280001; Tue, 25 Feb 2025 13:14:57 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id AA1D4280008; Tue, 25 Feb 2025 13:14:57 -0500 (EST) 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 8B546280001 for ; Tue, 25 Feb 2025 13:14:57 -0500 (EST) Received: from smtpin19.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay07.hostedemail.com (Postfix) with ESMTP id 00E5A161B87 for ; Tue, 25 Feb 2025 18:14:56 +0000 (UTC) X-FDA: 83159268234.19.54CAE81 Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by imf17.hostedemail.com (Postfix) with ESMTP id 409DA4001C for ; Tue, 25 Feb 2025 18:14:55 +0000 (UTC) Authentication-Results: imf17.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=W5kz60Oq; spf=pass (imf17.hostedemail.com: domain of sj@kernel.org designates 139.178.84.217 as permitted sender) smtp.mailfrom=sj@kernel.org; dmarc=pass (policy=quarantine) header.from=kernel.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1740507295; 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=wn6obYPfaXGtnRxibO3JrsPdoYntoKGR+VJCNPrvUuI=; b=vyQ7viiae/FbatJOvFn9is+rsijba3F1WtysNa7ic+pyD4qzyxbkjEoGSYOU897HsBlBB4 SMnTpOkpvDF0+DzGhQ6D5MkycxSY9l8qT69Jkfw2RtybDy1XjZn7XzHzjI9EexCq8IbI5N //J90bAUzV1nKolC0zQZfuB0P7dRAzE= ARC-Authentication-Results: i=1; imf17.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=W5kz60Oq; spf=pass (imf17.hostedemail.com: domain of sj@kernel.org designates 139.178.84.217 as permitted sender) smtp.mailfrom=sj@kernel.org; dmarc=pass (policy=quarantine) header.from=kernel.org ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1740507295; a=rsa-sha256; cv=none; b=of4R4J2bO0phuydFJ9HspV7AJxJbiuZRoETfvsMlNebiS+zS3q0eGMCOEy0OH9qqzaofW+ bWYChtpDw5/NePLrTTBDwi3Kvl/MVewkJyD0+SBFMAYi1yY7ibdL/ca2pdPJpzoYFWsI8+ hwq3G0htbw+j47cQVe7N9PDcaz474as= Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by dfw.source.kernel.org (Postfix) with ESMTP id 36B3B5C5544; Tue, 25 Feb 2025 18:14:15 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id A66D6C4CEE8; Tue, 25 Feb 2025 18:14:53 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1740507293; bh=//nOCamXGgyx9bCOhPoJsE2m/2aVtCeY7wDIhK+pfZg=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=W5kz60OqgePrRwVEQls5r2LtWStdAux2aZOZeCLggSe6nGNvJz+GpEZLZBV7EES9A yA+BPHFeBzPhqZ60FwW9ujLk2G1MRf/+oMaxOnL+KEjK4Pp43cUIcbYTWndABkjisG 7HKdAHEHYNv6UbJ+JCjNkscaS3DMlByiECxoh0iZInDPZaFskL2+7LslgZAy19zxJo k/eLJK3mBdCY5LTci4oy/d3BktZ0tCTck1KGtO+69BfLyWUzRXxWpYUujDcSD1bMnW ugmGvGHF1nfM4wS9nNUjTAgLGvzZH8oVwnNLP5D0NjdEQi3/kW2rOcE5qsyGujFYP7 aj0Gef4tpEOvw== From: SeongJae Park To: SeongJae Park Cc: Andrew Morton , damon@lists.linux.dev, kernel-team@meta.com, linux-kernel@vger.kernel.org, linux-mm@kvack.org Subject: Re: [RFC PATCH 2/8] mm/damon/core: implement intervals auto-tuning Date: Tue, 25 Feb 2025 10:14:49 -0800 Message-Id: <20250225181449.3008-1-sj@kernel.org> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20250213014438.145611-3-sj@kernel.org> References: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Rspam-User: X-Rspamd-Server: rspam09 X-Rspamd-Queue-Id: 409DA4001C X-Stat-Signature: 4kf6bj84u7bi1dg8193dauasmxss9wsk X-HE-Tag: 1740507295-365344 X-HE-Meta: U2FsdGVkX1/Wa8SIx8GWEnSXlaaJ8+XZkOXS/tYFycEIkuSumT9GIO+f3AxRjWYJWSrMm2d7muxxPzMagJPNtDL/KCr5mlWOykNtlSXT+Iezs9EdZojOw7AS2o0GXO/LtCAYoriInYYbS1VyWDmnDjVJe7er1wmbOF2CUbcCdiT516je3tZNouhhoRQtzWYIFnVbwEKFqrGabJB6EQA7HTcOTTitXp8VCT7dRcUwDcOtYyvd6KmdTyfBiPMqKF62z9orMmZKsUmu+bXhA8uW+0+J9Prr7u2CwsTE+IggSUvE5zvPJoQKvieszOM0OrJz68yhkXaHSirxmTrAgVe+UAmd2ombNSqYdNbsJGnGBan//8LnMhX2na2I6zizrqAwWxwEiducXYdLMOdkQ5Yy9E2+ykV2QCW0lPfloggQoujkXxv0xQ5fk71jYMKEkUixtKaotMPIh1amOW97qdRFTAeUKJGJXDd/lZCyehc2xfs5fS8O1H18qwBChNj3q8KhdA/uw+Pl779K5CpZqjZHGtUXPT4mBo4B5PPjlFYC56qrA6fTe02RXLuJmwHX16NatTF+PKZtiodZ7L0ktAoBryCuiTlXrKefLwKF30iElnHsIVE6TPGtDKdR+64g4g3Tk/9HUhxF/N7iI3PpgbCTYtQZQLBwVjAOo8NJpbEXKeN0P5S7ZPvyGVBVqsQkEau93TWIH1VfyVeQTeHMZnl07Ew5XvRWMMSOL+SJ9+FM9NVvYGbybtnGiivq+fxSIVYzfPghUrIvr6g6hHXeZTy4gdi9sLqr492Yu9sVZKKe7o8dvcNXc56/nxqjhba+n8W52YkI1NBzfOiKAJMcR2AdzvZtWE7ogd+9EZPmojlmqzxZXF3dI5+JQMUSvLaYdPieYEjYI+oRocUDCCnLPG+bE6lWDtUqBZgSpmvfJWexkEoGGrWOCDNqf1Dnnl5/k9ParO3XJzqhezwbIJa0cC+ dmFfj3kA v1FnWJgYVptXwKAwDij6lmNUO143QsfJJ/JLPkOfSl52Ci6I6Ur5jFziIoRBn7lprfM70Ie4ha2Yj0Qxy7uDD7ZxXdT9KL/0kCbOgzjwaW4+tI0Nft84pSJjRZaMGlpTya4jVVnxss26BVJt0AoUD7gHxoIB6o/W/owWzmutnuZ9nn0PprZx28NT4stxSfTkhNd6gH+xJQ0RXc8tMiLPqvs1R29tWcWYCAi57IgBLDjZhHVw= 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: On Wed, 12 Feb 2025 17:44:32 -0800 SeongJae Park wrote: > Implement the DAMON sampling and aggregation intervals auto-tuning > mechanism as designed on the cover letter of this patch series. The > mechanism reuses the feedback loop function for DAMOS quotas > auto-tuning. Unlike the DAMOS quotas auto-tuning use case, limit the > maximum decreasing amount after the adjustment to 50% of the current > value. This is because the intervals have no good merits at rapidly > reducing, and it is assumed the user will set the range of tunable > values not very wide. > > Signed-off-by: SeongJae Park > --- > include/linux/damon.h | 16 ++++++++++ > mm/damon/core.c | 68 +++++++++++++++++++++++++++++++++++++++++++ > 2 files changed, 84 insertions(+) [...] > diff --git a/mm/damon/core.c b/mm/damon/core.c > index 2fad800271a4..227bdb856157 100644 > --- a/mm/damon/core.c > +++ b/mm/damon/core.c [...] > +static unsigned long damon_get_intervals_adaptation_bp(struct damon_ctx *c) > +{ > + struct damon_target *t; > + struct damon_region *r; > + unsigned long nr_regions = 0, access_samples = 0; > + struct damon_intervals_goal *goal = &c->attrs.intervals_goal; > + unsigned long max_samples, target_samples, score_bp; > + unsigned long adaptation_bp; > + > + damon_for_each_target(t, c) { > + nr_regions = damon_nr_regions(t); This should use '+=' instead of '='. > + damon_for_each_region(r, t) > + access_samples += r->nr_accesses; > + } > + max_samples = nr_regions * c->attrs.aggr_samples; > + target_samples = max_samples * goal->samples_bp / 10000; > + score_bp = access_samples * 10000 / target_samples; > + adaptation_bp = damon_feed_loop_next_input(100000000, score_bp) / > + 10000; > + /* > + * adaptaion_bp ranges from 1 to 20,000. Avoid too rapid reduction of > + * the intervals by rescaling [1,10,000] to [5000, 10,000]. > + */ > + if (adaptation_bp <= 10000) > + adaptation_bp = 5000 + adaptation_bp / 2; > + > + return adaptation_bp; > +} [...] > @@ -2204,6 +2262,8 @@ static void kdamond_init_intervals_sis(struct damon_ctx *ctx) > ctx->next_aggregation_sis = ctx->attrs.aggr_interval / sample_interval; > ctx->next_ops_update_sis = ctx->attrs.ops_update_interval / > sample_interval; > + ctx->next_intervals_tune_sis = ctx->next_aggregation_sis * > + ctx->attrs.intervals_goal.aggrs; > > damon_for_each_scheme(scheme, ctx) { > apply_interval = scheme->apply_interval_us ? > @@ -2290,6 +2350,14 @@ static int kdamond_fn(void *data) > if (ctx->passed_sample_intervals >= next_aggregation_sis) { > ctx->next_aggregation_sis = next_aggregation_sis + > ctx->attrs.aggr_interval / sample_interval; > + if (ctx->attrs.intervals_goal.aggrs && > + ctx->passed_sample_intervals >= > + ctx->next_intervals_tune_sis) { > + ctx->next_intervals_tune_sis += > + ctx->attrs.aggr_samples * > + ctx->attrs.intervals_goal.aggrs; > + kdamond_tune_intervals(ctx); > + } kdamond_tune_intervals() may increase ctx->next_aggregation_sis inside damon_set_attrs(). So it should be called before the above ctx->next_ops_update_sis update. > > kdamond_reset_aggregated(ctx); > kdamond_split_regions(ctx); > -- > 2.39.5 > Thanks, SJ