From: Sebastian Andrzej Siewior <bigeasy@linutronix.de> To: cgroups@vger.kernel.org, linux-mm@kvack.org Cc: "Andrew Morton" <akpm@linux-foundation.org>, "Johannes Weiner" <hannes@cmpxchg.org>, "Michal Hocko" <mhocko@kernel.org>, "Michal Koutný" <mkoutny@suse.com>, "Peter Zijlstra" <peterz@infradead.org>, "Thomas Gleixner" <tglx@linutronix.de>, "Vladimir Davydov" <vdavydov.dev@gmail.com>, "Waiman Long" <longman@redhat.com> Subject: [PATCH v4 0/6] mm/memcg: Address PREEMPT_RT problems instead of disabling it. Date: Mon, 21 Feb 2022 19:25:34 +0100 [thread overview] Message-ID: <20220221182540.380526-1-bigeasy@linutronix.de> (raw) Hi, this series aims to address the memcg related problem on PREEMPT_RT. I tested them on CONFIG_PREEMPT and CONFIG_PREEMPT_RT with the tools/testing/selftests/cgroup/* tests and I haven't observed any regressions (other than the lockdep report that is already there). Changes since v3: - Added __memcg_stats_lock() to __mod_memcg_lruvec_state(). This one does not check for disabled interrupts on !RT. The only user (__mod_memcg_lruvec_state()) checks if the context is task (neither soft nor hard irq) if the two idx are used which are used by rmap.c and otherwise it checks for disabled interrupts. Reported by Shakeel Butt. - In drain_all_stock() migration is disabled and drain_local_stock() is invoked directly if the request CPU is the local CPU. v3: https://lore.kernel.org/all/20220217094802.3644569-1-bigeasy@linutronix.de/ Changes since v2: - rebased on top of v5.17-rc4-mmots-2022-02-15-20-39. - Added memcg_stats_lock() in 3/5 so it a little more obvious and hopefully easiert to maintain. - Opencoded obj_cgroup_uncharge_pages() in drain_obj_stock(). The __locked suffix was confusing. v2: https://lore.kernel.org/all/20220211223537.2175879-1-bigeasy@linutronix.de/ Changes since v1: - Made a full patch from Michal Hocko's diff to disable the from-IRQ vs from-task optimisation - Disabling threshold event handlers is using now IS_ENABLED(PREEMPT_RT) instead of #ifdef. The outcome is the same but there is no need to shuffle the code around. v1: https://lore.kernel.org/all/20220125164337.2071854-1-bigeasy@linutronix.de/ Changes since the RFC: - cgroup.event_control / memory.soft_limit_in_bytes is disabled on PREEMPT_RT. It is a deprecated v1 feature. Fixing the signal path is not worth it. - The updates to per-CPU counters are usually synchronised by disabling interrupts. There are a few spots where assumption about disabled interrupts are not true on PREEMPT_RT and therefore preemption is disabled. This is okay since the counter are never written from in_irq() context. RFC: https://lore.kernel.org/all/20211222114111.2206248-1-bigeasy@linutronix.de/ Sebastian
WARNING: multiple messages have this Message-ID (diff)
From: Sebastian Andrzej Siewior <bigeasy-hfZtesqFncYOwBW4kG4KsQ@public.gmane.org> To: cgroups-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, linux-mm-Bw31MaZKKs3YtjvyW6yDsg@public.gmane.org Cc: "Andrew Morton" <akpm-de/tnXTf+JLsfHDXvbKv3WD2FQJk+8+b@public.gmane.org>, "Johannes Weiner" <hannes-druUgvl0LCNAfugRpC6u6w@public.gmane.org>, "Michal Hocko" <mhocko-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>, "Michal Koutný" <mkoutny-IBi9RG/b67k@public.gmane.org>, "Peter Zijlstra" <peterz-wEGCiKHe2LqWVfeAwA7xHQ@public.gmane.org>, "Thomas Gleixner" <tglx-hfZtesqFncYOwBW4kG4KsQ@public.gmane.org>, "Vladimir Davydov" <vdavydov.dev-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>, "Waiman Long" <longman-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> Subject: [PATCH v4 0/6] mm/memcg: Address PREEMPT_RT problems instead of disabling it. Date: Mon, 21 Feb 2022 19:25:34 +0100 [thread overview] Message-ID: <20220221182540.380526-1-bigeasy@linutronix.de> (raw) Hi, this series aims to address the memcg related problem on PREEMPT_RT. I tested them on CONFIG_PREEMPT and CONFIG_PREEMPT_RT with the tools/testing/selftests/cgroup/* tests and I haven't observed any regressions (other than the lockdep report that is already there). Changes since v3: - Added __memcg_stats_lock() to __mod_memcg_lruvec_state(). This one does not check for disabled interrupts on !RT. The only user (__mod_memcg_lruvec_state()) checks if the context is task (neither soft nor hard irq) if the two idx are used which are used by rmap.c and otherwise it checks for disabled interrupts. Reported by Shakeel Butt. - In drain_all_stock() migration is disabled and drain_local_stock() is invoked directly if the request CPU is the local CPU. v3: https://lore.kernel.org/all/20220217094802.3644569-1-bigeasy@linutronix.de/ Changes since v2: - rebased on top of v5.17-rc4-mmots-2022-02-15-20-39. - Added memcg_stats_lock() in 3/5 so it a little more obvious and hopefully easiert to maintain. - Opencoded obj_cgroup_uncharge_pages() in drain_obj_stock(). The __locked suffix was confusing. v2: https://lore.kernel.org/all/20220211223537.2175879-1-bigeasy@linutronix.de/ Changes since v1: - Made a full patch from Michal Hocko's diff to disable the from-IRQ vs from-task optimisation - Disabling threshold event handlers is using now IS_ENABLED(PREEMPT_RT) instead of #ifdef. The outcome is the same but there is no need to shuffle the code around. v1: https://lore.kernel.org/all/20220125164337.2071854-1-bigeasy@linutronix.de/ Changes since the RFC: - cgroup.event_control / memory.soft_limit_in_bytes is disabled on PREEMPT_RT. It is a deprecated v1 feature. Fixing the signal path is not worth it. - The updates to per-CPU counters are usually synchronised by disabling interrupts. There are a few spots where assumption about disabled interrupts are not true on PREEMPT_RT and therefore preemption is disabled. This is okay since the counter are never written from in_irq() context. RFC: https://lore.kernel.org/all/20211222114111.2206248-1-bigeasy@linutronix.de/ Sebastian
next reply other threads:[~2022-02-21 18:26 UTC|newest] Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top 2022-02-21 18:25 Sebastian Andrzej Siewior [this message] 2022-02-21 18:25 ` [PATCH v4 0/6] mm/memcg: Address PREEMPT_RT problems instead of disabling it Sebastian Andrzej Siewior 2022-02-21 18:25 ` [PATCH v4 1/6] mm/memcg: Revert ("mm/memcg: optimize user context object stock access") Sebastian Andrzej Siewior 2022-02-21 18:25 ` Sebastian Andrzej Siewior 2022-02-21 18:25 ` [PATCH v4 2/6] mm/memcg: Disable threshold event handlers on PREEMPT_RT Sebastian Andrzej Siewior 2022-02-21 18:25 ` Sebastian Andrzej Siewior 2022-02-21 18:25 ` [PATCH v4 3/6] mm/memcg: Protect per-CPU counter by disabling preemption on PREEMPT_RT where needed Sebastian Andrzej Siewior 2022-02-21 18:25 ` Sebastian Andrzej Siewior 2022-02-22 5:41 ` Shakeel Butt 2022-02-22 5:41 ` Shakeel Butt 2022-02-25 15:17 ` [PATCH] mm/memcg: Add missing counter index which are not update in interrupt Sebastian Andrzej Siewior 2022-02-25 15:17 ` Sebastian Andrzej Siewior 2022-02-25 17:08 ` Shakeel Butt 2022-02-25 17:08 ` Shakeel Butt 2022-02-25 23:01 ` [PATCH] mm/memcg: Only perform the debug checks on !PREEMPT_RT Sebastian Andrzej Siewior 2022-02-25 23:01 ` Sebastian Andrzej Siewior 2022-02-26 0:05 ` Andrew Morton 2022-02-26 0:05 ` Andrew Morton 2022-02-21 18:25 ` [PATCH v4 4/6] mm/memcg: Opencode the inner part of obj_cgroup_uncharge_pages() in drain_obj_stock() Sebastian Andrzej Siewior 2022-02-21 18:25 ` Sebastian Andrzej Siewior 2022-02-21 18:25 ` [PATCH v4 5/6] mm/memcg: Protect memcg_stock with a local_lock_t Sebastian Andrzej Siewior 2022-02-21 18:25 ` Sebastian Andrzej Siewior 2022-02-22 9:52 ` Michal Hocko 2022-02-22 9:52 ` Michal Hocko 2022-02-25 15:15 ` [PATCH] mm/memcg: Add a comment regarding the release `obj' Sebastian Andrzej Siewior 2022-02-25 15:15 ` Sebastian Andrzej Siewior 2022-02-21 18:25 ` [PATCH v4 6/6] mm/memcg: Disable migration instead of preemption in drain_all_stock() Sebastian Andrzej Siewior 2022-02-21 18:25 ` Sebastian Andrzej Siewior 2022-02-22 9:56 ` Michal Hocko 2022-02-22 9:56 ` Michal Hocko 2022-02-25 20:13 ` [PATCH v5 " Sebastian Andrzej Siewior 2022-02-25 20:13 ` Sebastian Andrzej Siewior
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=20220221182540.380526-1-bigeasy@linutronix.de \ --to=bigeasy@linutronix.de \ --cc=akpm@linux-foundation.org \ --cc=cgroups@vger.kernel.org \ --cc=hannes@cmpxchg.org \ --cc=linux-mm@kvack.org \ --cc=longman@redhat.com \ --cc=mhocko@kernel.org \ --cc=mkoutny@suse.com \ --cc=peterz@infradead.org \ --cc=tglx@linutronix.de \ --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: 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.