[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <150340381428.3845.6099251634440472539.stgit@localhost.localdomain>
Date: Tue, 22 Aug 2017 15:29:08 +0300
From: Kirill Tkhai <ktkhai@...tuozzo.com>
To: apolyakov@...et.ru, linux-kernel@...r.kernel.org,
linux-mm@...ck.org, ktkhai@...tuozzo.com, vdavydov.dev@...il.com,
aryabinin@...tuozzo.com, akpm@...ux-foundation.org
Subject: [PATCH 0/3] Make count list_lru_one::nr_items lockless
This series aims to improve scalability of list_lru shrinking
and to make list_lru_count_one() working more effective.
On RHEL7 3.10 kernel I observe high system time usage and time
spent in super_cache_count() during slab shrinking:
0,94% mysqld [kernel.vmlinux] [k] _raw_spin_lock [k] _raw_spin_lock
0,57% mysqld [kernel.vmlinux] [k] shrink_slab [k] shrink_slab
0,51% mysqld [kernel.vmlinux] [k] super_cache_count [k] super_cache_count
0,32% mysqld [kernel.vmlinux] [k] __list_lru_count_one.isra.2 [k] _raw_spin_lock
0,32% mysqld [kernel.vmlinux] [k] list_lru_count_one [k] __list_lru_count_one.isra.2
(percentage of all node time; collected via $perf record --call-graph fp -j k -a).
It's an example, how the processes traces look like. And many processes spend time
in the above.
There is a node with many containers (more, than 200), and (as it's usually happen)
containers have no free memory (cache is actively used). Since shrink_slab() iterates
all superblocks, and it happens frequently, the shrink scales badly, and node spends
in sys more than 90% of time.
The patchset makes list_lru_count_one() lockless via RCU technics. Patch [1/3]
adds a new rcu field to struct list_lru_memcg and makes functions account its
size during allocations. Patch [2/3] makes list_lru_node::memcg_lrus RCU-protected
and RCU-accessible. Patch [3/3] removes the lock and adds rcu read protection
into __list_lru_count_one().
---
Kirill Tkhai (3):
mm: Add rcu field to struct list_lru_memcg
mm: Make list_lru_node::memcg_lrus RCU protected
mm: Count list_lru_one::nr_items lockless
include/linux/list_lru.h | 3 +-
mm/list_lru.c | 77 ++++++++++++++++++++++++++++++----------------
2 files changed, 53 insertions(+), 27 deletions(-)
--
Signed-off-by: Kirill Tkhai <ktkhai@...tuozzo.com>
Powered by blists - more mailing lists