Message ID | 20210715033704.692967-36-willy@infradead.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Memory folios | expand |
Matthew Wilcox (Oracle) <willy@infradead.org> wrote: > By using the node id in mem_cgroup_update_tree(), we can delete > soft_limit_tree_from_page() and mem_cgroup_page_nodeinfo(). Saves 42 > bytes of kernel text on my config. > > Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org> > Acked-by: Michal Hocko <mhocko@suse.com> > Acked-by: Johannes Weiner <hannes@cmpxchg.org> > Reviewed-by: Christoph Hellwig <hch@lst.de> Reviewed-by: David Howells <dhowells@redhat.com> Though I wonder if: > - mz = mem_cgroup_page_nodeinfo(memcg, page); > + mz = memcg->nodeinfo[nid]; should still have some sort of wrapper function.
On 7/15/21 5:35 AM, Matthew Wilcox (Oracle) wrote: > By using the node id in mem_cgroup_update_tree(), we can delete > soft_limit_tree_from_page() and mem_cgroup_page_nodeinfo(). Saves 42 > bytes of kernel text on my config. > > Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org> > Acked-by: Michal Hocko <mhocko@suse.com> > Acked-by: Johannes Weiner <hannes@cmpxchg.org> > Reviewed-by: Christoph Hellwig <hch@lst.de> Acked-by: Vlastimil Babka <vbabka@suse.cz>
On Tue, Aug 10, 2021 at 09:06:52PM +0100, David Howells wrote: > Matthew Wilcox (Oracle) <willy@infradead.org> wrote: > > > By using the node id in mem_cgroup_update_tree(), we can delete > > soft_limit_tree_from_page() and mem_cgroup_page_nodeinfo(). Saves 42 > > bytes of kernel text on my config. > > > > Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org> > > Acked-by: Michal Hocko <mhocko@suse.com> > > Acked-by: Johannes Weiner <hannes@cmpxchg.org> > > Reviewed-by: Christoph Hellwig <hch@lst.de> > > Reviewed-by: David Howells <dhowells@redhat.com> > > Though I wonder if: > > > - mz = mem_cgroup_page_nodeinfo(memcg, page); > > + mz = memcg->nodeinfo[nid]; > > should still have some sort of wrapper function. I was asked to remove the wrapper function as it didn't provide enough utility to warrant the indirection.
diff --git a/mm/memcontrol.c b/mm/memcontrol.c index ee892daecb8b..d57ff5c5d330 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -451,28 +451,12 @@ ino_t page_cgroup_ino(struct page *page) return ino; } -static struct mem_cgroup_per_node * -mem_cgroup_page_nodeinfo(struct mem_cgroup *memcg, struct page *page) -{ - int nid = page_to_nid(page); - - return memcg->nodeinfo[nid]; -} - static struct mem_cgroup_tree_per_node * soft_limit_tree_node(int nid) { return soft_limit_tree.rb_tree_per_node[nid]; } -static struct mem_cgroup_tree_per_node * -soft_limit_tree_from_page(struct page *page) -{ - int nid = page_to_nid(page); - - return soft_limit_tree.rb_tree_per_node[nid]; -} - static void __mem_cgroup_insert_exceeded(struct mem_cgroup_per_node *mz, struct mem_cgroup_tree_per_node *mctz, unsigned long new_usage_in_excess) @@ -543,13 +527,13 @@ static unsigned long soft_limit_excess(struct mem_cgroup *memcg) return excess; } -static void mem_cgroup_update_tree(struct mem_cgroup *memcg, struct page *page) +static void mem_cgroup_update_tree(struct mem_cgroup *memcg, int nid) { unsigned long excess; struct mem_cgroup_per_node *mz; struct mem_cgroup_tree_per_node *mctz; - mctz = soft_limit_tree_from_page(page); + mctz = soft_limit_tree_node(nid); if (!mctz) return; /* @@ -557,7 +541,7 @@ static void mem_cgroup_update_tree(struct mem_cgroup *memcg, struct page *page) * because their event counter is not touched. */ for (; memcg; memcg = parent_mem_cgroup(memcg)) { - mz = mem_cgroup_page_nodeinfo(memcg, page); + mz = memcg->nodeinfo[nid]; excess = soft_limit_excess(memcg); /* * We have to update the tree if mz is on RB-tree or @@ -884,7 +868,7 @@ static void memcg_check_events(struct mem_cgroup *memcg, struct page *page) MEM_CGROUP_TARGET_SOFTLIMIT); mem_cgroup_threshold(memcg); if (unlikely(do_softlimit)) - mem_cgroup_update_tree(memcg, page); + mem_cgroup_update_tree(memcg, page_to_nid(page)); } }