From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754712AbcFPPGw (ORCPT ); Thu, 16 Jun 2016 11:06:52 -0400 Received: from mx2.suse.de ([195.135.220.15]:57493 "EHLO mx2.suse.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754047AbcFPPGt (ORCPT ); Thu, 16 Jun 2016 11:06:49 -0400 Subject: Re: [PATCH 13/27] mm, memcg: Move memcg limit enforcement from zones to nodes To: Mel Gorman , Andrew Morton , Linux-MM References: <1465495483-11855-1-git-send-email-mgorman@techsingularity.net> <1465495483-11855-14-git-send-email-mgorman@techsingularity.net> Cc: Rik van Riel , Johannes Weiner , LKML From: Vlastimil Babka Message-ID: <2aea9490-99aa-4e55-e7ca-22b695eee1da@suse.cz> Date: Thu, 16 Jun 2016 17:06:46 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.1.1 MIME-Version: 1.0 In-Reply-To: <1465495483-11855-14-git-send-email-mgorman@techsingularity.net> Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 06/09/2016 08:04 PM, Mel Gorman wrote: > Memcg was broken by the move of all LRUs to nodes because it is tracking > limits on a per-zone basis while receiving reclaim requests on a per-node > basis. This patch moves limit enforcement to the nodes. Technically, all > the variable names should also change but people are already familiar by > the meaning of "mz" even if "mn" would be a more appropriate name now. > > Signed-off-by: Mel Gorman Didn't spot bugs, but I'm not that familiar with memcg. Noticed some things below to further optimize/cleanup. [...] > @@ -323,13 +319,10 @@ EXPORT_SYMBOL(memcg_kmem_enabled_key); > > #endif /* !CONFIG_SLOB */ > > -static struct mem_cgroup_per_zone * > -mem_cgroup_zone_zoneinfo(struct mem_cgroup *memcg, struct zone *zone) > +static struct mem_cgroup_per_node * > +mem_cgroup_nodeinfo(struct mem_cgroup *memcg, pg_data_t *pgdat) > { > - int nid = zone_to_nid(zone); > - int zid = zone_idx(zone); > - > - return &memcg->nodeinfo[nid]->zoneinfo[zid]; > + return memcg->nodeinfo[pgdat->node_id]; I've noticed most callers pass NODE_DATA(nid) as second parameter, which is quite wasteful to just obtain back the node_id (I doubt the compiler can know that they will be the same?). So it would be more efficient to use nid instead of pg_data_t pointer in the signature. > } > > /** > @@ -383,37 +376,35 @@ ino_t page_cgroup_ino(struct page *page) > return ino; > } > > -static struct mem_cgroup_per_zone * > +static struct mem_cgroup_per_node * > mem_cgroup_page_zoneinfo(struct mem_cgroup *memcg, struct page *page) This could be renamed to _nodeinfo()? > { > int nid = page_to_nid(page); > - int zid = page_zonenum(page); > > - return &memcg->nodeinfo[nid]->zoneinfo[zid]; > + return memcg->nodeinfo[nid]; > } >