[Devel] [PATCH RHEL7 COMMIT] ms/fs: propagate shrinker::id to list_lru

Konstantin Khorenko khorenko at virtuozzo.com
Wed Sep 5 12:37:10 MSK 2018


The commit is pushed to "branch-rh7-3.10.0-862.11.6.vz7.71.x-ovz" and will appear at https://src.openvz.org/scm/ovz/vzkernel.git
after rh7-3.10.0-862.11.6.vz7.71.8
------>
commit ae87e8cb865fa68a8e44cf28bbae654001190218
Author: Kirill Tkhai <ktkhai at virtuozzo.com>
Date:   Wed Sep 5 12:37:10 2018 +0300

    ms/fs: propagate shrinker::id to list_lru
    
    ms commit c92e8e10cafe (modified)
    
    Add list_lru::shrinker_id field and populate it by registered shrinker id.
    
    This will be used to set correct bit in memcg shrinkers map by lru code
    in next patches, after there appeared the first related to memcg element
    in list_lru.
    
    Signed-off-by: Kirill Tkhai <ktkhai at virtuozzo.com>
    
    =====================
    Patchset description:
    
    Port "Improve shrink_slab() scalability" patchset
    
    https://jira.sw.ru/browse/PSBM-88027
    
    This is backport of the patchset improving the performance
    of overcommited containers with many memcgs and mounts.
    The original set is in Linus' tree, and came into 4.19-rc1.
    
    Kirill Tkhai (12):
          mm: assign id to every memcg-aware shrinker
          mm/memcontrol.c: move up for_each_mem_cgroup{, _tree} defines
          mm, memcg: assign memcg-aware shrinkers bitmap to memcg
          fs: propagate shrinker::id to list_lru
          mm/list_lru.c: add memcg argument to list_lru_from_kmem()
          mm/list_lru: pass dst_memcg argument to memcg_drain_list_lru_node()
          mm/list_lru.c: pass lru argument to memcg_drain_list_lru_node()
          mm/list_lru.c: set bit in memcg shrinker bitmap on first list_lru item appearance
          mm/memcontrol.c: export mem_cgroup_is_root()
          mm/vmscan.c: iterate only over charged shrinkers during memcg shrink_slab()
          mm: add SHRINK_EMPTY shrinker methods return value
          mm/vmscan.c: clear shrinker bit if there are no objects related to memcg
    
    Vladimir Davydov (1):
          mm/vmscan.c: generalize shrink_slab() calls in shrink_node()
---
 fs/super.c               | 3 +++
 include/linux/list_lru.h | 1 +
 mm/list_lru.c            | 7 +++++++
 3 files changed, 11 insertions(+)

diff --git a/fs/super.c b/fs/super.c
index 7e6352370a45..162ca145940f 100644
--- a/fs/super.c
+++ b/fs/super.c
@@ -543,6 +543,9 @@ struct super_block *sget_userns(struct file_system_type *type,
 		deactivate_locked_super(s);
 		s = ERR_PTR(err);
 	}
+
+	s->s_dentry_lru.shrinker_id = s->s_shrink.id;
+	s->s_inode_lru.shrinker_id = s->s_shrink.id;
 	return s;
 }
 
diff --git a/include/linux/list_lru.h b/include/linux/list_lru.h
index 00a339b9415d..aee40a87360c 100644
--- a/include/linux/list_lru.h
+++ b/include/linux/list_lru.h
@@ -51,6 +51,7 @@ struct list_lru {
 	struct list_lru_node	*node;
 #ifdef CONFIG_MEMCG_KMEM
 	struct list_head	list;
+	int			shrinker_id;
 #endif
 };
 
diff --git a/mm/list_lru.c b/mm/list_lru.c
index 91dccc1e30bf..514a862717c5 100644
--- a/mm/list_lru.c
+++ b/mm/list_lru.c
@@ -543,6 +543,10 @@ int __list_lru_init(struct list_lru *lru, bool memcg_aware,
 
 	memcg_get_cache_ids();
 
+#ifdef CONFIG_MEMCG_KMEM
+	lru->shrinker_id = -1;
+#endif
+
 	lru->node = kzalloc(size, GFP_KERNEL);
 	if (!lru->node)
 		goto out;
@@ -583,6 +587,9 @@ void list_lru_destroy(struct list_lru *lru)
 	kfree(lru->node);
 	lru->node = NULL;
 
+#ifdef CONFIG_MEMCG_KMEM
+	lru->shrinker_id = -1;
+#endif
 	memcg_put_cache_ids();
 }
 EXPORT_SYMBOL_GPL(list_lru_destroy);


More information about the Devel mailing list