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 44583E7716C for ; Thu, 5 Dec 2024 15:20:00 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 333066B00E1; Thu, 5 Dec 2024 10:19:11 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id EF2786B00CA; Thu, 5 Dec 2024 10:19:10 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 4963F6B00B7; Thu, 5 Dec 2024 10:19:08 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id B123E6B0082 for ; Wed, 18 Sep 2024 21:34:15 -0400 (EDT) Received: from smtpin21.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay05.hostedemail.com (Postfix) with ESMTP id 2A8E140295 for ; Thu, 19 Sep 2024 01:34:15 +0000 (UTC) X-FDA: 82579767270.21.5E89738 Received: from mail-vs1-f42.google.com (mail-vs1-f42.google.com [209.85.217.42]) by imf25.hostedemail.com (Postfix) with ESMTP id 56F41A000B for ; Thu, 19 Sep 2024 01:34:13 +0000 (UTC) Authentication-Results: imf25.hostedemail.com; dkim=none; dmarc=fail reason="SPF not aligned (relaxed), No valid DKIM" header.from=kernel.org (policy=quarantine); spf=pass (imf25.hostedemail.com: domain of 21cnbao@gmail.com designates 209.85.217.42 as permitted sender) smtp.mailfrom=21cnbao@gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1726709642; a=rsa-sha256; cv=none; b=okj04PY17Tibh0u/NLlSLMZvBGY9Tz0izDIuytWYeO5bM/qGlNcku0ZGHVYcxEN6dvosed YboxPthU9l0shmejXbUfc70C07VsxXPKsRGTBlK8jcawCpSOU+Bb/6bqlM0/3NLFV6zZmj 5DEaVzRiXXWvAvOPEe0aVMFat0t2N1s= ARC-Authentication-Results: i=1; imf25.hostedemail.com; dkim=none; dmarc=fail reason="SPF not aligned (relaxed), No valid DKIM" header.from=kernel.org (policy=quarantine); spf=pass (imf25.hostedemail.com: domain of 21cnbao@gmail.com designates 209.85.217.42 as permitted sender) smtp.mailfrom=21cnbao@gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1726709642; 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; bh=tBad09+wpx5AmVzF0EpKxcrxl3VCINq6sl7VTRT01To=; b=VHPf4x/VK5noG9/RTOs2LryD5NGC5W2SVTrM2K5cqiC/sNSKnuZWkdAt7ruK5zqLn/9ch6 +UOnzVBHsqIlGiYUNn1akYNmJLiL9g7mqaOYuF6pvnELiogcSnAIxZ/G4O8Jj1AoZIXfSh VjW1WY91YDTDF+a80L7mOQK4NZXhW20= Received: by mail-vs1-f42.google.com with SMTP id ada2fe7eead31-49bd6c284bcso107206137.2 for ; Wed, 18 Sep 2024 18:34:13 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1726709652; x=1727314452; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=tBad09+wpx5AmVzF0EpKxcrxl3VCINq6sl7VTRT01To=; b=bAYci0KY8Mqm9lqIidk1+r+/6ayXT656qTisc2t4U9VA7aefekOMGo8ty+EstGPAhZ xr+HRrwmDCtMtiMYz3kQefPmyi2ZB478JcyfsxGO47Cl5KJ9gsozE2wwUkjjPTGNyBmv ocfMKSieRjxP54zLoEtz6K9wTqAS6eL0Z3Jz6o93VNl/ujK5Cx+HbGR9+Brv5VziGgoQ gFZsOYfvUFu0GQgT/9Z+oELY4VihxcqILrjWSsm7Oea1t8snBlq1nxiPxgm2aY4zzE7d mzkQzhEcsmlUPt1W6/APjVMJtOFofGbJg02bpMJGP9CpYJrwwRqxHhXpWByjlhNu5S0q qZrg== X-Forwarded-Encrypted: i=1; AJvYcCXjxkF4ucFREcAKFxQ6F6XyFPCXEk3zy+ZHrO9wYanInbTUV4zGnuU+sNZ0VqJq0Z0pxt6gHnPdEA==@kvack.org X-Gm-Message-State: AOJu0Ywl94b2QFwRdkWhTRVFfRbwMoeNfFt+vqX+t2P07baAcx4mVLgy WpHT3F1YV+ZzkB5NHgeiHjR9JwloEUH4IJWcJNtO916IbaHvgyUt8oMGtjthNLfttEzOiW2jqMP fH6uWpSJRVyzOK/gZq0d5NpNDLyk= X-Google-Smtp-Source: AGHT+IFpxDivPgV0RcZZM7jjnKj7YzNnBdRJMbkQFPtAH+YGnBAqnYoheQ8i+U1mH8m2BW0Q2HIjg8xzhcYGdt6x7Bo= X-Received: by 2002:a05:6102:3a0e:b0:49b:f52d:4922 with SMTP id ada2fe7eead31-49d4f6f4a03mr14422220137.27.1726709652294; Wed, 18 Sep 2024 18:34:12 -0700 (PDT) MIME-Version: 1.0 References: <20240916110754.1236200-1-dev.jain@arm.com> <20240916110754.1236200-3-dev.jain@arm.com> In-Reply-To: <20240916110754.1236200-3-dev.jain@arm.com> From: Barry Song Date: Thu, 19 Sep 2024 13:34:01 +1200 Message-ID: Subject: Re: [PATCH v2 2/2] mm: Compute first_set_pte to eliminate evaluating redundant ranges To: Dev Jain Cc: akpm@linux-foundation.org, david@redhat.com, willy@infradead.org, ryan.roberts@arm.com, anshuman.khandual@arm.com, hughd@google.com, ioworker0@gmail.com, wangkefeng.wang@huawei.com, baolin.wang@linux.alibaba.com, gshan@redhat.com, linux-kernel@vger.kernel.org, linux-mm@kvack.org Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Rspam-User: X-Stat-Signature: uhj94j8fz4oogu7xtaefdupsrynpa7qe X-Rspamd-Pre-Result: action=add header; module=dmarc; Action set by DMARC X-Rspamd-Queue-Id: 56F41A000B X-Rspamd-Server: rspam02 X-Rspam: Yes X-HE-Tag: 1726709653-42737 X-HE-Meta: U2FsdGVkX18Tjeove3VuNJ0tf4YqAHzuq5nCq7mHIJFOs+1an7D5ysWQkXIxt4tgbA6K81TZHL+0Ym5SC63tiiCC2Mu1zrgnYxbkP9MY4KRY8MdmVXovycqmKS3UI9Lh7v0F1/hkZfVsvr5uigH/yriFIQjb8IQL35XemDxBmjiQC5i8T6RtuNImZKiEpnASV88thwantXLGmI2u/ghbePfHrd641rVArjfgutGjwZziZp6pxiX4BR3j/0b8LNwxpzr4Or8PUms2R5vC2rO8ZRlP3mQd2RJrBFrk5D45UsS8RLJDB5z4zxUmPbOzG20wYb1bVIDMi8ZouTu1bvGwQz4ciqp0IgXrOzD5cDKPsxcQL3IaJttUY9Qa0TLDTm9H8fvP+uRO36Zwc/ug8DwgAJRV7rvGNSZ+ORFwBg/+6qOkuXXchZzIQVnGbjtXI2RH2jK6Hw1My8eO2ZvxhZxNjW1DBsltRmvy8zeu5rNqy1IVwE2LlHT5EjSp3CDG0QOEupVCYPV3t+OntqOGKRZtciDIvRMq4e5I6zYRywEmCYsfoJQmwqCBmFovbLwfhjs8ya/UFLpuspRg6v4UjADRFjjevQNha10DcOv4YMVQecFMVU3hqwUNSGIXXjFfbzCYEE2lAd9E5wQSEzTi14gKYlXiZ33voB6h4bw8aF2iHGPKbyd6c2ILy8K0ObqPk8WN2PY1adJsi83plx+eh35xkltMWElfE/iqRr+dFc5Drir4p7Z+95ygUAjC8/XBenLHhM1rVUQ1hW4KNdRB352gaROzPkChZUroA9xKZVeseqrrheSyGH8hWOWGYiNOuWVUMy8wUrmWwC0+WEKXHGCsvAYp/MAemwtCNT7pdkvH6BZe3Slv2TR51+Ne1Dz09r3fVlctOSrLh9X/RPl53n7yM+Tc6pXM3i34aecPuT+Tme9c7Y31N90mFwXu+p3CQLDAQRurdZvRFLxK0pUtTMA dnh3Wk+T /c+UMMR/ZFrucCkBN1Hze+GjPDxx2JHyTHoloPz97TCbOEsJpSpKL5KwKvnMxAg44m5ih5yNcGuvI2AMYkMbQdsGwYZkRiPTjw0A2357PADlDoKgMvVt3NCHcupTm0nTQL+UQyNKWBXUyloKjsV7mDSiLiIZ9z9iXAyyt1FAs+AftOx+YFTbors439kGnUY1Un/hXa6DfVo2n/HU8ujmV7hX6YmO6EC8R3S7yr/Cc0QhVmetI6QHRxw8Ps793Ri79W6h5idhKSSg8toRMJ9FWvxwwP2jSbWSlNbrztLGPabfTodhHOhVlBHGopULqxNsH/ZkAjDM38R26fCKbqphBzp2hQv3egAm+iqxlX8VZIe7d6jpURAD8V4KhxLFzTqy75nT2fyZFQLIkpx1prS62BUyHc0yDN6XeTI/Q X-Bogosity: Ham, tests=bogofilter, spamicity=0.000049, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: On Mon, Sep 16, 2024 at 11:08=E2=80=AFPM Dev Jain wrote: > > For an mTHP allocation, we need to check, for every order, whether for > that order, we have enough number of contiguous PTEs empty. Instead of > iterating the while loop for every order, use some information, which > is the first set PTE found, from the previous iteration to eliminate > some cases. The key to understanding the correctness of the patch > is that the ranges we want to examine form a strictly decreasing > sequence of nested intervals. Could we include some benchmark data here, as suggested by Ryan in this thr= ead? https://lore.kernel.org/linux-mm/58f91a56-890a-45d0-8b1f-47c4c70c9600@arm.c= om/ > > Suggested-by: Ryan Roberts > Signed-off-by: Dev Jain > --- > mm/memory.c | 20 ++++++++++++++++++-- > 1 file changed, 18 insertions(+), 2 deletions(-) > > diff --git a/mm/memory.c b/mm/memory.c > index 8bb1236de93c..e81c6abe09ce 100644 > --- a/mm/memory.c > +++ b/mm/memory.c > @@ -4633,10 +4633,11 @@ static struct folio *alloc_anon_folio(struct vm_f= ault *vmf) > { > struct vm_area_struct *vma =3D vmf->vma; > #ifdef CONFIG_TRANSPARENT_HUGEPAGE > + pte_t *first_set_pte =3D NULL, *align_pte, *pte; > unsigned long orders; > struct folio *folio; > unsigned long addr; > - pte_t *pte; > + int max_empty; > gfp_t gfp; > int order; > > @@ -4671,8 +4672,23 @@ static struct folio *alloc_anon_folio(struct vm_fa= ult *vmf) > order =3D highest_order(orders); > while (orders) { > addr =3D ALIGN_DOWN(vmf->address, PAGE_SIZE << order); > - if (pte_range_none(pte + pte_index(addr), 1 << order) =3D= =3D 1 << order) > + align_pte =3D pte + pte_index(addr); > + > + /* Range to be scanned known to be empty */ > + if (align_pte + (1 << order) <=3D first_set_pte) > + break; > + > + /* Range to be scanned contains first_set_pte */ > + if (align_pte <=3D first_set_pte) > + goto repeat; > + > + /* align_pte > first_set_pte, so need to check properly *= / > + max_empty =3D pte_range_none(align_pte, 1 << order); > + if (max_empty =3D=3D 1 << order) > break; > + > + first_set_pte =3D align_pte + max_empty; > +repeat: > order =3D next_order(&orders, order); > } > > -- > 2.30.2 > Thanks barry