From mboxrd@z Thu Jan 1 00:00:00 1970 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 08E14C369DC for ; Wed, 30 Apr 2025 02:48:51 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 7DB4A6B00D5; Tue, 29 Apr 2025 22:48:50 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 789986B00DC; Tue, 29 Apr 2025 22:48:50 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 62A076B00E6; Tue, 29 Apr 2025 22:48:50 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0017.hostedemail.com [216.40.44.17]) by kanga.kvack.org (Postfix) with ESMTP id 397F66B00D5 for ; Tue, 29 Apr 2025 22:48:50 -0400 (EDT) Received: from smtpin14.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay08.hostedemail.com (Postfix) with ESMTP id 838AD141AF3 for ; Wed, 30 Apr 2025 02:48:50 +0000 (UTC) X-FDA: 83389177620.14.10F0C96 Received: from mail-qv1-f52.google.com (mail-qv1-f52.google.com [209.85.219.52]) by imf09.hostedemail.com (Postfix) with ESMTP id A0F6E14000F for ; Wed, 30 Apr 2025 02:48:48 +0000 (UTC) Authentication-Results: imf09.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b="MzaK+/rR"; spf=pass (imf09.hostedemail.com: domain of laoar.shao@gmail.com designates 209.85.219.52 as permitted sender) smtp.mailfrom=laoar.shao@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1745981328; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=7xEji0aPCu4ufQeSz/hkiElJuERhNyl1TgZKIhegpo0=; b=BFsdLfc6pOf2wZI+BvMexTS+MpjXpp9cUhepbpOjvZ+UtYp7qp2PGInQzQhv8SlexOP1HZ cGsv2kJoyfP/ylIAim0kPyiICPclQGVVsQtFrDe9BgPU0j3tFvunb0klc5XoV5tUqHNC+c iJJdKQlC9Phqi9zhlitgCJdCqQIomLY= ARC-Authentication-Results: i=1; imf09.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b="MzaK+/rR"; spf=pass (imf09.hostedemail.com: domain of laoar.shao@gmail.com designates 209.85.219.52 as permitted sender) smtp.mailfrom=laoar.shao@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1745981328; a=rsa-sha256; cv=none; b=XFUwccFhUGbs2EXjpNZmalDtQ6LcWYNI6dEpC/pHODHU5JX6VDpTTnahsxdS1f8uIve5tg 8NUC4KHllHe6QFmsnl+kQ9QEAe6KLGXNw1oKhdC+mLGNMgYPAHwcUnIV3Yng5Kwxm/8hOS 3W5cByRDUCU7XkL73oXNBrAQHNQOKlA= Received: by mail-qv1-f52.google.com with SMTP id 6a1803df08f44-6e8ffa00555so65408536d6.0 for ; Tue, 29 Apr 2025 19:48:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1745981328; x=1746586128; darn=kvack.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=7xEji0aPCu4ufQeSz/hkiElJuERhNyl1TgZKIhegpo0=; b=MzaK+/rRKN6vD7rXN5bDNbTJCol/Dtu26/x0Kz1gkPlxMCvHnJpSnSgRnpnV+ITUF7 VRIXTUphPO8CaIZoY+kJ99KimkyEj/gyMjflvhrUjbIczuYfOd3oTG8jR/fK8cBbsgu3 o2sJmsdD6yLI2oX34+YplxuI/reMFKmDOGcNXT56pWFX8m8SCqs11wALtgSsodifV5QC A1DI5fQLNxQk8+kOfq54CW1avE2xyMpCS5/7shCpexEFjJjpUqbj2hHxtB6fsuEN58M0 brHztfjqe/K1pWzOiKO8p/GHhSeDXItuXTHAUB/FvBywsqeLMhWUsh5XRsRBjqmACwn1 4quA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1745981328; x=1746586128; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=7xEji0aPCu4ufQeSz/hkiElJuERhNyl1TgZKIhegpo0=; b=Sr2yfRvTpAAYWn/mbSl0MEBrZClqQN/y5qq6uqfA1AcT32ckjyfesYGtiSW4nJ44CH Zq1o+xX5M/nsyQn+RtOmQIyoTc7BBIjrcRsCT5HFv7A1U4okcGEmtutBo2Oud4bhzcEK Px1VKLkZiYY9IVtm10dDn/JFFiVOzCCoMvHltIJIPki6C306VIfPNNSJHrk2s6NxX/TZ JG9L4pfCvAxKAxMR0huOKfY3HBMVV/YNawDz/sEGXLnDmKA84w1cDQnMYYxBvBMAh7w7 a44J/xzSrCPCq7MTtSKgs22e4n844Madgz+rt2yR53xgJyM+bl91TBuHvQYC2G8XaRdj m37g== X-Forwarded-Encrypted: i=1; AJvYcCXLIJLKWzPmNhD59UfboE8J/h6b634HyT2RgIgi/1d49tosP2EJeMp8zRvMFBAu0SGhhzT8eXyL6w==@kvack.org X-Gm-Message-State: AOJu0YzGLn7tBjNfFztTOEoH+LnUBIIN1X75aA3iHp/zKY/3EeyKWUoV kSWJF7SkqD95AqG3gE+T4+suclks4YBmJzX98tkzkaAbmmyV9coQ0fqxSIdsY4+yo5iG9o8CRKI WimXt56aJnGXqluzdrtydLs15T/c= X-Gm-Gg: ASbGncuJgZbD6Nzgr7XL7ZafO7SKOuhu/HWbnlDfZHqI/VxOHwnfYlA55vSBoglBddR 9Q9/nwqsHsDr5sOU8XPW2dGIjsh48BjcYH4Oayn6Lg2ZGElsZMQ+r9GjQXr32EcXMkXPJjznwWG 9+ZWgQonioFIgGNbEQxx3G+hs= X-Google-Smtp-Source: AGHT+IGzXDrLanqLfUNrRxT6C7Ik75q5yOi0GpuXGu/nkZML1mPpBPk244Lz+mSza57BSp0/bDrNJGdy4yUhB0hxdEM= X-Received: by 2002:ad4:5dc1:0:b0:6e8:f4e2:26ef with SMTP id 6a1803df08f44-6f4fe105662mr20014996d6.31.1745981327764; Tue, 29 Apr 2025 19:48:47 -0700 (PDT) MIME-Version: 1.0 References: <20250429024139.34365-1-laoar.shao@gmail.com> <20250429024139.34365-4-laoar.shao@gmail.com> In-Reply-To: From: Yafang Shao Date: Wed, 30 Apr 2025 10:48:11 +0800 X-Gm-Features: ATxdqUGL5jXU36qe6VWfQi1M76XEbLnbQFXHuudVSmgEzj7hMolHpVblf2tLFvE Message-ID: Subject: Re: [RFC PATCH 3/4] mm: add BPF hook for THP adjustment To: Alexei Starovoitov Cc: Andrew Morton , Alexei Starovoitov , Daniel Borkmann , Andrii Nakryiko , bpf , linux-mm Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Rspam-User: X-Rspamd-Server: rspam09 X-Rspamd-Queue-Id: A0F6E14000F X-Stat-Signature: otn9pktpapj9kfakxiikzstujzps1txq X-HE-Tag: 1745981328-2523 X-HE-Meta: U2FsdGVkX18BIUjIDllbNNEsUMUu6jwJjz7fhxM3w3+PIZj3iB87nIT1HcSNWRh0lWOqc4Cwjvv5QINcZ+1ksXkWK3h8xFbkhhLl+eMijzgM6Y2Adfid2Gqtkuq49a3ve5/KvBJ+hTXdKNzLHAZJDyqiyZyqE3t2uyx/6i4LvwIEEcLsTrMljtXqOK2+VdzgCXG2LO4pTerouWk3EmTWnJXrJWp0XhmuDH8AEnlq7n/jWptc/JLYNS1AEMedku0c+gxTgkDZ2wNnvbL/6MZKblzBZz4FuQGX6rJ4aPAn+/1kypvHVo2iaBwWadHzvRcrOlnbWQbEhvEsf8ThW8S6UJZvfv9+wc28NQCO++v7pZs5b24UOfdcqdeagn0BUbMluiUQum4JRMztPpriS9Ju6xLATM9SKHPPIshTOKWIF10Z/Sisk5ssCNZFMGpGMm+S38p4gBMKN4J0025QeQkS4i08FDBbt7D1+/fPXaW3Wro5McgHzPaWmObgMjkC3evYj2ir0f8HHc5ZcL12k7C90aXCYGgda3YP1RWoGD09P/9OkZqVnhdYzpcxKsCVaUhrJ/2/eo3nQ6pTTatE+rLRSddgt1GVt8pNZfPncIJZ0EUW7IDogBB7xGfHITBJBOiT3WzYfVS2pHqNRRMCgXrBgEUKqzmb7ZeXcK8oH7SnAJXfLxSAyv5Mafgb6Za+I78W/MvymfzUjIlkudcz3g9d49RrXlXC6pVdhg7zxXAh2k4mSmOCudh5oRXXzrcvXapi3oVcVVdyfgUvykzRjKgPFgwA/fw/W2HPuPo03gKho0sS29CSodn/NadVd/kxDR/rHwxdat34oYoplbEoun0KpiBSykbFAs7gLmMX551UQharlqWIJe1KSmrcxaAyD41GN5lbOyqCzGzyzYay9CCbLfTq31PJJzeCJhtiZynB6umPAQQLFRURZkxIQXOkziKKkRHWhN+l9OXZmgCyRMh bX1A9o3V wAewc5mml/yLkT3oq5cc4iei3bMOGtt1Sw1bjwKqCZNfCsWvH9bkOPPiMXHE537T004IScOGg3UQlvaYYKtJzwroTriC3mtbZ6+rJ3Vx4qzGiA7mmVCIq8hcRoyJs22mUOZiue9XUiB1acVu+aEHcr8gmsXXOeR7A/5h6jU1hi4NYcvvO6Rn3qSD6untNf0fzc3WrraCzi1XD1FU4RmXg9M9lGG6lcoTmxaKpHXnvaD21OKRrUWORShXSZ0zZn1Ax5Mtq2lGwwAerNcC6+3PNr/6zQdQXNowdM1sKtw/EVNbbOhyjsCM/4Y2bPM90BdVjg+yvrs5IduD2cz6K+Wn4M2ELYnh+spSTwXSQ1stGophFvoAOIFvW1QNH0GFZZYsuzL5uHC6uUgsyEVx9zJLCCF2fhPUM4Xb5Vgpccj1pMKYFv9uZ2xusn8IvQym+PDDQgQG9 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: List-Subscribe: List-Unsubscribe: On Tue, Apr 29, 2025 at 11:27=E2=80=AFPM Alexei Starovoitov wrote: > > On Mon, Apr 28, 2025 at 7:42=E2=80=AFPM Yafang Shao wrote: > > > > We will use the @vma parameter in BPF programs to determine whether THP= can > > be used. The typical workflow is as follows: > > > > 1. Retrieve the mm_struct from the given @vma. > > 2. Obtain the task_struct associated with the mm_struct > > It depends on CONFIG_MEMCG. > > 3. Adjust THP behavior dynamically based on task attributes > > E.g., based on the task=E2=80=99s cgroup > > > > Signed-off-by: Yafang Shao > > --- > > mm/Makefile | 3 +++ > > mm/bpf.c | 36 ++++++++++++++++++++++++++++++++++++ > > mm/bpf.h | 21 +++++++++++++++++++++ > > mm/internal.h | 3 +++ > > 4 files changed, 63 insertions(+) > > create mode 100644 mm/bpf.c > > create mode 100644 mm/bpf.h > > > > diff --git a/mm/Makefile b/mm/Makefile > > index e7f6bbf8ae5f..97055da04746 100644 > > --- a/mm/Makefile > > +++ b/mm/Makefile > > @@ -99,6 +99,9 @@ obj-$(CONFIG_MIGRATION) +=3D migrate.o > > obj-$(CONFIG_NUMA) +=3D memory-tiers.o > > obj-$(CONFIG_DEVICE_MIGRATION) +=3D migrate_device.o > > obj-$(CONFIG_TRANSPARENT_HUGEPAGE) +=3D huge_memory.o khugepaged.o > > +ifdef CONFIG_BPF_SYSCALL > > +obj-$(CONFIG_TRANSPARENT_HUGEPAGE) +=3D bpf.o > > +endif > > obj-$(CONFIG_PAGE_COUNTER) +=3D page_counter.o > > obj-$(CONFIG_MEMCG_V1) +=3D memcontrol-v1.o > > obj-$(CONFIG_MEMCG) +=3D memcontrol.o vmpressure.o > > diff --git a/mm/bpf.c b/mm/bpf.c > > new file mode 100644 > > index 000000000000..72eebcdbad56 > > --- /dev/null > > +++ b/mm/bpf.c > > @@ -0,0 +1,36 @@ > > +// SPDX-License-Identifier: GPL-2.0 > > +/* > > + * Author: Yafang Shao > > + */ > > + > > +#include > > +#include > > + > > +__bpf_hook_start(); > > + > > +/* Checks if this @vma can use THP. */ > > +__weak noinline int > > +mm_bpf_thp_vma_allowable(struct vm_area_struct *vma) > > +{ > > + /* At present, fmod_ret exclusively uses 0 to signify that the = return > > + * value remains unchanged. > > + */ > > + return 0; > > +} > > + > > +__bpf_hook_end(); > > + > > +BTF_SET8_START(mm_bpf_fmod_ret_ids) > > +BTF_ID_FLAGS(func, mm_bpf_thp_vma_allowable) > > +BTF_SET8_END(mm_bpf_fmod_ret_ids) > > + > > +static const struct btf_kfunc_id_set mm_bpf_fmodret_set =3D { > > + .owner =3D THIS_MODULE, > > + .set =3D &mm_bpf_fmod_ret_ids, > > +}; > > + > > +static int __init bpf_mm_kfunc_init(void) > > +{ > > + return register_btf_fmodret_id_set(&mm_bpf_fmodret_set); > > +} > > +late_initcall(bpf_mm_kfunc_init); > > diff --git a/mm/bpf.h b/mm/bpf.h > > new file mode 100644 > > index 000000000000..e03a38084b08 > > --- /dev/null > > +++ b/mm/bpf.h > > @@ -0,0 +1,21 @@ > > +/* SPDX-License-Identifier: GPL-2.0-or-later */ > > +#ifndef __MM_BPF_H > > +#define __MM_BPF_H > > + > > +#define MM_BPF_ALLOWABLE (1) > > +#define MM_BPF_NOT_ALLOWABLE (-1) > > + > > +#define MM_BPF_ALLOWABLE_HOOK(func, args...) { \ > > + int ret =3D func(args); \ > > + \ > > + if (ret =3D=3D MM_BPF_ALLOWABLE) \ > > + return 1; \ > > + if (ret =3D=3D MM_BPF_NOT_ALLOWABLE) \ > > + return 0; \ > > +} > > + > > +#ifdef CONFIG_TRANSPARENT_HUGEPAGE > > +int mm_bpf_thp_vma_allowable(struct vm_area_struct *vma); > > +#endif > > + > > +#endif > > diff --git a/mm/internal.h b/mm/internal.h > > index aa698a11dd68..c8bf405fa581 100644 > > --- a/mm/internal.h > > +++ b/mm/internal.h > > @@ -21,6 +21,7 @@ > > > > /* Internal core VMA manipulation functions. */ > > #include "vma.h" > > +#include "bpf.h" > > > > struct folio_batch; > > > > @@ -1632,6 +1633,7 @@ static inline bool reclaim_pt_is_enabled(unsigned= long start, unsigned long end, > > */ > > static inline bool hugepage_global_enabled(struct vm_area_struct *vma) > > { > > + MM_BPF_ALLOWABLE_HOOK(mm_bpf_thp_vma_allowable, vma); > > return transparent_hugepage_flags & > > ((1< > (1< > @@ -1639,6 +1641,7 @@ static inline bool hugepage_global_enabled(struct= vm_area_struct *vma) > > > > static inline bool hugepage_global_always(struct vm_area_struct *vma) > > { > > + MM_BPF_ALLOWABLE_HOOK(mm_bpf_thp_vma_allowable, vma); > > Please define a clean struct_ops based interface and demonstrate > the generality of the api with both bpf prog and a kernel module. > Do not use fmod_ret since it's global while struct_ops can be made > scoped for use case. Ex: per cgroup. Thank you for the suggestion. I'll give this careful consideration. --=20 Regards Yafang