From patchwork Thu Nov 30 02:36:46 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: SeongJae Park X-Patchwork-Id: 13473976 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 F03EDC4167B for ; Thu, 30 Nov 2023 02:37:06 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 640766B039C; Wed, 29 Nov 2023 21:37:04 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 5F06E6B039E; Wed, 29 Nov 2023 21:37:04 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 4B7A16B03AD; Wed, 29 Nov 2023 21:37:04 -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 3D63D6B039C for ; Wed, 29 Nov 2023 21:37:04 -0500 (EST) Received: from smtpin01.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id 13F9612027D for ; Thu, 30 Nov 2023 02:37:04 +0000 (UTC) X-FDA: 81513058368.01.8772D83 Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by imf20.hostedemail.com (Postfix) with ESMTP id 7306D1C0019 for ; Thu, 30 Nov 2023 02:37:02 +0000 (UTC) Authentication-Results: imf20.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=TcLL9P8+; dmarc=pass (policy=none) header.from=kernel.org; spf=pass (imf20.hostedemail.com: domain of sj@kernel.org designates 139.178.84.217 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=1701311822; 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=+y0XdEoH84SRvPQ31esO2pBGQn0+moIZB0kK+H5kX9A=; b=XGjOdj0KcmGx5w6bXEmxZ/mPiITNx9vkX05pxrrbxR8HfQGIoR4oiKDTY0VoTJ2W/df8y3 zoWiZterOYNFllZYdDAQfutJ8B/K0tsfXMZNaNL4XayjVkK9ku5ZOg8jvTLfl/2yi77+tT QiRpBdD+CD+xNCAcHlbnSzX4isHVdXw= ARC-Authentication-Results: i=1; imf20.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=TcLL9P8+; dmarc=pass (policy=none) header.from=kernel.org; spf=pass (imf20.hostedemail.com: domain of sj@kernel.org designates 139.178.84.217 as permitted sender) smtp.mailfrom=sj@kernel.org ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1701311822; a=rsa-sha256; cv=none; b=gib6HcllvKh85Z9wxVgEv3OV0zgO1JkgMAA6R0Nsg77vKVFPjg2K1UUic0cSgHjbIwLJ1a F9hsTzoeCOsK80aV28pgge4ewnt2fZeOb5HYZu9s7dwEhaGZ+/sZHozeIBscxiDNaQ8wa5 JNgs88507hvDNv2JrjwRKxGv/yE7nEs= Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by dfw.source.kernel.org (Postfix) with ESMTP id 80B9461920; Thu, 30 Nov 2023 02:37:01 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id F1D64C433D9; Thu, 30 Nov 2023 02:37:00 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1701311821; bh=FMojcAP5QPRX+4T1uzEuLlR/gen6p9qPd+B5RLedtWg=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=TcLL9P8+Oy7ltVM5DiR3gFU7QyJ4fcHcQUswFA5l9LkcNpPDLaI9QY14RyNitoWB1 AteHwdn9YvdZ3w6aJFgIy5DjiYi/B2H31eUsy/Gx1qdvsRKrF9qTYj/yLx5IUHKFjz ajMFnvqGe1TlsBdByvYwU2OHu8YSc0XRyCV0IoDpkGiY8KEdMRVVMzf+65jIALOfcJ XeHnYD6l5pqPhPA1It6KvoYEilCMZ9ixhpVE2VS+POXVvhPTdYGBTWkDQgdVkXk4w8 ZkJuTZNLXXSx7dJyny7Jrr0324rZWw/DA1/74PZpGrXp85Et4yYCRJLm3rIBo/pSOs G3u542rHiHFWg== From: SeongJae Park To: Andrew Morton Cc: SeongJae Park , damon@lists.linux.dev, linux-mm@kvack.org, linux-kernel@vger.kernel.org Subject: [PATCH 3/9] mm/damon/sysfs-schemes: commit damos quota goals user input to DAMOS Date: Thu, 30 Nov 2023 02:36:46 +0000 Message-Id: <20231130023652.50284-4-sj@kernel.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20231130023652.50284-1-sj@kernel.org> References: <20231130023652.50284-1-sj@kernel.org> MIME-Version: 1.0 X-Rspam-User: X-Stat-Signature: 3dsrszipbgdfrmme4x4obbs49yryjs6x X-Rspamd-Server: rspam07 X-Rspamd-Queue-Id: 7306D1C0019 X-HE-Tag: 1701311822-982898 X-HE-Meta: U2FsdGVkX1+CGpMsAr/6esPXodNs9b97QBNC4zQqd6pCchFt6MC9Mkik5n4Z4ejPpilX3pE5fS2jPr3nImklC9Cu1wcu0+IAtcb6e0RRfzQSyHUBe/fEzZmkNQf99R77HK2Y9HUWsr8JidfdT12csvTPs/+noQsFHZ6Y7BL252iAoYM8zZZn1ivsrsjx9Faros7eMqAlfykK27u8uVGchIyVsViVfoCEmIOXLPSrVEoyd2aT5ZYqXyQIUS2GUABH+F5QAXkkIMn7YoGjccp1egKiolTMy3Do9vhmtFM5h4a92fuVwt2o9JXVJ2T5wYB8Y8Khu/BWJIIDlYzqZEWjJZzCoUvtZiei1Pvg6wr8H1kozYKF4maSnrdiv26MWeB+rNTHA4bLRysWBB57S6j5TGsQZkC4Ytcopt44jrY2hYqXFSvEmhIg/hngHydjyc57/AFtRLmV/Glf7h9OSVTyCjixtGvPF+Vo/0ULmCDUec9V9Qf7jvf8poEzS+y94vD73dPA1k76+skOM4oLNuFxErXVLVBm/Ba+FeKV0z5a0/JVTp1ysf4bvJypyruti4Tb/TxsegJxXBjKm9v6xLH1QRkfZXtdS11nebFBA6JNkmBNRXuBwpRKaL0sx9MFe6YZoQrBD2OhnLBxvpP7Ek9GDmtvSZ9BsJeZLKYltfbj0Jha0i9mVayTaB2AHSoCNeBFXRy7eEpaNBvmPBTgFfkZdAm/jEH8g5q+O9ezQRBPZ6dmbakvbZswfmw4uY7TrWHmGq5INhQe8TbqSt3muAFc5miX9teOvZrxgRx0gPiOJvZDxOZrcAG6Mvks1vsAKOm7GQpTE5gvZBQJHQKOxjDqQdJHlQjip1cDfLKIVS76NKhd+m2yU5Um2eqTNc600Yvo07ZlQb6r3HlkEdRhRl+4m79euRdt1YrYzKEJvOqogpi0HBzrN6TnGL7Bhvz6/ELLxtClx9tNgWyD1T5eqaV QDQzthlM gC94NNL8H4J67HpMKW8I2RoLkJ1+nDhCvxRAj2Pj0qKYUUGbmF2x4FvKj63nK4exM4OYa44knfZKWYTRTK2hQPoUCGPee4cnT087SQYL56yrxj7j7hEAdsa7EqCiGiw2hoh/5yhcPgZuTdB5KdQLgazS49d7YBib8U16qrmgxpCDMM63UsqEHoRirEeCiL0bif8Pj1zr+UU8IZjaMJ5jm4mG/ZzG3b/Rn96jgnwLrGliQMuc= 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: Make DAMON sysfs interface to read the user inputs for DAMOS quota goals and pass those to DAMOS, so that the users can use the quota auto-tuning feature. It uses the DAMON sysfs interface's user input commit mechanism, which applies all user inputs for initial starting of DAMON and online input updates, which can be done by writing 'on' and 'commit' to the kdamond's 'state' file, respectively. In other words, the user should periodically write appropriate value to 'current_value' files and 'commit' command to the 'state' file. 'target_value' files could also be similarly updated at any time. Note that the interface is supporting multiple goals while the core logic supports only one goal. DAMON sysfs interface passes only best feedback among the given inputs, to avoid making DAMOS too aggressive. Signed-off-by: SeongJae Park --- mm/damon/sysfs-schemes.c | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/mm/damon/sysfs-schemes.c b/mm/damon/sysfs-schemes.c index e5531dbd4cf1..a7917534ca19 100644 --- a/mm/damon/sysfs-schemes.c +++ b/mm/damon/sysfs-schemes.c @@ -1868,6 +1868,34 @@ static int damon_sysfs_set_scheme_filters(struct damos *scheme, return 0; } +static unsigned long damos_sysfs_get_quota_score(void *arg) +{ + return (unsigned long)arg; +} + +static void damos_sysfs_set_quota_score( + struct damos_sysfs_quota_goals *sysfs_goals, + struct damos_quota *quota) +{ + struct damos_sysfs_quota_goal *sysfs_goal; + int i; + + quota->get_score = NULL; + quota->get_score_arg = (void *)0; + for (i = 0; i < sysfs_goals->nr; i++) { + sysfs_goal = sysfs_goals->goals_arr[i]; + if (!sysfs_goal->target_value) + continue; + + /* Higher score makes scheme less aggressive */ + quota->get_score_arg = (void *)max( + (unsigned long)quota->get_score_arg, + sysfs_goal->current_value * 10000 / + sysfs_goal->target_value); + quota->get_score = damos_sysfs_get_quota_score; + } +} + static struct damos *damon_sysfs_mk_scheme( struct damon_sysfs_scheme *sysfs_scheme) { @@ -1905,6 +1933,8 @@ static struct damos *damon_sysfs_mk_scheme( .low = sysfs_wmarks->low, }; + damos_sysfs_set_quota_score(sysfs_quotas->goals, "a); + scheme = damon_new_scheme(&pattern, sysfs_scheme->action, sysfs_scheme->apply_interval_us, "a, &wmarks); if (!scheme) @@ -1945,6 +1975,8 @@ static void damon_sysfs_update_scheme(struct damos *scheme, scheme->quota.weight_nr_accesses = sysfs_weights->nr_accesses; scheme->quota.weight_age = sysfs_weights->age; + damos_sysfs_set_quota_score(sysfs_quotas->goals, &scheme->quota); + scheme->wmarks.metric = sysfs_wmarks->metric; scheme->wmarks.interval = sysfs_wmarks->interval_us; scheme->wmarks.high = sysfs_wmarks->high;