From: Kirill Tkhai <ktkhai@virtuozzo.com>
To: apolyakov@beget.ru, linux-kernel@vger.kernel.org,
linux-mm@kvack.org, ktkhai@virtuozzo.com, vdavydov.dev@gmail.com,
aryabinin@virtuozzo.com, akpm@linux-foundation.org
Subject: [PATCH 0/3] Make count list_lru_one::nr_items lockless
Date: Tue, 22 Aug 2017 15:29:08 +0300 [thread overview]
Message-ID: <150340381428.3845.6099251634440472539.stgit@localhost.localdomain> (raw)
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@virtuozzo.com>
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
next reply other threads:[~2017-08-22 12:29 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-08-22 12:29 Kirill Tkhai [this message]
2017-08-22 12:29 ` [PATCH 1/3] mm: Add rcu field to struct list_lru_memcg Kirill Tkhai
2017-08-22 12:29 ` [PATCH 2/3] mm: Make list_lru_node::memcg_lrus RCU protected Kirill Tkhai
2017-08-22 19:34 ` Vladimir Davydov
2017-08-22 12:29 ` [PATCH 3/3] mm: Count list_lru_one::nr_items lockless Kirill Tkhai
2017-08-22 19:47 ` Vladimir Davydov
2017-08-23 8:00 ` Kirill Tkhai
2017-08-23 8:27 ` Vladimir Davydov
2017-08-23 12:26 ` Kirill Tkhai
2017-08-26 17:57 ` Vladimir Davydov
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=150340381428.3845.6099251634440472539.stgit@localhost.localdomain \
--to=ktkhai@virtuozzo.com \
--cc=akpm@linux-foundation.org \
--cc=apolyakov@beget.ru \
--cc=aryabinin@virtuozzo.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=vdavydov.dev@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).