From: Tejun Heo <tj@kernel.org>
To: akpm@linux-foundation.org, hannes@cmpxchg.org, mhocko@kernel.org
Cc: cgroups@vger.kernel.org, linux-mm@kvack.org,
vdavydov@parallels.com, kernel-team@fb.com
Subject: [PATCH 1/2] memcg: flatten task_struct->memcg_oom
Date: Sun, 13 Sep 2015 14:59:40 -0400 [thread overview]
Message-ID: <20150913185940.GA25369@htj.duckdns.org> (raw)
task_struct->memcg_oom is a sub-struct containing fields which are
used for async memcg oom handling. Most task_struct fields aren't
packaged this way and it can lead to unnecessary alignment paddings.
This patch flattens it.
* task.memcg_oom.memcg -> task.memcg_in_oom
* task.memcg_oom.gfp_mask -> task.memcg_oom_gfp_mask
* task.memcg_oom.order -> task.memcg_oom_order
* task.memcg_oom.may_oom -> task.memcg_may_oom
In addition, task.memcg_may_oom is relocated to where other bitfields
are which reduces the size of task_struct.
Signed-off-by: Tejun Heo <tj@kernel.org>
Acked-by: Michal Hocko <mhocko@suse.com>
Reviewed-by: Vladimir Davydov <vdavydov@parallels.com>
---
Hello,
Andrew, these are the two patches which got acked from the following
thread.
http://lkml.kernel.org/g/20150828220158.GD11089@htj.dyndns.org
Acks are added and the second patch's description is updated as
suggested by Michal and Vladimir.
Can you please put them in -mm?
Thanks!
include/linux/memcontrol.h | 10 +++++-----
include/linux/sched.h | 13 ++++++-------
mm/memcontrol.c | 16 ++++++++--------
3 files changed, 19 insertions(+), 20 deletions(-)
--- a/include/linux/memcontrol.h
+++ b/include/linux/memcontrol.h
@@ -407,19 +407,19 @@ void mem_cgroup_print_oom_info(struct me
static inline void mem_cgroup_oom_enable(void)
{
- WARN_ON(current->memcg_oom.may_oom);
- current->memcg_oom.may_oom = 1;
+ WARN_ON(current->memcg_may_oom);
+ current->memcg_may_oom = 1;
}
static inline void mem_cgroup_oom_disable(void)
{
- WARN_ON(!current->memcg_oom.may_oom);
- current->memcg_oom.may_oom = 0;
+ WARN_ON(!current->memcg_may_oom);
+ current->memcg_may_oom = 0;
}
static inline bool task_in_memcg_oom(struct task_struct *p)
{
- return p->memcg_oom.memcg;
+ return p->memcg_in_oom;
}
bool mem_cgroup_oom_synchronize(bool wait);
--- a/include/linux/sched.h
+++ b/include/linux/sched.h
@@ -1451,7 +1451,9 @@ struct task_struct {
unsigned sched_reset_on_fork:1;
unsigned sched_contributes_to_load:1;
unsigned sched_migrated:1;
-
+#ifdef CONFIG_MEMCG
+ unsigned memcg_may_oom:1;
+#endif
#ifdef CONFIG_MEMCG_KMEM
unsigned memcg_kmem_skip_account:1;
#endif
@@ -1782,12 +1784,9 @@ struct task_struct {
unsigned long trace_recursion;
#endif /* CONFIG_TRACING */
#ifdef CONFIG_MEMCG
- struct memcg_oom_info {
- struct mem_cgroup *memcg;
- gfp_t gfp_mask;
- int order;
- unsigned int may_oom:1;
- } memcg_oom;
+ struct mem_cgroup *memcg_in_oom;
+ gfp_t memcg_oom_gfp_mask;
+ int memcg_oom_order;
#endif
#ifdef CONFIG_UPROBES
struct uprobe_task *utask;
--- a/mm/memcontrol.c
+++ b/mm/memcontrol.c
@@ -1652,7 +1652,7 @@ static void memcg_oom_recover(struct mem
static void mem_cgroup_oom(struct mem_cgroup *memcg, gfp_t mask, int order)
{
- if (!current->memcg_oom.may_oom)
+ if (!current->memcg_may_oom)
return;
/*
* We are in the middle of the charge context here, so we
@@ -1669,9 +1669,9 @@ static void mem_cgroup_oom(struct mem_cg
* and when we know whether the fault was overall successful.
*/
css_get(&memcg->css);
- current->memcg_oom.memcg = memcg;
- current->memcg_oom.gfp_mask = mask;
- current->memcg_oom.order = order;
+ current->memcg_in_oom = memcg;
+ current->memcg_oom_gfp_mask = mask;
+ current->memcg_oom_order = order;
}
/**
@@ -1693,7 +1693,7 @@ static void mem_cgroup_oom(struct mem_cg
*/
bool mem_cgroup_oom_synchronize(bool handle)
{
- struct mem_cgroup *memcg = current->memcg_oom.memcg;
+ struct mem_cgroup *memcg = current->memcg_in_oom;
struct oom_wait_info owait;
bool locked;
@@ -1721,8 +1721,8 @@ bool mem_cgroup_oom_synchronize(bool han
if (locked && !memcg->oom_kill_disable) {
mem_cgroup_unmark_under_oom(memcg);
finish_wait(&memcg_oom_waitq, &owait.wait);
- mem_cgroup_out_of_memory(memcg, current->memcg_oom.gfp_mask,
- current->memcg_oom.order);
+ mem_cgroup_out_of_memory(memcg, current->memcg_oom_gfp_mask,
+ current->memcg_oom_order);
} else {
schedule();
mem_cgroup_unmark_under_oom(memcg);
@@ -1739,7 +1739,7 @@ bool mem_cgroup_oom_synchronize(bool han
memcg_oom_recover(memcg);
}
cleanup:
- current->memcg_oom.memcg = NULL;
+ current->memcg_in_oom = NULL;
css_put(&memcg->css);
return true;
}
--
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:[~2015-09-13 18:59 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-09-13 18:59 Tejun Heo [this message]
2015-09-13 19:00 ` [PATCH v3 2/2] memcg: punt high overage reclaim to return-to-userland path Tejun Heo
2015-09-15 7:47 ` Johannes Weiner
2015-09-15 15:53 ` Tejun Heo
2015-09-15 16:12 ` Johannes Weiner
2015-09-15 16:22 ` Tejun Heo
2015-09-15 16:33 ` Johannes Weiner
2015-09-15 7:37 ` [PATCH 1/2] memcg: flatten task_struct->memcg_oom Johannes Weiner
2015-09-20 14:45 ` Sasha Levin
2015-09-21 20:01 ` Tejun Heo
2015-09-30 18:54 ` Tejun Heo
2015-11-25 14:43 ` Peter Zijlstra
2015-11-25 15:02 ` Peter Zijlstra
2015-11-25 15:31 ` Andrey Ryabinin
2015-11-25 17:34 ` Dmitry Vyukov
2015-11-25 17:44 ` Peter Zijlstra
2015-12-11 16:25 ` Tejun Heo
2015-12-15 19:22 ` Peter Zijlstra
2015-12-30 9:23 ` [PATCH v4.4-rc7] sched: isolate task_struct bitfields according to synchronization domains Tejun Heo
2015-12-30 20:10 ` Linus Torvalds
2015-12-30 20:17 ` Linus Torvalds
2015-12-30 20:41 ` Tejun Heo
2015-12-30 20:43 ` Linus Torvalds
2016-01-01 2:56 ` [PATCH v4.4-rc7] sched: move sched lock synchronized bitfields in task_struct into ->atomic_flags Tejun Heo
2016-01-06 13:44 ` Tejun Heo
-- strict thread matches above, loose matches on Subject: below --
2015-08-28 22:01 [PATCH 1/2] memcg: flatten task_struct->memcg_oom Tejun Heo
2015-09-01 15:25 ` Michal Hocko
2015-09-02 11:45 ` 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=20150913185940.GA25369@htj.duckdns.org \
--to=tj@kernel.org \
--cc=akpm@linux-foundation.org \
--cc=cgroups@vger.kernel.org \
--cc=hannes@cmpxchg.org \
--cc=kernel-team@fb.com \
--cc=linux-mm@kvack.org \
--cc=mhocko@kernel.org \
--cc=vdavydov@parallels.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).