mm, vmscan: make shrink_node decisions more node-centric
Earlier patches focused on having direct reclaim and kswapd use data that is node-centric for reclaiming but shrink_node() itself still uses too much zone information. This patch removes unnecessary zone-based information with the most important decision being whether to continue reclaim or not. Some memcg APIs are adjusted as a result even though memcg itself still uses some zone information. [mgorman@techsingularity.net: optimization] Link: http://lkml.kernel.org/r/1468588165-12461-2-git-send-email-mgorman@techsingularity.net Link: http://lkml.kernel.org/r/1467970510-21195-14-git-send-email-mgorman@techsingularity.net Signed-off-by: Mel Gorman <mgorman@techsingularity.net> Acked-by: Michal Hocko <mhocko@suse.com> Acked-by: Vlastimil Babka <vbabka@suse.cz> Cc: Hillf Danton <hillf.zj@alibaba-inc.com> Acked-by: Johannes Weiner <hannes@cmpxchg.org> Cc: Joonsoo Kim <iamjoonsoo.kim@lge.com> Cc: Minchan Kim <minchan@kernel.org> Cc: Rik van Riel <riel@surriel.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:

committed by
Linus Torvalds

parent
86c79f6b54
commit
a9dd0a8310
@@ -324,22 +324,23 @@ mem_cgroup_zone_zoneinfo(struct mem_cgroup *memcg, struct zone *zone)
|
||||
}
|
||||
|
||||
/**
|
||||
* mem_cgroup_zone_lruvec - get the lru list vector for a zone and memcg
|
||||
* mem_cgroup_lruvec - get the lru list vector for a node or a memcg zone
|
||||
* @node: node of the wanted lruvec
|
||||
* @zone: zone of the wanted lruvec
|
||||
* @memcg: memcg of the wanted lruvec
|
||||
*
|
||||
* Returns the lru list vector holding pages for the given @zone and
|
||||
* @mem. This can be the global zone lruvec, if the memory controller
|
||||
* Returns the lru list vector holding pages for a given @node or a given
|
||||
* @memcg and @zone. This can be the node lruvec, if the memory controller
|
||||
* is disabled.
|
||||
*/
|
||||
static inline struct lruvec *mem_cgroup_zone_lruvec(struct zone *zone,
|
||||
struct mem_cgroup *memcg)
|
||||
static inline struct lruvec *mem_cgroup_lruvec(struct pglist_data *pgdat,
|
||||
struct zone *zone, struct mem_cgroup *memcg)
|
||||
{
|
||||
struct mem_cgroup_per_zone *mz;
|
||||
struct lruvec *lruvec;
|
||||
|
||||
if (mem_cgroup_disabled()) {
|
||||
lruvec = zone_lruvec(zone);
|
||||
lruvec = node_lruvec(pgdat);
|
||||
goto out;
|
||||
}
|
||||
|
||||
@@ -609,10 +610,10 @@ static inline void mem_cgroup_migrate(struct page *old, struct page *new)
|
||||
{
|
||||
}
|
||||
|
||||
static inline struct lruvec *mem_cgroup_zone_lruvec(struct zone *zone,
|
||||
struct mem_cgroup *memcg)
|
||||
static inline struct lruvec *mem_cgroup_lruvec(struct pglist_data *pgdat,
|
||||
struct zone *zone, struct mem_cgroup *memcg)
|
||||
{
|
||||
return zone_lruvec(zone);
|
||||
return node_lruvec(pgdat);
|
||||
}
|
||||
|
||||
static inline struct lruvec *mem_cgroup_page_lruvec(struct page *page,
|
||||
|
Reference in New Issue
Block a user