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>
WARNING: multiple messages have this Message-ID (diff)
From: Tejun Heo <tj-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org> To: akpm-de/tnXTf+JLsfHDXvbKv3WD2FQJk+8+b@public.gmane.org, hannes-druUgvl0LCNAfugRpC6u6w@public.gmane.org, mhocko-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org Cc: cgroups-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, linux-mm-Bw31MaZKKs3YtjvyW6yDsg@public.gmane.org, vdavydov-bzQdu9zFT3WakBO8gow8eQ@public.gmane.org, kernel-team-b10kYP2dOMg@public.gmane.org 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-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org> Acked-by: Michal Hocko <mhocko-IBi9RG/b67k@public.gmane.org> Reviewed-by: Vladimir Davydov <vdavydov-bzQdu9zFT3WakBO8gow8eQ@public.gmane.org> --- Hello, Andrew, these are the two patches which got acked from the following thread. http://lkml.kernel.org/g/20150828220158.GD11089-Gd/HAXX7CRxy/B6EtB590w@public.gmane.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; }
next reply other threads:[~2015-09-13 18:59 UTC|newest] Thread overview: 49+ messages / expand[flat|nested] mbox.gz Atom feed top 2015-09-13 18:59 Tejun Heo [this message] 2015-09-13 18:59 ` [PATCH 1/2] memcg: flatten task_struct->memcg_oom Tejun Heo 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 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:22 ` Tejun Heo 2015-09-15 16:33 ` Johannes Weiner 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-15 7:37 ` Johannes Weiner 2015-09-20 14:45 ` Sasha Levin 2015-09-20 14:45 ` Sasha Levin 2015-09-21 20:01 ` Tejun Heo 2015-09-21 20:01 ` Tejun Heo 2015-09-30 18:54 ` Tejun Heo 2015-09-30 18:54 ` Tejun Heo 2015-11-25 14:43 ` Peter Zijlstra 2015-11-25 14:43 ` Peter Zijlstra 2015-11-25 15:02 ` 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:34 ` Dmitry Vyukov 2015-11-25 17:44 ` Peter Zijlstra 2015-12-11 16:25 ` Tejun Heo 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:10 ` Linus Torvalds 2015-12-30 20:17 ` Linus Torvalds 2015-12-30 20:41 ` Tejun Heo 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-01 2:56 ` Tejun Heo 2016-01-06 13:44 ` Tejun Heo 2016-01-06 13:44 ` Tejun Heo 2016-01-06 18:48 ` [tip:sched/core] sched/core: Fix unserialized r-m-w scribbling stuff tip-bot for Peter Zijlstra 2016-01-06 20:17 ` 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-08-28 22:01 ` Tejun Heo 2015-09-01 15:25 ` Michal Hocko 2015-09-01 15:25 ` Michal Hocko 2015-09-02 11:45 ` Vladimir Davydov 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: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.