From patchwork Thu May 11 06:56:04 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Huang, Ying" X-Patchwork-Id: 13237527 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 7F8F8C7EE24 for ; Thu, 11 May 2023 06:56:47 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 199DF6B0075; Thu, 11 May 2023 02:56:47 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 14A776B0078; Thu, 11 May 2023 02:56:47 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 0128C6B007B; Thu, 11 May 2023 02:56:46 -0400 (EDT) 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 E8C746B0075 for ; Thu, 11 May 2023 02:56:46 -0400 (EDT) Received: from smtpin09.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id BE978120133 for ; Thu, 11 May 2023 06:56:46 +0000 (UTC) X-FDA: 80777066412.09.2AC6DFF Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) by imf09.hostedemail.com (Postfix) with ESMTP id A875A140009 for ; Thu, 11 May 2023 06:56:44 +0000 (UTC) Authentication-Results: imf09.hostedemail.com; dkim=pass header.d=intel.com header.s=Intel header.b=ikXFDnVE; spf=pass (imf09.hostedemail.com: domain of ying.huang@intel.com designates 192.55.52.43 as permitted sender) smtp.mailfrom=ying.huang@intel.com; dmarc=pass (policy=none) header.from=intel.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1683788204; 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=v7t5c99eiiGVAeuBaM/yst9Wqsi4Po1p5f3eHfKkmiE=; b=H+1X5EtSUpYoAG36CsUdlG8X2DT5eSAhnWxBbb856h3Bm+rbn3Vu9WcmsH43TZ/rR9KVcR XycodnpVccJeBRzBta8y29k6L+ybgLi48QZhZqka/iiW147bkGmK1Nbwiq+omb8TH2OiJj +oXoQSsFpSQvQzr5tqebg2lli01P/NU= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1683788204; a=rsa-sha256; cv=none; b=PWfKVm4o8gpDIsZljGl9UgX5Sk6de+/NA5YlH/m8J5ORxvNPV14cUaPIr8bRdf4lq83k1R 4og4RZDOcyBYZP7XErA4mPa4zetop68U8pQH5cNnCaeJ9Vqf7RJ8bGO/yaIcOI+K1a0Gpy ouMCHGvx3m6ENxpxsIr39BodQVD0SOg= ARC-Authentication-Results: i=1; imf09.hostedemail.com; dkim=pass header.d=intel.com header.s=Intel header.b=ikXFDnVE; spf=pass (imf09.hostedemail.com: domain of ying.huang@intel.com designates 192.55.52.43 as permitted sender) smtp.mailfrom=ying.huang@intel.com; dmarc=pass (policy=none) header.from=intel.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1683788204; x=1715324204; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=VzbZ9JgdFg4GPHXsQHxo4mdERaeauHzWD3g7U/m1sqc=; b=ikXFDnVERGKthjJ5u/Wqzf4pollZRSe4EapZUQDZPV1ioK/hP9euIUFh 2tbRwoFf/yfwuLZSAz98pVsdnoNF3bqeJ79jQcVpKSTrEdO8amwpLFSRL xp+LV9nHe8Vu+qrMw6lHOqZOpocggrRCVFdi24AdjynqqCp4J8plhUtJl S7DmJG/mr2wvZUsxReOY7TLwKaG4e9/Xx5HX8eDzUEltq9mKwE2XqBq4Y 5RaCpftQhSi8FEIJyYJ8ZHPma7XdIuswkCYT6jye9eYM9FiA6+4Zmv/XJ zrhlqBiQop7ACbii2wqRKbKZQp6Be2A4jD4+qKBJKrggt4GDWjvUwe+a5 w==; X-IronPort-AV: E=McAfee;i="6600,9927,10706"; a="436744508" X-IronPort-AV: E=Sophos;i="5.99,266,1677571200"; d="scan'208";a="436744508" Received: from orsmga004.jf.intel.com ([10.7.209.38]) by fmsmga105.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 10 May 2023 23:56:43 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10706"; a="823855286" X-IronPort-AV: E=Sophos;i="5.99,266,1677571200"; d="scan'208";a="823855286" Received: from chaoyan1-mobl2.ccr.corp.intel.com (HELO yhuang6-mobl2.ccr.corp.intel.com) ([10.255.31.95]) by orsmga004-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 10 May 2023 23:56:40 -0700 From: Huang Ying To: linux-mm@kvack.org Cc: linux-kernel@vger.kernel.org, Arjan Van De Ven , Andrew Morton , Huang Ying , Mel Gorman , Vlastimil Babka , David Hildenbrand , Johannes Weiner , Dave Hansen , Michal Hocko , Pavel Tatashin , Matthew Wilcox Subject: [RFC 3/6] mm: support multiple zone instances per zone type in memory online Date: Thu, 11 May 2023 14:56:04 +0800 Message-Id: <20230511065607.37407-4-ying.huang@intel.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230511065607.37407-1-ying.huang@intel.com> References: <20230511065607.37407-1-ying.huang@intel.com> MIME-Version: 1.0 X-Rspamd-Queue-Id: A875A140009 X-Rspam-User: X-Rspamd-Server: rspam06 X-Stat-Signature: sk9axkex541jbw6fqb6grks93p6mttdb X-HE-Tag: 1683788204-288473 X-HE-Meta: U2FsdGVkX1/Wzyr0tqDIKm7RM2cLf+OfbruSSKE4UTktUHBbygyplRs4alnLMVNp0darvaRW/RTxCXqdXHv0ftmWvE9ej/zydA0JB/O0IdF6LI9pj/b7wN+LwBE5SuJwGsoUw5om52tRAoC1RHiZae0wBxXfe8I1ogcoyC+t8l4DwY6mpgg7R6t23q2go1qmyrHrQk0YjTHjlturB9BX42pEN6W/fDj65VjQ9CQ9fAnj8OZzJbTyRPYsOJc95/pXnOQsGxeDaeVLhflNylf6ai0Ui//he0zHvHm45nxk/tiM3D8Q+zW/dYg+6JVmswTZapHIrNt/zGaXNTF8lq5KvIXl5v6cXsqi0b/P1vJPVv5wjulgPBUu7FcInwdS6TDABnWZpy4VpEyvTY8VYEKyX5AppxbXQxetozMlr/4p8F+U3H1w11KWPdNo3z0sb/QcBq71QjNL22ukpWJesHqj5CEry8dBsjFlaoMxzYCxrD5JKr7Uw/BlA7Sy4ZtMY2lzPHj8E2Wgst+t4kAfLsjjeQWs436/SVbSIri+5aQeM9pN7TAoq+XkMXRiLx/SzOvJXn/5anZ5t9cQnsgOd5v2d4SPilAZfrPyBOZE0gQWnsRIuIOOYkLABvssX5uwGMSnBXimzhFY54kKzQxZ+gOnLh1JMvwJGA0ZiCobPxvPh8MxBzV/18k1LZ4rhBsej76sXY4cZpNg+VqKmRGBf1uApp/+JHeBdXlwIB/WpXTNsbx1JPlJKPLOZensuXHLX8ART4YA9LDX+ByOL3/pOfm4guRxcMEPOsBeuNVKP/IqP74ikE8XbTGmhYxqOo6OL+sjeXPdssIxnmT/3czvGjnfnFWSndFYq7lJhGvG8qWix6aPmL6s7/P/nqImNRzL4O4CvBrnHZ7ETKzt18DOlb70ky/wCO1KVWHaINXu3LKIMWjjm42be7mcCdJIltsjO9yRADSnG7FLLkvogV3cCfS lltNVh8P K/OuvhF+JQAhKLlmItbn3aBJoJA0PVl/NvtlrfPVV8G1AJeP3EtXmuNofRhOxKIU+he3/v+9cCjpWA0N5YOuljq4EF/BC7HPq+m2Ne8N8j0y6I9P6mTRZpR/QcNiWHDFurEFvfmEEajASZxDLoq/iNFbZIVLGRju1DLitXxeaWKzoM1oLqn+QfCcSimBjUZeHMm6q51MAmdPio6XRdUTVIGOiCl7CeS3UGS58K5/FFLrRI0zQRGmnYx26J/v5v1uS3mGdS3Udm9TiFjsmstOSY8j186XWyHc3lbjej+hlG9QrtxIHlE+OZ2Yp/QIK0RGgQbk54Z2F8Wb2YKr+8RdsftgJ6P1bPD3cjtz9uigZf2+JIIrk9TiMgVJWLm2vvk/wdKQ2yt84q32wCoJR2qT29So3tMtfOuhcIGt5 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: Because there will be multiple movable zone instances, when a memory section is onlined to movable zones, a movable zone instance needs to be chosen similar as that for kernel zones. The online target zone instance is chosen based on the zone instance range for both movable and kernel zones. Signed-off-by: "Huang, Ying" Cc: Mel Gorman Cc: Vlastimil Babka Cc: David Hildenbrand Cc: Johannes Weiner Cc: Dave Hansen Cc: Michal Hocko Cc: Pavel Tatashin Cc: Matthew Wilcox --- mm/memory_hotplug.c | 38 ++++++++++++++++++++++++++++++-------- 1 file changed, 30 insertions(+), 8 deletions(-) diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c index 24df4acbeeae..4e7cad6d48dd 100644 --- a/mm/memory_hotplug.c +++ b/mm/memory_hotplug.c @@ -842,11 +842,37 @@ static struct zone *default_kernel_zone_for_pfn(int nid, unsigned long start_pfn if (zone_intersects(zone, start_pfn, nr_pages)) return zone; + if (start_pfn < zone->zone_start_pfn) + return zone; } return &pgdat->node_zones[last_zone_idx(pgdat, ZONE_NORMAL)]; } +/* + * Returns a default movable memory zone for the given pfn range. + */ +static struct zone *default_movable_zone_for_pfn(int nid, unsigned long start_pfn, + unsigned long nr_pages) +{ + struct pglist_data *pgdat = NODE_DATA(nid); + struct zone *zone; + int zid; + + for (zid = start_zone_idx(pgdat, ZONE_MOVABLE); + zid < last_zone_idx(pgdat, ZONE_MOVABLE); + zid++) { + zone = &pgdat->node_zones[zid]; + + if (zone_intersects(zone, start_pfn, nr_pages)) + return zone; + if (start_pfn < zone->zone_start_pfn) + return zone; + } + + return &pgdat->node_zones[last_zone_idx(pgdat, ZONE_MOVABLE)]; +} + /* * Determine to which zone to online memory dynamically based on user * configuration and system stats. We care about the following ratio: @@ -904,7 +930,6 @@ static struct zone *auto_movable_zone_for_pfn(int nid, { unsigned long online_pages = 0, max_pages, end_pfn; struct page *page; - pg_data_t *pgdat; if (!auto_movable_ratio) goto kernel_zone; @@ -953,9 +978,8 @@ static struct zone *auto_movable_zone_for_pfn(int nid, !auto_movable_can_online_movable(nid, group, nr_pages)) goto kernel_zone; #endif /* CONFIG_NUMA */ - pgdat = NODE_DATA(nid); - return &pgdat->node_zones[last_zone_idx(pgdat, ZONE_MOVABLE)]; + return default_movable_zone_for_pfn(nid, pfn, nr_pages); kernel_zone: return default_kernel_zone_for_pfn(nid, pfn, nr_pages); } @@ -965,8 +989,8 @@ static inline struct zone *default_zone_for_pfn(int nid, unsigned long start_pfn { struct zone *kernel_zone = default_kernel_zone_for_pfn(nid, start_pfn, nr_pages); - pg_data_t *pgdat = NODE_DATA(nid); - struct zone *movable_zone = &pgdat->node_zones[last_zone_idx(pgdat, ZONE_MOVABLE)]; + struct zone *movable_zone = default_movable_zone_for_pfn(nid, start_pfn, + nr_pages); bool in_kernel = zone_intersects(kernel_zone, start_pfn, nr_pages); bool in_movable = zone_intersects(movable_zone, start_pfn, nr_pages); @@ -989,13 +1013,11 @@ struct zone *zone_for_pfn_range(int online_type, int nid, struct memory_group *group, unsigned long start_pfn, unsigned long nr_pages) { - pg_data_t *pgdat = NODE_DATA(nid); - if (online_type == MMOP_ONLINE_KERNEL) return default_kernel_zone_for_pfn(nid, start_pfn, nr_pages); if (online_type == MMOP_ONLINE_MOVABLE) - return &pgdat->node_zones[last_zone_idx(pgdat, ZONE_MOVABLE)]; + return default_movable_zone_for_pfn(nid, start_pfn, nr_pages); if (online_policy == ONLINE_POLICY_AUTO_MOVABLE) return auto_movable_zone_for_pfn(nid, group, start_pfn, nr_pages);