From: Ben Widawsky <ben.widawsky@intel.com>
To: linux-mm <linux-mm@kvack.org>
Cc: Ben Widawsky <ben.widawsky@intel.com>,
Andrew Morton <akpm@linux-foundation.org>,
Michal Hocko <mhocko@kernel.org>, Tejun Heo <tj@kernel.org>
Subject: [PATCH 17/18] mm: Use less stack for page allocations
Date: Fri, 19 Jun 2020 09:24:24 -0700 [thread overview]
Message-ID: <20200619162425.1052382-18-ben.widawsky@intel.com> (raw)
In-Reply-To: <20200619162425.1052382-1-ben.widawsky@intel.com>
After converting __alloc_pages_nodemask to take in a preferred
nodoemask, __alloc_pages_node is left holding the bag as requiring stack
space since it needs to generate a nodemask for the specific node.
The patch attempts to remove all callers of it unless absolutely
necessary to avoid using stack space which is theoretically significant
in huge NUMA systems.
It turns out there aren't too many opportunities to do this as all
callers know exactly what they want. The difference between
__alloc_pages_node and alloc_pages_node is the former is meant for
explicit node allocation while the latter support providing no
preference (by specifying NUMA_NO_NODE as nid). Now it becomes clear
that NUMA_NO_NODE can be implemented without using stack space via some
of the newer functions that have been added, in particular,
__alloc_pages_nodes and __alloc_pages_nodemask.
In the non NUMA case, alloc_pages used numa_node_id(), which is 0.
Switching to NUMA_NO_NODE allows us to avoid using the stack.
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Michal Hocko <mhocko@kernel.org>
Cc: Tejun Heo <tj@kernel.org>
Signed-off-by: Ben Widawsky <ben.widawsky@intel.com>
---
include/linux/gfp.h | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/include/linux/gfp.h b/include/linux/gfp.h
index 47e9c02c17ae..e78982ef9349 100644
--- a/include/linux/gfp.h
+++ b/include/linux/gfp.h
@@ -532,7 +532,7 @@ static inline struct page *alloc_pages_node(int nid, gfp_t gfp_mask,
unsigned int order)
{
if (nid == NUMA_NO_NODE)
- nid = numa_mem_id();
+ return __alloc_pages_nodes(NULL, gfp_mask, order);
return __alloc_pages_node(nid, gfp_mask, order);
}
@@ -551,8 +551,8 @@ extern struct page *alloc_pages_vma(gfp_t gfp_mask, int order,
#define alloc_hugepage_vma(gfp_mask, vma, addr, order) \
alloc_pages_vma(gfp_mask, order, vma, addr, numa_node_id(), true)
#else
-#define alloc_pages(gfp_mask, order) \
- alloc_pages_node(numa_node_id(), gfp_mask, order)
+#define alloc_pages(gfp_mask, order) \
+ alloc_pages_node(NUMA_NO_NODE, gfp_mask, order)
#define alloc_pages_vma(gfp_mask, order, vma, addr, node, false)\
alloc_pages(gfp_mask, order)
#define alloc_hugepage_vma(gfp_mask, vma, addr, order) \
--
2.27.0
next prev parent reply other threads:[~2020-06-19 16:25 UTC|newest]
Thread overview: 43+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-06-19 16:24 [PATCH 00/18] multiple preferred nodes Ben Widawsky
2020-06-19 16:24 ` [PATCH 01/18] mm/mempolicy: Add comment for missing LOCAL Ben Widawsky
2020-06-24 7:55 ` Michal Hocko
2020-06-19 16:24 ` [PATCH 02/18] mm/mempolicy: Use node_mem_id() instead of node_id() Ben Widawsky
2020-06-24 8:25 ` Michal Hocko
2020-06-24 16:48 ` Ben Widawsky
2020-06-26 12:30 ` Michal Hocko
2020-06-19 16:24 ` [PATCH 03/18] mm/page_alloc: start plumbing multi preferred node Ben Widawsky
2020-06-19 16:24 ` [PATCH 04/18] mm/page_alloc: add preferred pass to page allocation Ben Widawsky
2020-06-19 16:24 ` [PATCH 05/18] mm/mempolicy: convert single preferred_node to full nodemask Ben Widawsky
2020-06-19 16:24 ` [PATCH 06/18] mm/mempolicy: Add MPOL_PREFERRED_MANY for multiple preferred nodes Ben Widawsky
2020-06-19 16:24 ` [PATCH 07/18] mm/mempolicy: allow preferred code to take a nodemask Ben Widawsky
2020-06-19 16:24 ` [PATCH 08/18] mm/mempolicy: refactor rebind code for PREFERRED_MANY Ben Widawsky
2020-06-19 16:24 ` [PATCH 09/18] mm: Finish handling MPOL_PREFERRED_MANY Ben Widawsky
2020-06-19 16:24 ` [PATCH 10/18] mm: clean up alloc_pages_vma (thp) Ben Widawsky
2020-06-19 16:24 ` [PATCH 11/18] mm: Extract THP hugepage allocation Ben Widawsky
2020-06-19 16:24 ` [PATCH 12/18] mm/mempolicy: Use __alloc_page_node for interleaved Ben Widawsky
2020-06-19 16:24 ` [PATCH 13/18] mm: kill __alloc_pages Ben Widawsky
2020-06-19 16:24 ` [PATCH 14/18] mm/mempolicy: Introduce policy_preferred_nodes() Ben Widawsky
2020-06-19 16:24 ` [PATCH 15/18] mm: convert callers of __alloc_pages_nodemask to pmask Ben Widawsky
2020-06-19 16:24 ` [PATCH 16/18] alloc_pages_nodemask: turn preferred nid into a nodemask Ben Widawsky
2020-06-19 16:24 ` Ben Widawsky [this message]
2020-06-19 16:24 ` [PATCH 18/18] mm/mempolicy: Advertise new MPOL_PREFERRED_MANY Ben Widawsky
2020-06-22 7:09 ` [PATCH 00/18] multiple preferred nodes Michal Hocko
2020-06-23 11:20 ` Michal Hocko
2020-06-23 16:12 ` Ben Widawsky
2020-06-24 7:52 ` Michal Hocko
2020-06-24 16:16 ` Ben Widawsky
2020-06-24 18:39 ` Michal Hocko
2020-06-24 19:37 ` Ben Widawsky
2020-06-24 19:51 ` Michal Hocko
2020-06-24 20:01 ` Ben Widawsky
2020-06-24 20:07 ` Michal Hocko
2020-06-24 20:23 ` Ben Widawsky
2020-06-24 20:42 ` Michal Hocko
2020-06-24 20:55 ` Ben Widawsky
2020-06-25 6:28 ` Michal Hocko
2020-06-26 21:39 ` Ben Widawsky
2020-06-29 10:16 ` Michal Hocko
2020-06-22 20:54 ` Andi Kleen
2020-06-22 21:02 ` Ben Widawsky
2020-06-22 21:07 ` Dave Hansen
2020-06-22 22:02 ` Andi Kleen
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20200619162425.1052382-18-ben.widawsky@intel.com \
--to=ben.widawsky@intel.com \
--cc=akpm@linux-foundation.org \
--cc=linux-mm@kvack.org \
--cc=mhocko@kernel.org \
--cc=tj@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox