From patchwork Sat Feb 26 20:41:38 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sebastian Andrzej Siewior X-Patchwork-Id: 12761448 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 0C07BC433F5 for ; Sat, 26 Feb 2022 20:41:54 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 6C15C8D0006; Sat, 26 Feb 2022 15:41:53 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 647EE8D0003; Sat, 26 Feb 2022 15:41:53 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 4C3B88D0005; Sat, 26 Feb 2022 15:41:53 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (relay.hostedemail.com [64.99.140.26]) by kanga.kvack.org (Postfix) with ESMTP id 300F38D0001 for ; Sat, 26 Feb 2022 15:41:53 -0500 (EST) Received: from smtpin09.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay08.hostedemail.com (Postfix) with ESMTP id DAD2120C45 for ; Sat, 26 Feb 2022 20:41:52 +0000 (UTC) X-FDA: 79186102464.09.F0706FF Received: from galois.linutronix.de (Galois.linutronix.de [193.142.43.55]) by imf08.hostedemail.com (Postfix) with ESMTP id 5402E160003 for ; Sat, 26 Feb 2022 20:41:52 +0000 (UTC) From: Sebastian Andrzej Siewior DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020; t=1645908109; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding; bh=SqdsGvA5XeY6PhfXzb3Fr1EyB14Ft2+PMkzy4AmRIn4=; b=2NaqpCidvSVf+88nSX8VSQNVk3Si8mImBA5EHfCoM4lIs7LfsmD+KBlq/MGKt86xC4oXoq 8EWgEu493FqRB5MDmeVAUT1G32mSvM1WQF/HJKg2e4Ct2JSaMqbSHBITiakO3lAyY+HbJa SRVU9w0Y5wF/xB3TuUeNfFA81jTuhsdqgHcTl33NQgPeQuQOYa+XmAvCwuuYUrjFzcGKun h/4lEFR3BpJtUCUQaBaS0O5A2qiyAIMtEwbx7puHV8ep0Xn8zWhTnJgoW9PQjZKhoTYzXJ A7u6tZKzJt2/yOgkUv+3r60NSVktizaq147UgJ3o+w/7+uJx/ocHFA0KPQsSNg== DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020e; t=1645908109; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding; bh=SqdsGvA5XeY6PhfXzb3Fr1EyB14Ft2+PMkzy4AmRIn4=; b=jvZQ8XhTfJ0uhYjhex/5SW2SjipGrWDJ2wYe5UCJWXgE0OV7mSPE/5THKDACixj1nzJn6H KrUHr9k6SqNnDmDQ== To: cgroups@vger.kernel.org, linux-mm@kvack.org Cc: Andrew Morton , Johannes Weiner , Michal Hocko , =?utf-8?q?Michal_Koutn=C3=BD?= , Peter Zijlstra , Thomas Gleixner , Vladimir Davydov , Waiman Long Subject: [PATCH v5 0/6] mm/memcg: Address PREEMPT_RT problems instead of disabling it. Date: Sat, 26 Feb 2022 21:41:38 +0100 Message-Id: <20220226204144.1008339-1-bigeasy@linutronix.de> MIME-Version: 1.0 X-Rspamd-Queue-Id: 5402E160003 X-Stat-Signature: bkf8ua39pqytgii6nn4i78pyqwdfbfz7 X-Rspam-User: Authentication-Results: imf08.hostedemail.com; dkim=pass header.d=linutronix.de header.s=2020 header.b=2NaqpCid; dkim=pass header.d=linutronix.de header.s=2020e header.b=jvZQ8XhT; spf=pass (imf08.hostedemail.com: domain of bigeasy@linutronix.de designates 193.142.43.55 as permitted sender) smtp.mailfrom=bigeasy@linutronix.de; dmarc=pass (policy=none) header.from=linutronix.de X-Rspamd-Server: rspam07 X-HE-Tag: 1645908112-516120 X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: 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 v4: - Added additional counter index to __mod_memcg_lruvec_state() which are updated with enabled interrupts but with disabled interrupts. Also disable these checks on PREEMPT_RT. Reported by Shakeel Butt. - Add additional comment regarding `obj' in drain_obj_stock(). - Disable migration in drain_all_stock() and drain the local stock instead of scheduling a worker. 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