From mboxrd@z Thu Jan 1 00:00:00 1970 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 8BC2BC77B7C for ; Fri, 12 May 2023 03:45:45 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id E1AF06B0071; Thu, 11 May 2023 23:45:44 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id DA5546B0074; Thu, 11 May 2023 23:45:44 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id C46A86B0075; Thu, 11 May 2023 23:45:44 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0016.hostedemail.com [216.40.44.16]) by kanga.kvack.org (Postfix) with ESMTP id AEE946B0071 for ; Thu, 11 May 2023 23:45:44 -0400 (EDT) Received: from smtpin09.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay07.hostedemail.com (Postfix) with ESMTP id EA168160E2D for ; Fri, 12 May 2023 03:45:43 +0000 (UTC) X-FDA: 80780213766.09.580BB8B Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by imf21.hostedemail.com (Postfix) with ESMTP id 338761C0005 for ; Fri, 12 May 2023 03:45:39 +0000 (UTC) Authentication-Results: imf21.hostedemail.com; dkim=pass header.d=linux-foundation.org header.s=korg header.b=Wat+W9u7; spf=pass (imf21.hostedemail.com: domain of akpm@linux-foundation.org designates 139.178.84.217 as permitted sender) smtp.mailfrom=akpm@linux-foundation.org; dmarc=none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1683863140; 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-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=Y7D/QUqEPXW5xWZ9A7+nmlf8+l4WtjEdB00FgoRw0NU=; b=ItkthH6kqCJPGKicltA+SvghnBhdhUiKQ4N3Ysj3X3RX23bePp1+5beeH51OTMqlh6sX0/ s3gsNbiLP+9AJ9utOqnFlDt+jqda8frwRkGdB7FvYXBVpQVf6m2BfIw/EHdjB15u/WTZCc GWEo3QKR7n8C38F2w3EqMreOI+GPdZA= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1683863140; a=rsa-sha256; cv=none; b=dKy1+SLUGZlDUv6eL3cPZK6ExtVTIfoI+vu4XKJUOP2+vOKaWSLlyIQIwZKBwfwEpecOo/ VauGAuqynZKSjG5fHRQ0SfMaEsvqNd9JsiLgk3eub1JPZGqv7t9jPYvUgJPft8Mivmov8P 9Ba/ZSkfuw6wubX/Rrn55IG7YSuCCgY= ARC-Authentication-Results: i=1; imf21.hostedemail.com; dkim=pass header.d=linux-foundation.org header.s=korg header.b=Wat+W9u7; spf=pass (imf21.hostedemail.com: domain of akpm@linux-foundation.org designates 139.178.84.217 as permitted sender) smtp.mailfrom=akpm@linux-foundation.org; dmarc=none Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id 4587C64EB2; Fri, 12 May 2023 03:45:39 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 843E0C433D2; Fri, 12 May 2023 03:45:38 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linux-foundation.org; s=korg; t=1683863138; bh=aIainonip+qTHVAfBQeJ+FebP9eJUCWa2fFmARG9MoA=; h=Date:From:To:Cc:Subject:In-Reply-To:References:From; b=Wat+W9u7v76FAeSneppv2rF+l0B07wJ5+3MKSB7M8HkAYZ9iLOEgX5wgJgL8LWbJ4 1cswwltkjvb94Tn+euoP2V3uzaXZ61/Zaef7zezZCCQ5Na0uxnoJmMYTsOLqh4Iex1 JhXLZJT+iiugLjtWFLVawpl7DNjW9JCJmNjw2V7U= Date: Thu, 11 May 2023 20:45:32 -0700 From: Andrew Morton To: Khalid Aziz Cc: willy@infradead.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org, Steve Sistare Subject: Re: [PATCH] mm, compaction: Skip all pinned pages during scan Message-Id: <20230511204532.ceaf7adba0bc95d65372af07@linux-foundation.org> In-Reply-To: <20230511165516.77957-1-khalid.aziz@oracle.com> References: <20230511165516.77957-1-khalid.aziz@oracle.com> X-Mailer: Sylpheed 3.7.0 (GTK+ 2.24.33; x86_64-pc-linux-gnu) Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit X-Stat-Signature: ztx5zj8srqmgrm1uqw4upzd37x4thj3n X-Rspamd-Server: rspam03 X-Rspam-User: X-Rspamd-Queue-Id: 338761C0005 X-HE-Tag: 1683863139-88819 X-HE-Meta: U2FsdGVkX1/NT8GC9nq2QHncwRlv/ikVcXJbtkxiDvAamkNh2MqhxWpFR8hDgJTAiQGbK3EBRgnIY4BITp3EaXKjTWjU0dSKa8p7vyYzxl0cEz2K19sOhQp6Ip+aMbJ8w+ySm8WmvslZ/TRizzW2KBtvYtNIdcsPotlxnzYtD7PSrfw/oAXBNTyY1Zt+UXl3cQfI9MaFLSfWnwlbwPW2Cm9UJrCAo2isNayTDOEiqjhxcK3aDK+FT7HvgbApABMkkFwmTUDrz8X2d2ldXGgcdDb9bB9+uu5Gr2/lVLxSm0m//T5EIIl0kCXMCiLgIWgApZahM33KVP9RqXzbuZRxjv3flBQqFAh2LM/lp0VWT62c8kPwbuIQ2K6wwu7zRNe2aM4CMQHYCU9iFVtilw1/x3HPdjrVDBZzMogvGJZlbRywSGbArEI8UfnmpTe+7QnSDETJbpZpPg5Q8JWTOUDR7ZjVx9oVWOFbM4LVZzOLXy8S78J27NsF0SUmwHe2CcZv0lBkWq75pL7K/xBTEQflwFPBiFL9NB2Z25wrnt1hF1BD/vGQahs/bHGUCn42U3/6bhRBXOP0eCOnTvW2mIavq5qPour0PuThQmWmzSokhy4ivApw6QQiCEJfJMCr5z5vi8GZrl3qpsCPk9mDf4EEE2PzFC/Q2dIxD/IWilLkwcHzBXd7lis6ZNwdGQMSYpATtDON6xQq4Dz08IE+aMe/xbbU5kIJt8d+RnHo0AbFv1pi1Ogm0NP3/tq/EiALO9UtasDZobIl3CiwALQkA8+JPHHHr6F+ALDZSvd3nroyEw6H4PnnXoze0R0/CE5x5y/P4Qp71ppqD6uwaiyfTWndhiBuzpHuYVYrMCEYtAo9e+8YrksuJAhAcXr2uSI8K/4hHV7+VNRISMqZHGldMnQ4IVS6iFk8f6V7sUEbKt1kBfmCd98vUZhSBe0H7SoYMHEXIt9oUwj3SfSZjFLn59N HQ8Rq5rL GxTFq+/kN+X8XI6vJvBFXhvKvCSElyV3wKcuKgtQf9eIDyWO2/diae1N8g+LaarO3Sg+QeeLEdh9k3WtJka3sev918T0tCh5aye3oszd06VfRLA1R7yAzaaVnNNsttaBTEQetvxU74/94Uzps30BJgHG1VgSbvwf5VKTjt6CKD0m5EoHElGaudu7vSjBsNsMUGA1qea2hn+wkCawBKTSO0khOVQGzsT5z5KoKsxC+ER2BDE+cLl3cGTmRDyJpmYl/1qimWf60EhnxeW6mMxw/X+I8H8U6Q/ppr2F4Y6A0gIGH5aMqAFviB7t4mVb2bL/jhJiXZr7IgZhSITg71+1c5VfR/pdAib/jlcUWCGYOTCifIXyeRrDUfujpzauHed7zM1MD 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: On Thu, 11 May 2023 10:55:16 -0600 Khalid Aziz wrote: > Pinned pages can not be migrated. Currently as > isolate_migratepages_block() scans pages for compaction, it skips > any pinned anonymous pages. All pinned pages should be skipped and > not just the anonymous pinned pages. This patch adds a check for > pinned page by comparing its refcount with mapcount and accounts for > possible extra refcounts. This was seen as a real issue on a > customer workload where a large number of pages were pinned by vfio > on the host and any attempts to allocate hugepages resulted in > significant amount of cpu time spent in either direct compaction or > in kcompatd scanning vfio pinned pages over and over again that can > not be migrated. > > Signed-off-by: Khalid Aziz > Suggested-by: Steve Sistare > --- > mm/compaction.c | 33 +++++++++++++++++++++++++++++---- > 1 file changed, 29 insertions(+), 4 deletions(-) > > diff --git a/mm/compaction.c b/mm/compaction.c > index 5a9501e0ae01..d1371fd75391 100644 > --- a/mm/compaction.c > +++ b/mm/compaction.c > @@ -764,6 +764,32 @@ static bool too_many_isolated(pg_data_t *pgdat) > return too_many; > } > > +/* > + * Check if this base page should be skipped from isolation because > + * it is pinned. This function is called for regular pages only, and not > + * for THP or hugetlbfs pages. This code is inspired by similar code > + * in migrate_vma_check_page(), can_split_folio() and > + * folio_migrate_mapping() > + */ > +static inline bool is_pinned_page(struct page *page) > +{ > + unsigned long extra_refs; > + > + /* anonymous page can have extra ref from page cache */ "from swapcache"? > + if (page_mapping(page)) > + extra_refs = 1 + page_has_private(page); > + else > + extra_refs = PageSwapCache(page) ? 1 : 0; > + > + /* > + * This is an admittedly racy check but good enough to determine > + * if a page should be isolated "cannot be migrated"? > + */ > + if ((page_count(page) - extra_refs) > page_mapcount(page)) > + return true; > + return false; > +} > + > /** > * isolate_migratepages_block() - isolate all migrate-able pages within > * a single pageblock > @@ -992,12 +1018,11 @@ isolate_migratepages_block(struct compact_control *cc, unsigned long low_pfn, > goto isolate_fail; > > /* > - * Migration will fail if an anonymous page is pinned in memory, > - * so avoid taking lru_lock and isolating it unnecessarily in an > - * admittedly racy check. > + * Migration will fail if a page is pinned in memory, > + * so avoid taking lru_lock and isolating it unnecessarily > */ > mapping = page_mapping(page); > - if (!mapping && (page_count(page) - 1) > total_mapcount(page)) > + if (is_pinned_page(page)) > goto isolate_fail_put; > > /* > -- > 2.37.2