From nobody Wed Feb 11 03:42:22 2026 Received: from out30-130.freemail.mail.aliyun.com (out30-130.freemail.mail.aliyun.com [115.124.30.130]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6C04C18E364 for ; Tue, 20 Aug 2024 09:49:44 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=115.124.30.130 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1724147387; cv=none; b=YsSzsjbr0MsuTeGh7soSnavvq7Il4gvHL67uKs28ne7GD3G5HYMGRVprgm4dYsgrnTngsGkg5Q60mO3k7IJfW3OOCcDbLtD3fC9KSeJSSUpatLdsqheQ+hwicTTNFEXC8ymmbmWfoTOhVB3vJLvBrgjRINFwRHxToHILQTESnsg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1724147387; c=relaxed/simple; bh=d0njfA85QrmA5pF6QKTksNDKH1pAKNYNW+bwDhYQxT8=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=t43OEHDPgvT5jedGJRt6CHVF2DAUkFG0tCKYutEmnfVlzfKfaX4Qzsw/UqmgP3sYmNuXTx1T7XjGfa0nc/Mtuasa5OU/qqZhCXYepydIA2tudfPq9vuhqKbZcERLvbcAVg2QCbNL4d+vUU8dOy0rwDYt34cusWF9o8KgUNqyyuk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.alibaba.com; spf=pass smtp.mailfrom=linux.alibaba.com; dkim=pass (1024-bit key) header.d=linux.alibaba.com header.i=@linux.alibaba.com header.b=j/7sbZR3; arc=none smtp.client-ip=115.124.30.130 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.alibaba.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.alibaba.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux.alibaba.com header.i=@linux.alibaba.com header.b="j/7sbZR3" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.alibaba.com; s=default; t=1724147381; h=From:To:Subject:Date:Message-Id:MIME-Version; bh=NJsMChbPBN7mMZhuJpQhE2p+c0ZuMVKGW4qyVg+x7+o=; b=j/7sbZR3D1si/vXFCeKxCoVSLFVfvBNA97eqhUGrqTpLJbqnHSBYjA8UwUgr7qMuTTq7BwNlP8lnKjgNTnEDMPiOW9rGgE9/34z5aaLIEvuJ8LXWegFpcCBwQgAbaWJuV8VQmkGThdLlLeWzHqBtbeWZdAECKZU6QAV14xni/54= Received: from localhost(mailfrom:baolin.wang@linux.alibaba.com fp:SMTPD_---0WDILeC9_1724147380) by smtp.aliyun-inc.com; Tue, 20 Aug 2024 17:49:41 +0800 From: Baolin Wang To: akpm@linux-foundation.org Cc: hughd@google.com, willy@infradead.org, david@redhat.com, 21cnbao@gmail.com, ryan.roberts@arm.com, shy828301@gmail.com, ziy@nvidia.com, baolin.wang@linux.alibaba.com, linux-mm@kvack.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 1/5] mm: khugepaged: expand the is_refcount_suitable() to support file folios Date: Tue, 20 Aug 2024 17:49:13 +0800 Message-Id: X-Mailer: git-send-email 2.39.3 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Expand the is_refcount_suitable() to support reference checks for file foli= os, as preparation for supporting shmem mTHP collapse. Signed-off-by: Baolin Wang Acked-by: David Hildenbrand --- mm/khugepaged.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/mm/khugepaged.c b/mm/khugepaged.c index cdd1d8655a76..76f05215ee87 100644 --- a/mm/khugepaged.c +++ b/mm/khugepaged.c @@ -546,12 +546,14 @@ static void release_pte_pages(pte_t *pte, pte_t *_pte, =20 static bool is_refcount_suitable(struct folio *folio) { - int expected_refcount; + int expected_refcount =3D folio_mapcount(folio); =20 - expected_refcount =3D folio_mapcount(folio); - if (folio_test_swapcache(folio)) + if (!folio_test_anon(folio) || folio_test_swapcache(folio)) expected_refcount +=3D folio_nr_pages(folio); =20 + if (folio_test_private(folio)) + expected_refcount++; + return folio_ref_count(folio) =3D=3D expected_refcount; } =20 @@ -2285,8 +2287,7 @@ static int hpage_collapse_scan_file(struct mm_struct = *mm, unsigned long addr, break; } =20 - if (folio_ref_count(folio) !=3D - 1 + folio_mapcount(folio) + folio_test_private(folio)) { + if (!is_refcount_suitable(folio)) { result =3D SCAN_PAGE_COUNT; break; } --=20 2.39.3 From nobody Wed Feb 11 03:42:22 2026 Received: from out30-98.freemail.mail.aliyun.com (out30-98.freemail.mail.aliyun.com [115.124.30.98]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 703E218E364 for ; Tue, 20 Aug 2024 09:49:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=115.124.30.98 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1724147393; cv=none; b=t/418rQD7m7FcwPH2K9sM73eMvzCN4Ek2D7tNsMiAbVNcs4tuqrDvStQ/na6X0PMgIrnJo2qBch1pNy51SB9bCZCzVgA5NTH5xzXv+aeeg5Smp8IeEV7YWhBOtbxLtdZdrBmnnDe/4sI6VPUer9sRfDnogYh4CJs+Zam94EJM+U= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1724147393; c=relaxed/simple; bh=tlEn4MoCMLXKUBkfGYFDl4wTKxqWTr+e3qXdF/cStn8=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=uztX+EfuJusSvC14zBvoZt04uW6/Br240bP/V9qrhsgUJVBqBAv8waxP8ZaforWVhszrgmqN+5P7ZeKF9wR0vDk4jbsjKoi0t+gV2Y/SriDqjWEPqjdm6KCteZiMVhuBOY4TzOk2GfO9SYvDXgiymyACHPKjD6iIPBsoAzZwI1s= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.alibaba.com; spf=pass smtp.mailfrom=linux.alibaba.com; dkim=pass (1024-bit key) header.d=linux.alibaba.com header.i=@linux.alibaba.com header.b=sPsGyMCq; arc=none smtp.client-ip=115.124.30.98 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.alibaba.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.alibaba.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux.alibaba.com header.i=@linux.alibaba.com header.b="sPsGyMCq" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.alibaba.com; s=default; t=1724147382; h=From:To:Subject:Date:Message-Id:MIME-Version; bh=BdoRq8oN4jMPChy+X0I/pW/sjGhNsrwJxvZFVW1ygPQ=; b=sPsGyMCqgR0Ot6D70+V+k9rXsJ3UFsAhX3+FRJr7Pebn8hCfJ3KF+FRGJ2IF6ZPvI8CpzHQYfPEqB+qYLQe8kf6X0+Q0jDlYIlrW9RWWqAGD/bMO+/NKVK8iYTasnZNEmJUKvoZqgqpnlX07wsqPd6MT5wx0z0vWEX5tW20ME20= Received: from localhost(mailfrom:baolin.wang@linux.alibaba.com fp:SMTPD_---0WDIChL0_1724147381) by smtp.aliyun-inc.com; Tue, 20 Aug 2024 17:49:42 +0800 From: Baolin Wang To: akpm@linux-foundation.org Cc: hughd@google.com, willy@infradead.org, david@redhat.com, 21cnbao@gmail.com, ryan.roberts@arm.com, shy828301@gmail.com, ziy@nvidia.com, baolin.wang@linux.alibaba.com, linux-mm@kvack.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 2/5] mm: khugepaged: use the number of pages in the folio to check the reference count Date: Tue, 20 Aug 2024 17:49:14 +0800 Message-Id: <9ea49262308de28957596cc6e8edc2d3a4f54659.1724140601.git.baolin.wang@linux.alibaba.com> X-Mailer: git-send-email 2.39.3 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Use the number of pages in the folio to check the reference count as preparation for supporting shmem mTHP collapse. Signed-off-by: Baolin Wang Acked-by: David Hildenbrand --- mm/khugepaged.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/mm/khugepaged.c b/mm/khugepaged.c index 76f05215ee87..e015c94eba09 100644 --- a/mm/khugepaged.c +++ b/mm/khugepaged.c @@ -1988,9 +1988,9 @@ static int collapse_file(struct mm_struct *mm, unsign= ed long addr, VM_BUG_ON_FOLIO(folio !=3D xa_load(xas.xa, index), folio); =20 /* - * We control three references to the folio: + * We control 2 + nr_pages references to the folio: * - we hold a pin on it; - * - one reference from page cache; + * - nr_pages reference from page cache; * - one from lru_isolate_folio; * If those are the only references, then any new usage * of the folio will have to fetch it from the page @@ -1998,7 +1998,7 @@ static int collapse_file(struct mm_struct *mm, unsign= ed long addr, * truncate, so any new usage will be blocked until we * unlock folio after collapse/during rollback. */ - if (folio_ref_count(folio) !=3D 3) { + if (folio_ref_count(folio) !=3D 2 + folio_nr_pages(folio)) { result =3D SCAN_PAGE_COUNT; xas_unlock_irq(&xas); folio_putback_lru(folio); @@ -2181,7 +2181,7 @@ static int collapse_file(struct mm_struct *mm, unsign= ed long addr, folio_clear_active(folio); folio_clear_unevictable(folio); folio_unlock(folio); - folio_put_refs(folio, 3); + folio_put_refs(folio, 2 + folio_nr_pages(folio)); } =20 goto out; --=20 2.39.3 From nobody Wed Feb 11 03:42:22 2026 Received: from out30-98.freemail.mail.aliyun.com (out30-98.freemail.mail.aliyun.com [115.124.30.98]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 123D818991B for ; Tue, 20 Aug 2024 09:49:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=115.124.30.98 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1724147394; cv=none; b=sG3GN4KYmu5lvhnLGq7mPCE9mJBTY7IWbUG9eyHRTIXkt2E88Ia6zVc6zaXVXeNoe+o3IV3EHJW2iPdKyORWElIxsTUscYXPfwlAyUJrfsbJNF/kiq3dlnjmD3GECmbmUiebO/h3DtBb4DQto9Dja/170WIi65IYIJsTZcl/n3w= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1724147394; c=relaxed/simple; bh=mYp6Nso68Hk+a6iQZU3RiFpMzs2dIZuukt7NzYfLRB4=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=FVi7ql5S+1yYOb2o1fjqAL7aqfgWEyuMEFjVmORi+fwj6Oq0B6zxBMhfotO567rEde83SL+ldvPuoiewncYzyDEyCsyjXeYMSMRaUsl0tMseyU+8R0fCmTFwBq7XLs9C9wMn9DaKmlBT/c3iT0UTqSxg8yTwXTxXrre8qr77b+w= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.alibaba.com; spf=pass smtp.mailfrom=linux.alibaba.com; dkim=pass (1024-bit key) header.d=linux.alibaba.com header.i=@linux.alibaba.com header.b=RWmL/4ZY; arc=none smtp.client-ip=115.124.30.98 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.alibaba.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.alibaba.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux.alibaba.com header.i=@linux.alibaba.com header.b="RWmL/4ZY" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.alibaba.com; s=default; t=1724147384; h=From:To:Subject:Date:Message-Id:MIME-Version; bh=0UzIUq6FZARxgmMF/NPpanXZh/m/Lu7W5+1J/nDWXrI=; b=RWmL/4ZYqLu4isjVJqF065APyI1B4CaYn8dLMNrtRGAgX3aPdxj/78ecjeJxkd7hU8f9vAJq8oqDoMJ2AE7P5+uPFg6xqT0BTPaocAw3k+VK/1zfJPkHqKgAmUYPtfq8rSNO3EK0NZmwhHY6i1pehEI5xkVqoW62W4E4h7/lmoU= Received: from localhost(mailfrom:baolin.wang@linux.alibaba.com fp:SMTPD_---0WDIEwjB_1724147382) by smtp.aliyun-inc.com; Tue, 20 Aug 2024 17:49:43 +0800 From: Baolin Wang To: akpm@linux-foundation.org Cc: hughd@google.com, willy@infradead.org, david@redhat.com, 21cnbao@gmail.com, ryan.roberts@arm.com, shy828301@gmail.com, ziy@nvidia.com, baolin.wang@linux.alibaba.com, linux-mm@kvack.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 3/5] mm: khugepaged: support shmem mTHP copy Date: Tue, 20 Aug 2024 17:49:15 +0800 Message-Id: <222d615b7c837eabb47a238126c5fdeff8aa5283.1724140601.git.baolin.wang@linux.alibaba.com> X-Mailer: git-send-email 2.39.3 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Iterate each subpage in the large folio to copy, as preparation for support= ing shmem mTHP collapse. Signed-off-by: Baolin Wang --- mm/khugepaged.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/mm/khugepaged.c b/mm/khugepaged.c index e015c94eba09..4996f7487c13 100644 --- a/mm/khugepaged.c +++ b/mm/khugepaged.c @@ -2056,17 +2056,22 @@ static int collapse_file(struct mm_struct *mm, unsi= gned long addr, index =3D start; dst =3D folio_page(new_folio, 0); list_for_each_entry(folio, &pagelist, lru) { + int i, nr_pages =3D folio_nr_pages(folio); + while (index < folio->index) { clear_highpage(dst); index++; dst++; } - if (copy_mc_highpage(dst, folio_page(folio, 0)) > 0) { - result =3D SCAN_COPY_MC; - goto rollback; + + for (i =3D 0; i < nr_pages; i++) { + if (copy_mc_highpage(dst, folio_page(folio, i)) > 0) { + result =3D SCAN_COPY_MC; + goto rollback; + } + index++; + dst++; } - index++; - dst++; } while (index < end) { clear_highpage(dst); --=20 2.39.3 From nobody Wed Feb 11 03:42:22 2026 Received: from out30-113.freemail.mail.aliyun.com (out30-113.freemail.mail.aliyun.com [115.124.30.113]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id CF9A018C934 for ; Tue, 20 Aug 2024 09:49:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=115.124.30.113 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1724147395; cv=none; b=lEEfvfqkqxWc9eSSHJ0oVc3lhhVQCKrYV52wbK/61+M7ZtT9twUcVAC4zlv9ZwdX5VB2ZPL/YZXICpjDEVwSe9IMcT8xjCqSYfKpqNmIjZ7MpK1fKFlBNCoH3wQ3cyQR+r8J2zbgWricx0cFq+G088doMtUGZvumb8PaREacfRo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1724147395; c=relaxed/simple; bh=qlwRIO49Vc2lc0IQpiHjd/WQEdaOL+IzAMESQpRaNO8=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=ltxE/y9fOeGbkW8lXeTHxfu9UIy8iaqv1o8MJA6+p3h/0yuvrjowzl7FI+n0AvvELjxXZIF6k6YlwOItER0I4iUrp4HW+he/cMWFjh586NQB8qcEud7th02Dq4MPJ+dKgstmfcMNBn8OWxglMHFzgUztpWxbHlZe2yCgqDM/uns= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.alibaba.com; spf=pass smtp.mailfrom=linux.alibaba.com; dkim=pass (1024-bit key) header.d=linux.alibaba.com header.i=@linux.alibaba.com header.b=I3hrRTUX; arc=none smtp.client-ip=115.124.30.113 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.alibaba.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.alibaba.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux.alibaba.com header.i=@linux.alibaba.com header.b="I3hrRTUX" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.alibaba.com; s=default; t=1724147384; h=From:To:Subject:Date:Message-Id:MIME-Version; bh=bSL4r/U095xkuorzmW1ZSPtc/nQFSKSzXorZ/e7zvxM=; b=I3hrRTUXt8tNn83cwnt8KcDK2i9qpHVdnVPYfKJpvndmEJ2AJTehY7d6ZLT8+9u8vmelHxNH1wem/ZC5cC3lYzehRHdOfRCwQGexpNZ4B4GSCWv1Ud0I/3bqMuEFSJrsHQ7iH4hj8XwZQ0hSHtmS2+jju3VexQHU17gmL9KwUUw= Received: from localhost(mailfrom:baolin.wang@linux.alibaba.com fp:SMTPD_---0WDIChLj_1724147383) by smtp.aliyun-inc.com; Tue, 20 Aug 2024 17:49:44 +0800 From: Baolin Wang To: akpm@linux-foundation.org Cc: hughd@google.com, willy@infradead.org, david@redhat.com, 21cnbao@gmail.com, ryan.roberts@arm.com, shy828301@gmail.com, ziy@nvidia.com, baolin.wang@linux.alibaba.com, linux-mm@kvack.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 4/5] mm: khugepaged: support shmem mTHP collapse Date: Tue, 20 Aug 2024 17:49:16 +0800 Message-Id: X-Mailer: git-send-email 2.39.3 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Shmem already supports the allocation of mTHP, but khugepaged does not yet support collapsing mTHP folios. Now khugepaged is ready to support mTHP, and this patch enables the collapse of shmem mTHP. Signed-off-by: Baolin Wang --- mm/khugepaged.c | 28 +++++++++++----------------- 1 file changed, 11 insertions(+), 17 deletions(-) diff --git a/mm/khugepaged.c b/mm/khugepaged.c index 4996f7487c13..4a83c40d9053 100644 --- a/mm/khugepaged.c +++ b/mm/khugepaged.c @@ -1843,7 +1843,7 @@ static int collapse_file(struct mm_struct *mm, unsign= ed long addr, } } while (1); =20 - for (index =3D start; index < end; index++) { + for (index =3D start; index < end;) { xas_set(&xas, index); folio =3D xas_load(&xas); =20 @@ -1862,6 +1862,7 @@ static int collapse_file(struct mm_struct *mm, unsign= ed long addr, } } nr_none++; + index++; continue; } =20 @@ -1943,12 +1944,10 @@ static int collapse_file(struct mm_struct *mm, unsi= gned long addr, * we locked the first folio, then a THP might be there already. * This will be discovered on the first iteration. */ - if (folio_test_large(folio)) { - result =3D folio_order(folio) =3D=3D HPAGE_PMD_ORDER && - folio->index =3D=3D start - /* Maybe PMD-mapped */ - ? SCAN_PTE_MAPPED_HUGEPAGE - : SCAN_PAGE_COMPOUND; + if (folio_order(folio) =3D=3D HPAGE_PMD_ORDER && + folio->index =3D=3D start) { + /* Maybe PMD-mapped */ + result =3D SCAN_PTE_MAPPED_HUGEPAGE; goto out_unlock; } =20 @@ -2009,6 +2008,7 @@ static int collapse_file(struct mm_struct *mm, unsign= ed long addr, * Accumulate the folios that are being collapsed. */ list_add_tail(&folio->lru, &pagelist); + index +=3D folio_nr_pages(folio); continue; out_unlock: folio_unlock(folio); @@ -2261,16 +2261,10 @@ static int hpage_collapse_scan_file(struct mm_struc= t *mm, unsigned long addr, continue; } =20 - /* - * TODO: khugepaged should compact smaller compound pages - * into a PMD sized page - */ - if (folio_test_large(folio)) { - result =3D folio_order(folio) =3D=3D HPAGE_PMD_ORDER && - folio->index =3D=3D start - /* Maybe PMD-mapped */ - ? SCAN_PTE_MAPPED_HUGEPAGE - : SCAN_PAGE_COMPOUND; + if (folio_order(folio) =3D=3D HPAGE_PMD_ORDER && + folio->index =3D=3D start) { + /* Maybe PMD-mapped */ + result =3D SCAN_PTE_MAPPED_HUGEPAGE; /* * For SCAN_PTE_MAPPED_HUGEPAGE, further processing * by the caller won't touch the page cache, and so --=20 2.39.3 From nobody Wed Feb 11 03:42:22 2026 Received: from out30-119.freemail.mail.aliyun.com (out30-119.freemail.mail.aliyun.com [115.124.30.119]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C61A518C93F for ; Tue, 20 Aug 2024 09:49:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=115.124.30.119 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1724147394; cv=none; b=RIulSOJCm2V6jz5jKMdIqyxLV/Jrv5Knw/qYXQs6hL+g9WIMNXDocxYduIWVTuonZSJAAu9lm8skgPmEQsyJDM89Ly96YDpp+x81LJJbIAMx/HcySuLr6z2AbXXo2/Qw3mNQT/hcDAQkDC1wNhuxLwAxYcbU3TsDDRl823rR88s= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1724147394; c=relaxed/simple; bh=0ewCSOF2c1G2qY1J0DIuEJ+k7ukyWOpw1yoCOGS9yLM=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=t6gZu+/khHYk/LJzhbBsasl5AUuy7Q/xRbr9yb/Jok7PSbPrR0Q20e+98O3VvlFoTeUn7i45bn6DVpmthBrzg9lAjaEM1A1GsAI8LLoMiYYzYWXLVeREzrZfGPjYqwbu9raXffcFJuA8mOIIObJY/1t3x0HTQ0VY2MYs/LnZJ5g= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.alibaba.com; spf=pass smtp.mailfrom=linux.alibaba.com; dkim=pass (1024-bit key) header.d=linux.alibaba.com header.i=@linux.alibaba.com header.b=kbGM7uKb; arc=none smtp.client-ip=115.124.30.119 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.alibaba.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.alibaba.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux.alibaba.com header.i=@linux.alibaba.com header.b="kbGM7uKb" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.alibaba.com; s=default; t=1724147386; h=From:To:Subject:Date:Message-Id:MIME-Version; bh=NETcifOYIb+Yf9TxOqDeY39PaKApxrCiukqpjtRmh74=; b=kbGM7uKbxeQJwLDFnmM7YJxxLdAEaMfd4WAuliMyaYQcTe81bEVZJxQUKgAl0LcAX7On5qhUuqMDcQ1T/eRcxkbxJY5AgOF4QLqOBoeYI5l5AyiFCO+nbwUAcwTPfxyFpMfs/fJ5XDyU7FaTssjFE6txPv4FSB7aFTIWMsB+hl8= Received: from localhost(mailfrom:baolin.wang@linux.alibaba.com fp:SMTPD_---0WDIEwkS_1724147384) by smtp.aliyun-inc.com; Tue, 20 Aug 2024 17:49:45 +0800 From: Baolin Wang To: akpm@linux-foundation.org Cc: hughd@google.com, willy@infradead.org, david@redhat.com, 21cnbao@gmail.com, ryan.roberts@arm.com, shy828301@gmail.com, ziy@nvidia.com, baolin.wang@linux.alibaba.com, linux-mm@kvack.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 5/5] selftests: mm: support shmem mTHP collapse testing Date: Tue, 20 Aug 2024 17:49:17 +0800 Message-Id: X-Mailer: git-send-email 2.39.3 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add shmem mTHP collpase testing. Similar to the anonymous page, users can u= se the '-s' parameter to specify the shmem mTHP size for testing. Signed-off-by: Baolin Wang --- tools/testing/selftests/mm/khugepaged.c | 4 +- tools/testing/selftests/mm/thp_settings.c | 46 ++++++++++++++++++++--- tools/testing/selftests/mm/thp_settings.h | 9 ++++- 3 files changed, 51 insertions(+), 8 deletions(-) diff --git a/tools/testing/selftests/mm/khugepaged.c b/tools/testing/selfte= sts/mm/khugepaged.c index 829320a519e7..56d4480e8d3c 100644 --- a/tools/testing/selftests/mm/khugepaged.c +++ b/tools/testing/selftests/mm/khugepaged.c @@ -1095,7 +1095,7 @@ static void usage(void) fprintf(stderr, "\n\tSupported Options:\n"); fprintf(stderr, "\t\t-h: This help message.\n"); fprintf(stderr, "\t\t-s: mTHP size, expressed as page order.\n"); - fprintf(stderr, "\t\t Defaults to 0. Use this size for anon allocation= s.\n"); + fprintf(stderr, "\t\t Defaults to 0. Use this size for anon or shmem a= llocations.\n"); exit(1); } =20 @@ -1209,6 +1209,8 @@ int main(int argc, char **argv) default_settings.khugepaged.pages_to_scan =3D hpage_pmd_nr * 8; default_settings.hugepages[hpage_pmd_order].enabled =3D THP_INHERIT; default_settings.hugepages[anon_order].enabled =3D THP_ALWAYS; + default_settings.shmem_hugepages[hpage_pmd_order].enabled =3D SHMEM_INHER= IT; + default_settings.shmem_hugepages[anon_order].enabled =3D SHMEM_ALWAYS; =20 save_settings(); thp_push_settings(&default_settings); diff --git a/tools/testing/selftests/mm/thp_settings.c b/tools/testing/self= tests/mm/thp_settings.c index a4163438108e..577eaab6266f 100644 --- a/tools/testing/selftests/mm/thp_settings.c +++ b/tools/testing/selftests/mm/thp_settings.c @@ -33,10 +33,11 @@ static const char * const thp_defrag_strings[] =3D { }; =20 static const char * const shmem_enabled_strings[] =3D { + "never", "always", "within_size", "advise", - "never", + "inherit", "deny", "force", NULL @@ -200,6 +201,7 @@ void thp_write_num(const char *name, unsigned long num) void thp_read_settings(struct thp_settings *settings) { unsigned long orders =3D thp_supported_orders(); + unsigned long shmem_orders =3D thp_shmem_supported_orders(); char path[PATH_MAX]; int i; =20 @@ -234,12 +236,24 @@ void thp_read_settings(struct thp_settings *settings) settings->hugepages[i].enabled =3D thp_read_string(path, thp_enabled_strings); } + + for (i =3D 0; i < NR_ORDERS; i++) { + if (!((1 << i) & shmem_orders)) { + settings->shmem_hugepages[i].enabled =3D SHMEM_NEVER; + continue; + } + snprintf(path, PATH_MAX, "hugepages-%ukB/shmem_enabled", + (getpagesize() >> 10) << i); + settings->shmem_hugepages[i].enabled =3D + thp_read_string(path, shmem_enabled_strings); + } } =20 void thp_write_settings(struct thp_settings *settings) { struct khugepaged_settings *khugepaged =3D &settings->khugepaged; unsigned long orders =3D thp_supported_orders(); + unsigned long shmem_orders =3D thp_shmem_supported_orders(); char path[PATH_MAX]; int enabled; int i; @@ -271,6 +285,15 @@ void thp_write_settings(struct thp_settings *settings) enabled =3D settings->hugepages[i].enabled; thp_write_string(path, thp_enabled_strings[enabled]); } + + for (i =3D 0; i < NR_ORDERS; i++) { + if (!((1 << i) & shmem_orders)) + continue; + snprintf(path, PATH_MAX, "hugepages-%ukB/shmem_enabled", + (getpagesize() >> 10) << i); + enabled =3D settings->shmem_hugepages[i].enabled; + thp_write_string(path, shmem_enabled_strings[enabled]); + } } =20 struct thp_settings *thp_current_settings(void) @@ -324,17 +347,18 @@ void thp_set_read_ahead_path(char *path) dev_queue_read_ahead_path[sizeof(dev_queue_read_ahead_path) - 1] =3D '\0'; } =20 -unsigned long thp_supported_orders(void) +static unsigned long __thp_supported_orders(bool is_shmem) { unsigned long orders =3D 0; char path[PATH_MAX]; char buf[256]; - int ret; - int i; + int ret, i; + char anon_dir[] =3D "enabled"; + char shmem_dir[] =3D "shmem_enabled"; =20 for (i =3D 0; i < NR_ORDERS; i++) { - ret =3D snprintf(path, PATH_MAX, THP_SYSFS "hugepages-%ukB/enabled", - (getpagesize() >> 10) << i); + ret =3D snprintf(path, PATH_MAX, THP_SYSFS "hugepages-%ukB/%s", + (getpagesize() >> 10) << i, is_shmem ? shmem_dir : anon_dir); if (ret >=3D PATH_MAX) { printf("%s: Pathname is too long\n", __func__); exit(EXIT_FAILURE); @@ -347,3 +371,13 @@ unsigned long thp_supported_orders(void) =20 return orders; } + +unsigned long thp_supported_orders(void) +{ + return __thp_supported_orders(false); +} + +unsigned long thp_shmem_supported_orders(void) +{ + return __thp_supported_orders(true); +} diff --git a/tools/testing/selftests/mm/thp_settings.h b/tools/testing/self= tests/mm/thp_settings.h index 71cbff05f4c7..876235a23460 100644 --- a/tools/testing/selftests/mm/thp_settings.h +++ b/tools/testing/selftests/mm/thp_settings.h @@ -22,10 +22,11 @@ enum thp_defrag { }; =20 enum shmem_enabled { + SHMEM_NEVER, SHMEM_ALWAYS, SHMEM_WITHIN_SIZE, SHMEM_ADVISE, - SHMEM_NEVER, + SHMEM_INHERIT, SHMEM_DENY, SHMEM_FORCE, }; @@ -46,6 +47,10 @@ struct khugepaged_settings { unsigned long pages_to_scan; }; =20 +struct shmem_hugepages_settings { + enum shmem_enabled enabled; +}; + struct thp_settings { enum thp_enabled thp_enabled; enum thp_defrag thp_defrag; @@ -54,6 +59,7 @@ struct thp_settings { struct khugepaged_settings khugepaged; unsigned long read_ahead_kb; struct hugepages_settings hugepages[NR_ORDERS]; + struct shmem_hugepages_settings shmem_hugepages[NR_ORDERS]; }; =20 int read_file(const char *path, char *buf, size_t buflen); @@ -76,5 +82,6 @@ void thp_save_settings(void); =20 void thp_set_read_ahead_path(char *path); unsigned long thp_supported_orders(void); +unsigned long thp_shmem_supported_orders(void); =20 #endif /* __THP_SETTINGS_H__ */ --=20 2.39.3