From patchwork Sun Sep 10 03:40: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: 13378443 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 9A645EEB57B for ; Sun, 10 Sep 2023 03:41:04 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 5703C6B0128; Sat, 9 Sep 2023 23:40:59 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 4D7076B012D; Sat, 9 Sep 2023 23:40:59 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 08FE06B012A; Sat, 9 Sep 2023 23:40:58 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0014.hostedemail.com [216.40.44.14]) by kanga.kvack.org (Postfix) with ESMTP id E38906B0129 for ; Sat, 9 Sep 2023 23:40:58 -0400 (EDT) Received: from smtpin09.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id DF3DBA07CF for ; Sun, 10 Sep 2023 03:40:57 +0000 (UTC) X-FDA: 81219286554.09.2C2AD3B Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by imf16.hostedemail.com (Postfix) with ESMTP id 3CBC6180007 for ; Sun, 10 Sep 2023 03:40:56 +0000 (UTC) Authentication-Results: imf16.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=HksUUdUW; spf=pass (imf16.hostedemail.com: domain of sj@kernel.org designates 139.178.84.217 as permitted sender) smtp.mailfrom=sj@kernel.org; dmarc=pass (policy=none) header.from=kernel.org ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1694317256; a=rsa-sha256; cv=none; b=y+quW2BogHJsGimqPEvjPVnrLXfM+FZI5GRauxGh6KJh1PFWFmQq6GuDFMTWZ4nQ7gzTkP 6ZEF19k4UtRmwetA0oZv4oxPQXLtT3IEcOQZMtRsYWIb20XoxbfOH4icRL0VexL/qrKV6E 34MrTsWv5XOjaIot5eFr3n19sIwLjOM= ARC-Authentication-Results: i=1; imf16.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=HksUUdUW; spf=pass (imf16.hostedemail.com: domain of sj@kernel.org designates 139.178.84.217 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=1694317256; 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=2t01TS72ncdNc0ELBDe2/F8mJ0kdP1VWSrho2UJjBqA=; b=GZ08op+g3wzlHrPMyU63dvsi1yxY/oLe5FcOCVN8iEho0HIrEwipRqIeEbM8REL5bxhipG OPMusDBvr1acSGYx4yyx8Eza+WV6udxSF3IemytZHmeMDU9Dqb4stkU3IeTkD+qtVZ1uWI XzBLhcqHrZH2Kgpg97Z/1ciKBTDpchc= Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id 7462B60C59; Sun, 10 Sep 2023 03:40:55 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id E2A62C43391; Sun, 10 Sep 2023 03:40:54 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1694317255; bh=rUjHOoTpqiE+vomfhnfVsNQY6HBVoYZiR13zlPEqKrs=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=HksUUdUWanh2pIH/SIVi+KtR2Gpkua5pt58Q7EXmTfMRYCH7jaiFAOMfZNHBo42HY z39BHHSJOmBs/f8JKvNW0aPkpOiiMzWKRTfmOTIOLjJb8waymf//tQg5CphaSotpMd /Xz+oETjlqnLKNewbNPDT051K1hoSuHpjd7nOuFQamxyK84TH74GVw/5DSGP9iY+m0 oOf6ozysUwk04FHCgSAISPQ9GSarjemZhdkoPEv+0HpJ/OaGytO4+d/QwY/uTPG4Sy 9upFfCh6680+hjMyr10vq8w2P/tDJE1hwRqJrup3A7YoMVWoKHyfwmafq06KaUvh41 Qb9r1Q6zeXE2g== From: SeongJae Park To: Cc: SeongJae Park , Andrew Morton , damon@lists.linux.dev, linux-mm@kvack.org, linux-kernel@vger.kernel.org Subject: [RFC 6/8] mm/damon/sysfs-schemes: support DAMOS apply interval Date: Sun, 10 Sep 2023 03:40:46 +0000 Message-Id: <20230910034048.59191-7-sj@kernel.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230910034048.59191-1-sj@kernel.org> References: <20230910034048.59191-1-sj@kernel.org> MIME-Version: 1.0 X-Rspamd-Server: rspam08 X-Rspamd-Queue-Id: 3CBC6180007 X-Stat-Signature: z4pagcgdy8tf8ix5iucjxo4ucassmwj4 X-Rspam-User: X-HE-Tag: 1694317256-273490 X-HE-Meta: U2FsdGVkX1+Ei27cerX1Ud+rX1ScH9C64Q9eGWTxHqiVGNhmGUA3+CTNjeV+Y51grOAklkJVBliSuUwtB8z5PFxDS+qZo+BRUVOdCS7ZLQcVZrtl+QQu5cl4MS3wdJA61xJte8uHusM7PTkN4DCLb7nFO7xQtCufmSY8fIyqqm1LNIiUe5ZiXpGCzoxerZYp3W39JWgLxSJo5kmVXxV0xki1YHyDMr8Iah4szdJDLZN5FWAU5iyChOlOCaziT+FYCviTymT71Bz4+0Mx9AflHEyQAjyO2hdMsAkZigbWzKJCcsG745mFDFpWiGO3Qy63Se5yqxk5VF7zuz9NWbJkNyKUn67OuPjf0ILHWOHWLZQcZ27BJlfS9S/i8ekakhZaFqg2/Dk9RMKfNLxzYLpFChMX2olOmPZ8+L1JgP8cVqktQqNlIwIe3jHeEzfKcVJ3LH1yoQOIn2rqi6TSzyk50VcmAgUfEL5gYSodgMBR5AK7BleZDnn4yzfN6mfcVOetIDgCOHtnH501N4tyarCKePZ8ULllxmNIJM4x6hBMaxHYlgj/k5aV7yMv51ZpW8QssymuEK97WF3RY1NmB8U+/QshqcT6ccBZ7a7Oq85UG+sSHlqLCQFxo0XV9qGRSfSe8IUh8ZwPKCRI2osvtNd3bU0lkH+6EqicWdEubVnN6liefKdAZg05OwwBXZL3DiTxpZnRbVrwx++xc7D4Q6XP/uYILVeNzjwvKZ79bOrZEwBG9W78I0jaDCDFj4M6HdKq4OEpHCYuclneRNROBXhGNKwEKhHI6KEYYLr6B/PpWEjWO0TU6ob6nDWrg+zXbLtsMHIYYgzm/N7cPodUOcM5LGpwcHteiHyD6hZyiAm03fKHGj5jTzYa3HQMP92c2Vo/xTadd9H45rzm/TFFM//z0d9flpEePoomuqTxUbeUcdffQVyL/MC5DtANHWtVWJSLxhJ5Q6TRbodHbmVXp9R ECzqHdWM Ht+Jegb3dBf7tPscIel8npTRSqfa9szskkASpIqBL+dorQGu4dEfyHxCPaFVwWzfCFSKEmYNQxRirpQQSTbxflnxKFX/jgJ3C5Ns4hHE0jV7jgFhEij3xOTa/FZ40vWoiIV9EFowf7cOba0tFl8W1lphLHa4teQmU95oa4gILoJsplqkOiJzU3fHhvCP4jNunm/zw8sca8j76qWvwill80to7rkVF6+xsd/RSqQbxDSuLfGSHwHZ0nxb5eM+JgrLHKmNUJ50RMMrmgB8ttYTDtCj0Q7OIn2gLBr9LmU5lPlfvBhCjMW4vKDy/bZKOs9wE3t0Urf+m0B6f9G1pjf12ZrDBRw== 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: Update DAMON sysfs interval to support DAMOS apply intervals. Users can set and get the interval for each scheme in microseconds by writing to and reading from the new sysfs file, 'apply_interval_us', in each scheme sysfs directory. Signed-off-by: SeongJae Park --- mm/damon/sysfs-schemes.c | 38 ++++++++++++++++++++++++++++++++++---- 1 file changed, 34 insertions(+), 4 deletions(-) diff --git a/mm/damon/sysfs-schemes.c b/mm/damon/sysfs-schemes.c index 3d30e85596b0..a7d70b95c4dd 100644 --- a/mm/damon/sysfs-schemes.c +++ b/mm/damon/sysfs-schemes.c @@ -1121,6 +1121,7 @@ struct damon_sysfs_scheme { struct kobject kobj; enum damos_action action; struct damon_sysfs_access_pattern *access_pattern; + unsigned long apply_interval_us; struct damon_sysfs_quotas *quotas; struct damon_sysfs_watermarks *watermarks; struct damon_sysfs_scheme_filters *filters; @@ -1141,7 +1142,7 @@ static const char * const damon_sysfs_damos_action_strs[] = { }; static struct damon_sysfs_scheme *damon_sysfs_scheme_alloc( - enum damos_action action) + enum damos_action action, unsigned long apply_interval_us) { struct damon_sysfs_scheme *scheme = kmalloc(sizeof(*scheme), GFP_KERNEL); @@ -1150,6 +1151,7 @@ static struct damon_sysfs_scheme *damon_sysfs_scheme_alloc( return NULL; scheme->kobj = (struct kobject){}; scheme->action = action; + scheme->apply_interval_us = apply_interval_us; return scheme; } @@ -1353,6 +1355,25 @@ static ssize_t action_store(struct kobject *kobj, struct kobj_attribute *attr, return -EINVAL; } +static ssize_t apply_interval_us_show(struct kobject *kobj, + struct kobj_attribute *attr, char *buf) +{ + struct damon_sysfs_scheme *scheme = container_of(kobj, + struct damon_sysfs_scheme, kobj); + + return sysfs_emit(buf, "%lu\n", scheme->apply_interval_us); +} + +static ssize_t apply_interval_us_store(struct kobject *kobj, + struct kobj_attribute *attr, const char *buf, size_t count) +{ + struct damon_sysfs_scheme *scheme = container_of(kobj, + struct damon_sysfs_scheme, kobj); + int err = kstrtoul(buf, 0, &scheme->apply_interval_us); + + return err ? err : count; +} + static void damon_sysfs_scheme_release(struct kobject *kobj) { kfree(container_of(kobj, struct damon_sysfs_scheme, kobj)); @@ -1361,8 +1382,12 @@ static void damon_sysfs_scheme_release(struct kobject *kobj) static struct kobj_attribute damon_sysfs_scheme_action_attr = __ATTR_RW_MODE(action, 0600); +static struct kobj_attribute damon_sysfs_scheme_apply_interval_us_attr = + __ATTR_RW_MODE(apply_interval_us, 0600); + static struct attribute *damon_sysfs_scheme_attrs[] = { &damon_sysfs_scheme_action_attr.attr, + &damon_sysfs_scheme_apply_interval_us_attr.attr, NULL, }; ATTRIBUTE_GROUPS(damon_sysfs_scheme); @@ -1413,7 +1438,11 @@ static int damon_sysfs_schemes_add_dirs(struct damon_sysfs_schemes *schemes, schemes->schemes_arr = schemes_arr; for (i = 0; i < nr_schemes; i++) { - scheme = damon_sysfs_scheme_alloc(DAMOS_STAT); + /* + * apply_interval_us as 0 means same to aggregation interval + * (same to before-apply_interval behavior) + */ + scheme = damon_sysfs_scheme_alloc(DAMOS_STAT, 0); if (!scheme) { damon_sysfs_schemes_rm_dirs(schemes); return -ENOMEM; @@ -1610,8 +1639,8 @@ static struct damos *damon_sysfs_mk_scheme( .low = sysfs_wmarks->low, }; - scheme = damon_new_scheme(&pattern, sysfs_scheme->action, 0, "a, - &wmarks); + scheme = damon_new_scheme(&pattern, sysfs_scheme->action, + sysfs_scheme->apply_interval_us, "a, &wmarks); if (!scheme) return NULL; @@ -1641,6 +1670,7 @@ static void damon_sysfs_update_scheme(struct damos *scheme, scheme->pattern.max_age_region = access_pattern->age->max; scheme->action = sysfs_scheme->action; + scheme->apply_interval_us = sysfs_scheme->apply_interval_us; scheme->quota.ms = sysfs_quotas->ms; scheme->quota.sz = sysfs_quotas->sz;