Received: by 2002:a25:868d:0:0:0:0:0 with SMTP id z13csp2593785ybk; Mon, 18 May 2020 03:07:33 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwpVeIYA0wW3FlJWTDraLjGljR+5lLNQPFu4/znFBUXvlMnDiH86gE0jP/rAbOt2o7N/ttc X-Received: by 2002:a50:fb10:: with SMTP id d16mr1735466edq.46.1589796453129; Mon, 18 May 2020 03:07:33 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1589796453; cv=none; d=google.com; s=arc-20160816; b=dYHwXQ8RnKtZsGXT+xYR1+zfvPbEk+r3deCtWHYAwGvon93n+gMa/y4KXh+rbauGr7 I/Bs44n9cLO19OIh0rppXnP9gjuK1lNjaZYxfeeuS3LbnhbnioqhjL1hWnqw+39qhUJM gGXYMNqlqHdhr7h5Bkf4ZFWXXLTQerxr5OCm4jCAOM4ixAgvC11fvDIxuH9+TKiL+cg4 4N0YMQJHHqwd2b0dPTGw6pij5qaiZn278rrVl7Jfn1TeKrqvtIx573ao0bktt7sICrPF JLVnP271dTyw0J/2+CTeHuK9nnut21vwW06NHRO0ZlHOgMl8C/Y5lF3GSWQBtZvu9kPd 6fQQ== 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=fovQ16L+stcdrxZLgubG+D9JSvkNCqpwdVSTbsWqGSk=; b=PlJW1ilMqI40wTCCEQvfJX3neUr1ac7edUpD0iP1cLqd7z6pNIIzL41EMX+krfNjuO 3FACSxDoFRXRzXOXGrCU8+eUTf1upQMtTzGsey3fPCINzZTNZiKiDFnMViJ826K+H371 fD4FLF+0mQZ10MgQ0ZHCHABrnCAPFbuk6QU8/uF4gMZtJv2/cuzSKo0EXxtCZnTm0JFk 7hAknxmbtgaHC/723ScDmqC94cclQeEz5wNqy1NrRSXPGz07PjlBtxah0l79l/8EyZ3J mcueonN4ubdqNZpuZd+I7ThKeFukTaJcHUv7F1FF1kd+1OOXwSLchu0dWCb38T9eg3DO NNmA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@amazon.com header.s=amazon201209 header.b=QHkYza8I; 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 n16si6495658edv.252.2020.05.18.03.07.08; Mon, 18 May 2020 03:07:33 -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=QHkYza8I; 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 S1726876AbgERKFV (ORCPT + 99 others); Mon, 18 May 2020 06:05:21 -0400 Received: from smtp-fw-9102.amazon.com ([207.171.184.29]:49652 "EHLO smtp-fw-9102.amazon.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726274AbgERKFU (ORCPT ); Mon, 18 May 2020 06:05:20 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amazon.com; i=@amazon.com; q=dns/txt; s=amazon201209; t=1589796320; x=1621332320; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version; bh=fovQ16L+stcdrxZLgubG+D9JSvkNCqpwdVSTbsWqGSk=; b=QHkYza8IY5WYYXJDNDB8/L6PyG4bK6CM1+DlfvY73ZaJXj2Be9TWsz9/ ADpbaU+y06sXcnRro5NhsJxaJkXQCh0XjYQp6GGSj1obGFuEZVV5RutOo Yu0h77JxA9Dyga8tRKMFI5rDn5Yj8cHRXv/eRs1c3wp1W86ZTlV57qOAq w=; IronPort-SDR: 3lposJMuKVyCpsEMqUrjgdlwAlAVRHMJKcJp84bC+EwnzqvOmPc8k5/eixyb14KMVKVdswhMHl IQvKAmHLs2jQ== X-IronPort-AV: E=Sophos;i="5.73,406,1583193600"; d="scan'208";a="44034842" Received: from sea32-co-svc-lb4-vlan3.sea.corp.amazon.com (HELO email-inbound-relay-1a-16acd5e0.us-east-1.amazon.com) ([10.47.23.38]) by smtp-border-fw-out-9102.sea19.amazon.com with ESMTP; 18 May 2020 10:05:16 +0000 Received: from EX13MTAUEA002.ant.amazon.com (iad55-ws-svc-p15-lb9-vlan2.iad.amazon.com [10.40.159.162]) by email-inbound-relay-1a-16acd5e0.us-east-1.amazon.com (Postfix) with ESMTPS id F3738A24A3; Mon, 18 May 2020 10:05:04 +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; Mon, 18 May 2020 10:05:04 +0000 Received: from u886c93fd17d25d.ant.amazon.com (10.43.160.90) by EX13D31EUA001.ant.amazon.com (10.43.165.15) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Mon, 18 May 2020 10:04:48 +0000 From: SeongJae Park To: CC: SeongJae Park , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , Subject: [PATCH v12 06/16] mm/damon: Split regions into 3 subregions if necessary Date: Mon, 18 May 2020 12:00:08 +0200 Message-ID: <20200518100018.2293-7-sjpark@amazon.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200518100018.2293-1-sjpark@amazon.com> References: <20200518100018.2293-1-sjpark@amazon.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [10.43.160.90] X-ClientProxiedBy: EX13D04UWA003.ant.amazon.com (10.43.160.212) 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 Suppose that there are a very wide and cold region and a hot region, and both regions are identified by DAMON. And then, the middle small region inside the very wide and cold region becomes hot. DAMON will not be able to identify this new region because the adaptive regions adjustment mechanism splits each region to only two subregions. This commit modifies the logic to split each region to 3 subregions if such corner case is detected. Suggested-by: James Cameron Signed-off-by: SeongJae Park --- mm/damon.c | 51 ++++++++++++++++++++++++++++++++++----------------- 1 file changed, 34 insertions(+), 17 deletions(-) diff --git a/mm/damon.c b/mm/damon.c index 6c9581104caf..bbd5b1d921da 100644 --- a/mm/damon.c +++ b/mm/damon.c @@ -650,26 +650,32 @@ static void damon_split_region_at(struct damon_ctx *ctx, damon_insert_region(new, r, damon_next_region(r)); } -/* Split every region in the given task into two randomly-sized regions */ -static void damon_split_regions_of(struct damon_ctx *ctx, struct damon_task *t) +/* Split every region in the given task into 'nr_subs' regions */ +static void damon_split_regions_of(struct damon_ctx *ctx, + struct damon_task *t, int nr_subs) { struct damon_region *r, *next; - unsigned long sz_orig_region, sz_left_region; + unsigned long sz_region, sz_sub = 0; + int i; damon_for_each_region_safe(r, next, t) { - sz_orig_region = r->vm_end - r->vm_start; - - /* - * Randomly select size of left sub-region to be at least - * 10 percent and at most 90% of original region - */ - sz_left_region = ALIGN_DOWN(damon_rand(1, 10) * sz_orig_region - / 10, MIN_REGION); - /* Do not allow blank region */ - if (sz_left_region == 0 || sz_left_region >= sz_orig_region) - continue; - - damon_split_region_at(ctx, r, sz_left_region); + sz_region = r->vm_end - r->vm_start; + + for (i = 0; i < nr_subs - 1 && + sz_region > 2 * MIN_REGION; i++) { + /* + * Randomly select size of left sub-region to be at + * least 10 percent and at most 90% of original region + */ + sz_sub = ALIGN_DOWN(damon_rand(1, 10) * + sz_region / 10, MIN_REGION); + /* Do not allow blank region */ + if (sz_sub == 0 || sz_sub >= sz_region) + continue; + + damon_split_region_at(ctx, r, sz_sub); + sz_region = sz_sub; + } } } @@ -687,14 +693,25 @@ static void kdamond_split_regions(struct damon_ctx *ctx) { struct damon_task *t; unsigned int nr_regions = 0; + static unsigned int last_nr_regions; + int nr_subregions = 2; damon_for_each_task(t, ctx) nr_regions += nr_damon_regions(t); + if (nr_regions > ctx->max_nr_regions / 2) return; + /* If number of regions is not changed, we are maybe in corner case */ + if (last_nr_regions == nr_regions && + nr_regions < ctx->max_nr_regions / 3) + nr_subregions = 3; + damon_for_each_task(t, ctx) - damon_split_regions_of(ctx, t); + damon_split_regions_of(ctx, t, nr_subregions); + + if (!last_nr_regions) + last_nr_regions = nr_regions; } /* -- 2.17.1