From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.remote-ip=91.218.175.173 ARC-Seal: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; cv=none; t=1793092361; b=mPzNONu+ZCk/Us/8T0Q+y/ct4orcDekFlI8+gNkOWQCDvEKOaC97JaTrKX1wztJkzyAX nMYUjDe514VTeo/vUDd8b2K0+yHpzSLtXbjsy0U3qnA16tpnuW5orJZtZ8+R7JBlqmAIs AUWfJaH8c+L1jdy5C9W4kMkFGiIKJ6sWoyTQY81J05S6G0GVCzvGM1VwNOIm4TRIEDvHh BLBSI5YMphM19K3+inN2QUZimTyFym/n/8tOeM+crefx6yTwvUG27GKcKVn+pWpPFSfX0 6Y8TCyM7fh838+q0uCecD3BV3QCmaLQbH+nNWF6tRBqYqQpKWZ/ORHuCE8lh/OGHKkA== ARC-Message-Signature: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; c=relaxed/relaxed; t=1793092361; h=DMARC-Filter:X-Envelope-To:DKIM-Signature:X-Envelope-To:Received: X-Mizu-Trace-ID:X-Migadu-Flow:From:To:Cc:Subject:Date:Message-ID: X-Mailer:MIME-Version:Content-Transfer-Encoding; bh=Ndi2448wVUZuF68kqWF0v2z9NaMIBNKc9nVCJQzYI1k=; b=YPT26ORtOmpBLmL3b0idVD+alBiUe8wkfHd0J+OyKVmWh5TArK5X+YbSF6VVhVyov7mO ZMco0ncNTPT0qpJhVWP3M6rl4hG6qprYCcbWDq8+mtNiM/arnJy0DLx7hCMdbdXf7JVGe iKSIauj5Z6EBqF8VLfiZ0hSgsLvlb279PQHXOJCeC3K2pLnxfrlgojtwsCBZ2y+ZUR7XM hNYFS91FO48yJhx65yuwKaB4rCpgetee2nh6SMxcryE937eIcNvvmDZ3Hbt8V4a6vnIqW 3PCPH3Kh6qfd92F88OsPJGJAQ77+OyzhenX+CF+TRgn4qeaSix+M5E+OvMraJw3/KSQ== ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass header.from=linux.dev; spf=pass smtp.mailfrom=linux.dev; arc=none smtp.remote-ip=91.218.175.173 Received: from mta0.migadu.com (out-173.mta0.migadu.com [91.218.175.173]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2BC23606A31D for ; Tue, 27 Oct 2026 09:12:29 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.2 smtp.subspace.kernel.org 2BC23606A31D Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.dev X-Envelope-To: linux-kernel@vger.kernel.org DKIM-Signature: a=rsa-sha256; bh=Iy2EZRXCQMOBxljPF+GT6qR9TSW/M2vcb/khwUxJInc=; c=simple/simple; d=linux.dev; h=from:to:subject:date:message-id:mime-version:content-type; s=key1; t=1793092348; v=1; x=1793697148; b=bA2/gm+InVPxrA8/cUeuKfkv9tlw8WkJfCJkOBEDJtQCHB0HWSave9Iz76npyrcxJMqpPc1t uCc6jbvmBvAjzUUwt9MB4DHn/lLKKxWsS6jwJ3eh4ZlxhovExca29l8pVbWHLXsWABOthurUun7 yDoOp3aXMoQ0FUfbTaxkhPds= X-Envelope-To: linux-kernel@vger.kernel.org Received: by mta11.migadu.com with ESMTPS id e68cbb451e1e33a5; Tue, 27 Oct 2026 09:12:27 +0000 X-Mizu-Trace-ID: e68cbb451e1e33a5 X-Migadu-Flow: FLOW_OUT From: Hui Zhu To: Alexei Starovoitov , Daniel Borkmann , John Fastabend , Andrii Nakryiko , Martin KaFai Lau , Eduard Zingerman , Kumar Kartikeya Dwivedi , Song Liu , Yonghong Song , Jiri Olsa , Johannes Weiner , Michal Hocko , Roman Gushchin , Shakeel Butt , Muchun Song , JP Kobryn , Andrew Morton , Shuah Khan , davem@davemloft.net, Jakub Kicinski , Jesper Dangaard Brouer , Stanislav Fomichev , KP Singh , Tao Chen , Mykyta Yatsenko , Leon Hwang , Anton Protopopov , Amery Hung , Tobias Klauser , Eyal Birger , Rong Tao , Hao Luo , Peter Zijlstra , Miguel Ojeda , Nathan Chancellor , Kees Cook , Tejun Heo , Jeff Xu , mkoutny@suse.com, Jan Hendrik Farr , Christian Brauner , Randy Dunlap , Brian Gerst , Masahiro Yamada , Willem de Bruijn , Jason Xing , Paul Chaignon , Lance Yang , Jiayuan Chen , Emil Tsalapatis , Ihor Solodrai , Barry Song , Geliang Tang , linux-kernel@vger.kernel.org, bpf@vger.kernel.org, cgroups@vger.kernel.org, linux-mm@kvack.org, netdev@vger.kernel.org, linux-kselftest@vger.kernel.org Cc: Hui Zhu Subject: [RFC PATCH 0/2] memcg_ext: dynamic memory.low and memory.min protection Date: Tue, 27 Oct 2026 17:11:58 +0800 Message-ID: X-Mailer: git-send-email 2.43.0 X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Transfer-Encoding: 8bit From: Hui Zhu This follows the memcg_ext RFC [1], which adds bpf_memcg_ops - a struct_ops type attaching memory controller policy to a cgroup - and one member, high_policy(). Its cover letter names dynamic protection as future work; these two patches are that. Why it matters: memory.low and memory.min protect a cgroup by a fixed threshold and have no idea whether it is using the memory. A high-priority cgroup that holds a large working set and then goes idle keeps suppressing reclaim on its siblings, and that memory is wasted. A policy program sees the real activity - page faults, charges - and can grant or withdraw protection as it changes. The hooks are not new: [2] proposed the same below-low and below-min decision on its own memcg_bpf_ops type. Only the carrier changes here. bpf_memcg_ops already supplies attach, the ancestor walk, result combination and the re-entry guard, so protection costs two members and one walk helper shared with high_policy(). Patch 1 adds low_policy() and min_policy(). A program gets a read-only snapshot of the check the kernel is making - the memcg, the reclaim target, the threshold and the usage - and returns a request; BPF_MEMCG_PROT_BELOW, the only one so far, treats the cgroup as below its threshold, so reclaim skips it and counts it in memory.events. The kernel compares elow/emin first and asks BPF only when it found the cgroup unprotected, and ORs the answers of the cgroup and every ancestor, so a policy can only add protection, never take it away. Patch 2 is the prog_tests runner: attach both policies to a child, fault 8M of anonymous memory into it, reclaim from its parent, and check that both hooks were consulted and that the ctx described the check faithfully. Both answer NO_OPINION, so nothing about reclaim's outcome is asserted. A working example that does answer BELOW, so reclaim skips one cgroup and takes the memory from a sibling instead, is maintained out of tree at [3], released under GPLv2. [1] https://lore.kernel.org/all/20260921192559.2619635-1-shakeel.butt@linux.dev/ [2] https://lore.kernel.org/all/cover.1779760876.git.zhuhui@kylinos.cn/ [3] https://github.com/teawater/memcg-async-reclaim/tree/memcg_ext_plus Hui Zhu (2): memcg_ext: add memory.low and memory.min protection policies selftests/bpf: Add bpf_memcg_ops protection test include/linux/bpf_memcontrol.h | 104 ++++++++++- include/linux/memcontrol.h | 23 ++- mm/bpf_memcontrol.c | 162 ++++++++++++++---- .../bpf/prog_tests/memcg_ops_protection.c | 151 ++++++++++++++++ .../bpf/progs/memcg_ops_protection.c | 72 ++++++++ 5 files changed, 470 insertions(+), 42 deletions(-) create mode 100644 tools/testing/selftests/bpf/prog_tests/memcg_ops_protection.c create mode 100644 tools/testing/selftests/bpf/progs/memcg_ops_protection.c -- 2.43.0