Received: by 2002:a05:6358:9144:b0:117:f937:c515 with SMTP id r4csp9725775rwr; Thu, 11 May 2023 20:57:47 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ59A6hm3AjKovu2vKlliqGXu/voO8GUhLChPVVlGs17gBEQDD8LNQaigPP6cPbgfED3Sjz0 X-Received: by 2002:a05:6a00:1a09:b0:63b:7119:64a9 with SMTP id g9-20020a056a001a0900b0063b711964a9mr30165491pfv.16.1683863867209; Thu, 11 May 2023 20:57:47 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1683863867; cv=none; d=google.com; s=arc-20160816; b=jxyynptVipTGDKvTfsAWwpuU3XM95YdGs8CNIPhZ3rhZOMl8uXzVU6Re6YDoRSQP+z nzyAJsd1NVdUGDB7EB1C1Qp6d7supA9zcs8MW8oJIAq6QgfIDJ1JLxOmqcC1M+CD84dY v46w5PzKQ/GJcij224f1ha1BsoXLNINQLwT8BXFEBNlX901lULX4W/x3nZTprmaMiVYb tE6qHfq7Zckaar6smVzza/Dhj9WlbyXRIxSnEwdWdW3f2Vyu582u8Stio8eQVkabVme6 u0CK2q+cOzettpl8mWvT2DGtefTfakVm0WcSCzi2qjxe57joxnI5vZVqmELlSBuPQmQx IxzA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:subject:cc:to:from:date :dkim-signature; bh=Y7D/QUqEPXW5xWZ9A7+nmlf8+l4WtjEdB00FgoRw0NU=; b=E5adwIf9FJXpeps7CNfRTQhM9x1zg4zks8LoEcXVeEKKX1q6ork+ZE7dZANsQIQxw/ sraogRWUVlt3zvLKd86ZGHDcJZHxpCqWdYLWRJW0l5vMBCRqCkDI4uMlddiF/n/ffC8b dC57ZAa0K9b1+NryeJzAXULaa/bIJCr25wtcIBLqLSVyhIuaX38fc21uPYo6k2pjSmBk CTlfg3UDuM54aFmfR6Fq2sBUA/9aTHohF6XFC2JRWZK7dS5pPENsBSZbZwwjXozoXcF8 Kl6OIZ2yEn1uFFbHYyhdvx6vtI8EmQ3IdQazaF+WO3/My/EBuXFehZlAUDtvFaOTMeA9 pwKA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linux-foundation.org header.s=korg header.b=Wat+W9u7; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id k25-20020a637b59000000b005306389636esi4901409pgn.689.2023.05.11.20.57.35; Thu, 11 May 2023 20:57:47 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@linux-foundation.org header.s=korg header.b=Wat+W9u7; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S239832AbjELDp4 (ORCPT + 99 others); Thu, 11 May 2023 23:45:56 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:58274 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S239902AbjELDpr (ORCPT ); Thu, 11 May 2023 23:45:47 -0400 Received: from dfw.source.kernel.org (dfw.source.kernel.org [IPv6:2604:1380:4641:c500::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id ACA435581 for ; Thu, 11 May 2023 20:45:39 -0700 (PDT) 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 450AB60DC0 for ; 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-Spam-Status: No, score=-6.5 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,NICE_REPLY_A,RCVD_IN_DNSWL_MED, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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