Received: by 2002:a05:6a10:a0d1:0:0:0:0 with SMTP id j17csp364309pxa; Tue, 4 Aug 2020 07:28:16 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxMBqP8zI03K/hLnCfD3fnfRyOALikC1qk6fj3kUX2HgZQnX55JT235T25IDTqj3z0/WyzU X-Received: by 2002:a17:906:64d7:: with SMTP id p23mr21382670ejn.185.1596551296152; Tue, 04 Aug 2020 07:28:16 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1596551296; cv=none; d=google.com; s=arc-20160816; b=f5ZqVpVkK9BqPTnnmP9VhBjPoBofmHZF4PkTRu5XNu9gCRyEvsME7Fzpnnafqu5KWt hiXJx1CSnK9dWyb+tyRLLTEeVDCJ+yJ/VuAphBw8Ubt/YIeZrTNW3OTmV2n5Nwj62LGR H0AoyeyC18ftgucZWQGQCGSjDGMZSobZttdvXozxISDMiJ0qv7+snmls/cceymhgb7LA OBEw6ZPQY151wb9Evt+G6Jq/ZlUk9xoID7iwh99bXfQgmH8l/5Bqn8ucw+g/9kOdtw4I O0T1szt2SgclGg0LioBv3WnNqOiwxbGb8FEtLCLn3pNSAJp3/RYfyIQm+f5EZ8dbqHho 5QPg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:ironport-sdr:dkim-signature; bh=LiQKOADMtKe5pn8RCn18kPkwfBXnFW7m+d29+Fc9Zi4=; b=qxSQkVOC0Ufu3tH1qg4A2S/yBCs59pzZeqNLcHVM34mAOmzsp06l+N167j/CNMMdi5 dk1RcIHhkm+dW0xFMcNJRg6kh442uR9F848a1dYl/yMKnCIa7xYec/3I+aTO3F3fEln0 8Wq6upfLUo9mpRU/KJ+h2n9H5u/iutbMqBaK3JT7Uwl9UhRNk6nohkenSJoKnR6mjeXi BJE/I/T7s001n8JGIQpHHDz/kwm0jyne1PIWRzFbSBpwxSFKxpcFIxjvkoecDRLNVPic ES9E6Qrgnj8Z2+5DAImnqJQn3/DPzXPS56NfodXFG4BYNdt5Y7B4y4hjtAiyJHWPA8i/ amfg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@amazon.com header.s=amazon201209 header.b=Mm1pKrvv; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=amazon.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id m14si12035508ejc.239.2020.08.04.07.27.45; Tue, 04 Aug 2020 07:28:16 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@amazon.com header.s=amazon201209 header.b=Mm1pKrvv; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=amazon.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729146AbgHDO0f (ORCPT + 99 others); Tue, 4 Aug 2020 10:26:35 -0400 Received: from smtp-fw-2101.amazon.com ([72.21.196.25]:50203 "EHLO smtp-fw-2101.amazon.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728257AbgHDO01 (ORCPT ); Tue, 4 Aug 2020 10:26:27 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amazon.com; i=@amazon.com; q=dns/txt; s=amazon201209; t=1596551187; x=1628087187; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version; bh=LiQKOADMtKe5pn8RCn18kPkwfBXnFW7m+d29+Fc9Zi4=; b=Mm1pKrvv2vBEdlM60wOZ9mPTunDSWO3c8IJhfwNzCjuPEZefChye0bLP NusxolbNpTgc5xuZuFui3ZhNNGunTSds3gsJjoAH91G5PUObkMX4ejtOP xp6QwtVinTrzvrOkjLWpk/j9Z9RImus1EC0gVgrkuGV5tZuj5kgqKsVXY 0=; IronPort-SDR: 60P1wHX2gwFzolCC27003fkmi47XqDvsubYr5QXj32NiaHK8zPkVS8KNssDzOlll1M90pNl9bn icyLnZKxVBng== X-IronPort-AV: E=Sophos;i="5.75,434,1589241600"; d="scan'208";a="45890746" Received: from iad12-co-svc-p1-lb1-vlan2.amazon.com (HELO email-inbound-relay-2a-6e2fc477.us-west-2.amazon.com) ([10.43.8.2]) by smtp-border-fw-out-2101.iad2.amazon.com with ESMTP; 04 Aug 2020 14:26:22 +0000 Received: from EX13MTAUEA002.ant.amazon.com (pdx4-ws-svc-p6-lb7-vlan2.pdx.amazon.com [10.170.41.162]) by email-inbound-relay-2a-6e2fc477.us-west-2.amazon.com (Postfix) with ESMTPS id 9B86DA2333; Tue, 4 Aug 2020 14:26:19 +0000 (UTC) Received: from EX13D31EUA001.ant.amazon.com (10.43.165.15) by EX13MTAUEA002.ant.amazon.com (10.43.61.77) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Tue, 4 Aug 2020 14:26:18 +0000 Received: from u886c93fd17d25d.ant.amazon.com (10.43.161.203) by EX13D31EUA001.ant.amazon.com (10.43.165.15) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Tue, 4 Aug 2020 14:26:02 +0000 From: SeongJae Park To: CC: SeongJae Park , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , Subject: [RFC v14 4/7] mm/damon/schemes: Implement statistics feature Date: Tue, 4 Aug 2020 16:24:27 +0200 Message-ID: <20200804142430.15384-5-sjpark@amazon.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200804142430.15384-1-sjpark@amazon.com> References: <20200804142430.15384-1-sjpark@amazon.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [10.43.161.203] X-ClientProxiedBy: EX13D17UWC004.ant.amazon.com (10.43.162.195) To EX13D31EUA001.ant.amazon.com (10.43.165.15) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: SeongJae Park To tune the DAMON-based operation schemes, knowing how many and how large regions are affected by each of the schemes will be helful. Those stats could be used for not only the tuning, but also monitoring of the working set size and the number of regions, if the scheme does not change the program behavior too much. For the reason, this commit implements the statistics for the schemes. The total number and size of the regions that each scheme is applied are exported to users via '->stat_count' and '->stat_sz' of 'struct damos'. Admins can also check the number by reading 'schemes' debugfs file. The last two integers now represents the stats. To allow collecting the stats without changing the program behavior, this commit also adds new scheme action, 'DAMOS_STAT'. Note that 'DAMOS_STAT' is not only making no memory operation actions, but also does not reset the age of regions. Signed-off-by: SeongJae Park --- include/linux/damon.h | 6 ++++++ mm/damon.c | 13 ++++++++++--- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/include/linux/damon.h b/include/linux/damon.h index df10bd00443e..f02798ac9ec5 100644 --- a/include/linux/damon.h +++ b/include/linux/damon.h @@ -76,6 +76,7 @@ struct damon_target { * @DAMOS_PAGEOUT: Call ``madvise()`` for the region with MADV_PAGEOUT. * @DAMOS_HUGEPAGE: Call ``madvise()`` for the region with MADV_HUGEPAGE. * @DAMOS_NOHUGEPAGE: Call ``madvise()`` for the region with MADV_NOHUGEPAGE. + * @DAMOS_STAT: Do nothing but count the stat. */ enum damos_action { DAMOS_WILLNEED, @@ -83,6 +84,7 @@ enum damos_action { DAMOS_PAGEOUT, DAMOS_HUGEPAGE, DAMOS_NOHUGEPAGE, + DAMOS_STAT, /* Do nothing but only record the stat */ }; /** @@ -94,6 +96,8 @@ enum damos_action { * @min_age_region: Minimum age of target regions. * @max_age_region: Maximum age of target regions. * @action: &damo_action to be applied to the target regions. + * @stat_count: Total number of regions that this scheme is applied. + * @stat_sz: Total size of regions that this scheme is applied. * @list: List head for siblings. * * For each aggregation interval, DAMON applies @action to monitoring target @@ -108,6 +112,8 @@ struct damos { unsigned int min_age_region; unsigned int max_age_region; enum damos_action action; + unsigned long stat_count; + unsigned long stat_sz; struct list_head list; }; diff --git a/mm/damon.c b/mm/damon.c index d6b4181c5d70..d25aeccf7939 100644 --- a/mm/damon.c +++ b/mm/damon.c @@ -212,6 +212,8 @@ static struct damos *damon_new_scheme( scheme->min_age_region = min_age_region; scheme->max_age_region = max_age_region; scheme->action = action; + scheme->stat_count = 0; + scheme->stat_sz = 0; INIT_LIST_HEAD(&scheme->list); return scheme; @@ -993,6 +995,8 @@ static int damos_do_action(struct damon_target *target, struct damon_region *r, case DAMOS_NOHUGEPAGE: madv_action = MADV_NOHUGEPAGE; break; + case DAMOS_STAT: + return 0; default: pr_warn("Wrong action %d\n", action); return -EINVAL; @@ -1017,8 +1021,11 @@ static void damon_do_apply_schemes(struct damon_ctx *c, continue; if (r->age < s->min_age_region || s->max_age_region < r->age) continue; + s->stat_count++; + s->stat_sz += sz; damos_do_action(t, r, s->action); - r->age = 0; + if (s->action != DAMOS_STAT) + r->age = 0; } } @@ -1571,11 +1578,11 @@ static ssize_t sprint_schemes(struct damon_ctx *c, char *buf, ssize_t len) damon_for_each_scheme(s, c) { rc = snprintf(&buf[written], len - written, - "%lu %lu %u %u %u %u %d\n", + "%lu %lu %u %u %u %u %d %lu %lu\n", s->min_sz_region, s->max_sz_region, s->min_nr_accesses, s->max_nr_accesses, s->min_age_region, s->max_age_region, - s->action); + s->action, s->stat_count, s->stat_sz); if (!rc) return -ENOMEM; -- 2.17.1