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 4C402C30658 for ; Wed, 3 Jul 2024 00:12:08 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 9F6326B009D; Tue, 2 Jul 2024 20:12:07 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 9A61E6B009E; Tue, 2 Jul 2024 20:12:07 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 86D956B009F; Tue, 2 Jul 2024 20:12:07 -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 6842A6B009D for ; Tue, 2 Jul 2024 20:12:07 -0400 (EDT) Received: from smtpin09.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id 1FE1F1205DA for ; Wed, 3 Jul 2024 00:12:07 +0000 (UTC) X-FDA: 82296513894.09.E3B5A28 Received: from mail-lj1-f172.google.com (mail-lj1-f172.google.com [209.85.208.172]) by imf19.hostedemail.com (Postfix) with ESMTP id 24F911A000E for ; Wed, 3 Jul 2024 00:12:04 +0000 (UTC) Authentication-Results: imf19.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=JfJwEyIB; spf=pass (imf19.hostedemail.com: domain of richard.weiyang@gmail.com designates 209.85.208.172 as permitted sender) smtp.mailfrom=richard.weiyang@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1719965514; h=from:from:sender:reply-to: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: in-reply-to:in-reply-to:references:references:dkim-signature; bh=D+7MJWtyp8tG6/1EBb4pNM6+ufAhNQcF0n5D2+iA6HY=; b=ee/bI8RsLuDeu1kXYHDcg+eIVQt1dUL9/lanZ6/2YjpdPI99FC6rPl7dJ4sSKqc16ZKHL8 PVSP59+tS6gl+l8g+XPyD4Sk/MF6p/aEE5EYqAGsX4WgYCXn+NpTKMvYOOuWj+5rR5PfMe a12VdGawM5AaYYbTEzCaxDwt5d8GchQ= ARC-Authentication-Results: i=1; imf19.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=JfJwEyIB; spf=pass (imf19.hostedemail.com: domain of richard.weiyang@gmail.com designates 209.85.208.172 as permitted sender) smtp.mailfrom=richard.weiyang@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1719965514; a=rsa-sha256; cv=none; b=Q+6CXL7B8LMjLBan10MU39qZxVJoyh3t6i+DusanJzj8Qz3R+GTRixN99bnJvkGAaNImb7 rw1YS0HXBvQ2vfCEtvTSsyJ1NUJn0l8uhtbJ2yDhhEjEsldf+Hn7FpcRBPAyNSokh1DTOi x/SRZAJGUKY/C0Il82bAiv1cINlNnps= Received: by mail-lj1-f172.google.com with SMTP id 38308e7fff4ca-2eaae2a6dc1so63643931fa.0 for ; Tue, 02 Jul 2024 17:12:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1719965523; x=1720570323; darn=kvack.org; h=user-agent:in-reply-to:content-disposition:mime-version:references :reply-to:message-id:subject:cc:to:from:date:from:to:cc:subject:date :message-id:reply-to; bh=D+7MJWtyp8tG6/1EBb4pNM6+ufAhNQcF0n5D2+iA6HY=; b=JfJwEyIBBSz8L+BU86KPcAPW8dhN39xHZF1B/RbwZENU9mnu0CBJz1OlWgARdZddKt LLoX5eR9vP1lYh00C4i+B7Fy+Nn3qTKYR8ZDfxn6qOeh8tmuRAFzKEZ+2asaOk1Kv/pj hj1LWMHcMJWF6/IHe4sCLDELw4ERQI9Chm2ViDLpnVZU7SHV70ucWY41mgyGPab7Buyk W792G5TODcsDKvvbfPk19TQwjPdkoxD1A++yfG2Qlc7texT1JlYDgQAnZa9hJIxsFkrU TGhy+EZiKzgXHdsXQ4FzNuCK3NY3dxN187+JABerBH+XkJX380gPV3YH3F/oh3ynw9SZ ZZGg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1719965523; x=1720570323; h=user-agent:in-reply-to:content-disposition:mime-version:references :reply-to:message-id:subject:cc:to:from:date:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=D+7MJWtyp8tG6/1EBb4pNM6+ufAhNQcF0n5D2+iA6HY=; b=tL614p2Eyh4vtIOUvCdax1sNyr1/yYlJRXLy5mMjFN9HJz8u02S9q1H0NFiylKYUA9 4uB8hAWW7js5mpbmsPJb4keJWFT9fszujvDZ9Cy+SeH1fg5GHFuOMJorTsOWfhzxvmb7 T0d/Wq9yQxkBIoyo82X0Yfo7HCTkn9eyluqZCR0H8p4lJeVk52E+K8pcWzTlzHZh+0l+ MGrBmE4FVTXy/E85mvlj8O4ZFyeQHAVm5gxG95IkfxiGKsh0RHnVmpCpCPkquRGQQ17o Zz3FAKpXFBGNOkXY9DbVqiYX0BjYMPNZsSPVwFUWbp8gwPXOiWj2qaAxpKILClff5f8t 24xQ== X-Forwarded-Encrypted: i=1; AJvYcCVfrroRPChIezhRGL+AfUIm8BnU2lDLOMDVsSo7us2fsWhVzQh976z/0C1zujsvjSro06Jy5YJYTkQQM8XPDKVjxWk= X-Gm-Message-State: AOJu0Yw8ppO18CqYOM5CngqoJQet8X96+EX5RnA5hh5F2Mix6SKpWnBh 5WSgkMOWKn/X7nb5shEGqtF/hQkkn/h6ylFLEF1n2Uxa3BFKi998 X-Google-Smtp-Source: AGHT+IFF9ttXem28o2XPL4Rnr1Z4hzkmxWMwf3rvwft36gZGb+1u4NzgDjhsgkP0yxHSyXX/T7BzuA== X-Received: by 2002:a2e:a492:0:b0:2ec:5018:d4e2 with SMTP id 38308e7fff4ca-2ee5e39385cmr73889121fa.19.1719965523192; Tue, 02 Jul 2024 17:12:03 -0700 (PDT) Received: from localhost ([185.92.221.13]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-a72aaf1cfd3sm465709666b.10.2024.07.02.17.12.02 (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Tue, 02 Jul 2024 17:12:02 -0700 (PDT) Date: Wed, 3 Jul 2024 00:12:02 +0000 From: Wei Yang To: David Hildenbrand Cc: Wei Yang , akpm@linux-foundation.org, linux-mm@kvack.org, willy@infradead.org Subject: Re: [PATCH] mm/page_alloc: remove prefetchw() on freeing page to buddy system Message-ID: <20240703001202.k4ebfpgcad3jwaev@master> Reply-To: Wei Yang References: <20240702020931.7061-1-richard.weiyang@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: NeoMutt/20170113 (1.7.2) X-Rspam-User: X-Rspamd-Server: rspam01 X-Rspamd-Queue-Id: 24F911A000E X-Stat-Signature: 8g3w5jt7f4sf6t85j54gindqkwzdpk3r X-HE-Tag: 1719965524-864419 X-HE-Meta: U2FsdGVkX1/5O332f6zLyumYRSOpYLx91ydUIxCQodkhhqGuHO3+FeDWaR12X8s+603rpB5dmFfcSJ9qqVVMvNVfDgp6hQMnlMzxOlVe5swphN1TSlOsnUgHbH4tHk9N25p27z77y7aONT18eD0vxNEE5zqfyJZ8WmTc4dXqla+eLM7mmKBEalRT2e3qYKywrxwjExnRY1txOtaqjJAZn3TEWIbWn4lZP0Z7arZXVJ1Xtrt5voBazRpZb8rUcO7ELTP4jNJl20q6HsOzIuTO4LSN/8R8AkVKwFvRG737n3UhxfOn9z3fvBoPVELLrhnVtx5dhqD3vi7JjIB8bNzvKBOeH7S3dg3sXjTnXsumHGjdPv5aGvuTlM0Hl2s0vxDdjHqTIA0Ox5B+CDf/RvHW9gSxNGu1MAaJhuxKZusU5Woqe+ZHnizcM3PYcd4OtgcpFbuUG1lQxHvsLSi64vERHZVh3QMTtstXoccHvbgfZcSPTHxJNyMS+WPQJdYhXU4SOrcqnhZ7PQUOxixjEOIFjKOBXTmkHu8fzFURtNttq3Y2rXgMiWMHzlu6NsRdgi4GOK6bdZ+3C2V3hbUpUEXOHmNoVHYdhuoV9FmxR1RkSFXDcv8N5i4ZtN/2lpXbjfKh50FBdROL3PrU5wVs840wXrr6vF+ALl7KDhZ2bIjdG6QJMZ1l6U64eR15m9PFmmwq/NA64j4s9kzHSZGATaZ1D9T4w+CA3ln/3edXuH4Ixlvgy5CHrWMylygBWJbij7mEoPHtI4FMql68FbDVhPeLjE2qTX/IfivxCxw12FxQpz5XIJojg3oF9a1ccVwIXJNPkD6OMiaeAAiCF+UYP3GZDKFuxkVVsCERHeixEWK9wLAEWh3OybUjBUDii2ZH1HODGRnnjrtux6+Vs84RBhukUObY3eR44UDvTdECwof+hHYGT2p7A84ki4+ZhQc3gxD1RHazhOPBlVUcLqJcQXy OBjc23Xp 5ozBGKWOSuyBJHUZxYJihL6qPYtzh4ZEsgQ4Gw+2T6E8bJAMNV75NaTWCOctdVBbYUeF7XAaHRD76rQ0PPDDTB0dR5kioqBzDEoN0HHcwujbwaZfrl7ztVbvdt1lVHHs6kziCWph1hiX2lbMWUYUt7ipXJQX7+ZtS8UiZt+DElEi59izRAVSSIct4jfRql0ahvI99y9vn8mAJbhxDTUb9CIinE5xvZo/OcEAeE/aqgPZSjIpTqNDKVRaYbn9pSZR8kjwAaB9aDjkj23cNvuXHIAWYEknUZyE4RDV5USODTd4T+TxJqm1m4b7RO8ROreg092bwgqj/73UV/iAvJ1vC8oe0VT4ez31YS7aJ7+ShbovNaIx+IGstJKCbOc4QiRzjKA1k5RIbCD827p+DwP6NnFPKu7Qk3ZGP1MNKuSfeDfTGzAR17bsRldJfgo0ggiEiEzYmnyojHooMLNoXXPZKxTc2cTEYr9bHTY3udixTZik2PTzIRfL6RUJoG0PLwHsyh5LOu/dpxFaoPxJGHN3BWDeF+zctVYpUcve7qxHOQEge9pvQjqabDXEMzSCcPi0NIn4a8Aw8R6/bF/3LoJbSaKATH1wmMez6opgeBx9KpjzJFFZPPStjXuD4rc3l/vSJ65ZWpgdcYXsU846QRkMSN3CB4cDJqh0y4spicroaRIqx6fraJsJ+YNdll8s3/eZZlzlb19D6f9UEK7xSJhshE9uQCO6LwQ7ZPhsYnGuL5ij1ihjtTrUbK9USeH3gYj0wt007fpMc0JSaYeOtiwHKDY5GhC+aUEZsp8DUCwbJKtW/s8X3NuBCq9G2VHHHFzUzomg06diVxgjZmo50UrRRmGd8Pp8vpFB++X/S6A3aq5UTfUMB4+3/GBIidQ== 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: List-Subscribe: List-Unsubscribe: On Tue, Jul 02, 2024 at 08:57:57AM +0200, David Hildenbrand wrote: >On 02.07.24 04:09, Wei Yang wrote: >> The prefetchw() is introduced from an ancient patch[1]. >> >> The change log says: >> >> The basic idea is to free higher order pages instead of going >> through every single one. Also, some unnecessary atomic operations >> are done away with and replaced with non-atomic equivalents, and >> prefetching is done where it helps the most. For a more in-depth >> discusion of this patch, please see the linux-ia64 archives (topic >> is "free bootmem feedback patch"). >> >> So there are several changes improve the bootmem freeing, in which the >> most basic idea is freeing higher order pages. And as Matthew says, >> "Itanium CPUs of this era had no prefetchers." >> >> I did 10 round bootup tests before and after this change, the data >> doesn't prove prefetchw() help speeding up bootmem freeing. The sum of >> the 10 round bootmem freeing time after prefetchw() removal even 5.2% >> faster than before. > >I suspect this is noise, though. > >> >> [1]: https://lore.kernel.org/linux-ia64/40F46962.4090604@sgi.com/ >> >> Signed-off-by: Wei Yang >> Suggested-by: Matthew Wilcox >> CC: David Hildenbrand >> >> --- >> The patch is based on mm-stable with David's change. >> --- >> mm/page_alloc.c | 13 ++----------- >> 1 file changed, 2 insertions(+), 11 deletions(-) >> >> diff --git a/mm/page_alloc.c b/mm/page_alloc.c >> index 116ee33fd1ce..c46aedfc9a12 100644 >> --- a/mm/page_alloc.c >> +++ b/mm/page_alloc.c >> @@ -1236,16 +1236,11 @@ void __meminit __free_pages_core(struct page *page, unsigned int order, >> */ >> if (IS_ENABLED(CONFIG_MEMORY_HOTPLUG) && >> unlikely(context == MEMINIT_HOTPLUG)) { >> - prefetchw(p); >> - for (loop = 0; loop < (nr_pages - 1); loop++, p++) { >> - prefetchw(p + 1); >> + for (loop = 0; loop < nr_pages; loop++, p++) { >> VM_WARN_ON_ONCE(PageReserved(p)); >> __ClearPageOffline(p); >> set_page_count(p, 0); >> } > >Something like: > >for (;;) { > ... > if (++loop >= nr_pages) > break; > p++; >} > So you prefer to have another version with this format? Sth like this? diff --git a/mm/page_alloc.c b/mm/page_alloc.c index c46aedfc9a12..5235015eba3d 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -1224,7 +1224,7 @@ void __meminit __free_pages_core(struct page *page, unsigned int order, { unsigned int nr_pages = 1 << order; struct page *p = page; - unsigned int loop; + unsigned int loop = 0; /* * When initializing the memmap, __init_single_page() sets the refcount @@ -1236,10 +1236,13 @@ void __meminit __free_pages_core(struct page *page, unsigned int order, */ if (IS_ENABLED(CONFIG_MEMORY_HOTPLUG) && unlikely(context == MEMINIT_HOTPLUG)) { - for (loop = 0; loop < nr_pages; loop++, p++) { + for (;;) { VM_WARN_ON_ONCE(PageReserved(p)); __ClearPageOffline(p); set_page_count(p, 0); + if (++loop >= nr_pages) + break; + p++; } /* @@ -1250,9 +1253,12 @@ void __meminit __free_pages_core(struct page *page, unsigned int order, debug_pagealloc_map_pages(page, nr_pages); adjust_managed_page_count(page, nr_pages); } else { - for (loop = 0; loop < nr_pages; loop++, p++) { + for (;;) { __ClearPageReserved(p); set_page_count(p, 0); + if (++loop >= nr_pages) + break; + p++; } /* memblock adjusts totalram_pages() manually. */ > >Might generate slightly better code, because we know that we execute the loop >body at least once. We use that in set_ptes(), for example. > >> - VM_WARN_ON_ONCE(PageReserved(p)); >> - __ClearPageOffline(p); >> - set_page_count(p, 0); >> /* >> * Freeing the page with debug_pagealloc enabled will try to >> @@ -1255,14 +1250,10 @@ void __meminit __free_pages_core(struct page *page, unsigned int order, >> debug_pagealloc_map_pages(page, nr_pages); >> adjust_managed_page_count(page, nr_pages); >> } else { >> - prefetchw(p); >> - for (loop = 0; loop < (nr_pages - 1); loop++, p++) { >> - prefetchw(p + 1); >> + for (loop = 0; loop < nr_pages; loop++, p++) { >> __ClearPageReserved(p); >> set_page_count(p, 0); >> } >> - __ClearPageReserved(p); >> - set_page_count(p, 0); >> /* memblock adjusts totalram_pages() manually. */ >> atomic_long_add(nr_pages, &page_zone(page)->managed_pages); > >Much better > >Reviewed-by: David Hildenbrand > >-- >Cheers, > >David / dhildenb -- Wei Yang Help you, Help me