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 A2248C4332F for ; Thu, 9 Nov 2023 03:25:55 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 346678D00D9; Wed, 8 Nov 2023 22:25:55 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 2F5BD8D0073; Wed, 8 Nov 2023 22:25:55 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 1971B8D00D9; Wed, 8 Nov 2023 22:25:55 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0014.hostedemail.com [216.40.44.14]) by kanga.kvack.org (Postfix) with ESMTP id 03C268D0073 for ; Wed, 8 Nov 2023 22:25:55 -0500 (EST) Received: from smtpin29.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id BF9EA120348 for ; Thu, 9 Nov 2023 03:25:54 +0000 (UTC) X-FDA: 81436976628.29.F686A7B Received: from out-183.mta1.migadu.com (out-183.mta1.migadu.com [95.215.58.183]) by imf30.hostedemail.com (Postfix) with ESMTP id 012BE80011 for ; Thu, 9 Nov 2023 03:25:52 +0000 (UTC) Authentication-Results: imf30.hostedemail.com; dkim=pass header.d=linux.dev header.s=key1 header.b=hPDBsLer; dmarc=pass (policy=none) header.from=linux.dev; spf=pass (imf30.hostedemail.com: domain of jeff.xie@linux.dev designates 95.215.58.183 as permitted sender) smtp.mailfrom=jeff.xie@linux.dev ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1699500353; 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-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=b7QgHrHMcQgDYNH9cSurCrN2io0udjYc/RXiOMn9HQo=; b=38nVo3Mm99jiAGbHX5xoa/4yyGhpyh82jeXjP/AKLjUHas92xbJy6Uo8KRJvyiWYnsjwa7 8Tr1Z2Il64cKpOnsU2vsGNKa/DmT4KyRSaUofQlh9pHJy/O1fo0xp/li5RfhnkCprPs7YB VnBlqEglsU9iLBDmpswwBVv19OtflhQ= ARC-Authentication-Results: i=1; imf30.hostedemail.com; dkim=pass header.d=linux.dev header.s=key1 header.b=hPDBsLer; dmarc=pass (policy=none) header.from=linux.dev; spf=pass (imf30.hostedemail.com: domain of jeff.xie@linux.dev designates 95.215.58.183 as permitted sender) smtp.mailfrom=jeff.xie@linux.dev ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1699500353; a=rsa-sha256; cv=none; b=fPr8bRh2PMJ5e+qxv/TYaudTOtsoNDadsh2b38CnlRzDOb2BlBsG1+oGRmDiayx5aYwFQl JY0mi6BaXCuvmBiAOQx/oraZ5QWFhzaVikNaQWfFriteSAKqZ5PDiuOvq51ey4mZdAVGBU AmrWXZxyD1JpkYvIEtjdecba9V6sMnc= X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1699500351; 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: in-reply-to:in-reply-to:references:references; bh=b7QgHrHMcQgDYNH9cSurCrN2io0udjYc/RXiOMn9HQo=; b=hPDBsLerGi2CsDGvsyury3Y7/vRfFLrFqniLSN9fLNoEOxsjniR6+2yoRufgY/ESIOkfDC hxgIyJGxT8EIAg3Nr3sL0jfaPGEsQ1/mwz0+sPIkno1r/+6iBvJyla6Ek+XO8p+oMuiCTj AyxVNGd5WlH4qVnpOxDC3n3Jp4lJhz8= From: Jeff Xie To: akpm@linux-foundation.org, iamjoonsoo.kim@lge.com, vbabka@suse.cz, cl@linux.com, penberg@kernel.org, rientjes@google.com, roman.gushchin@linux.dev, 42.hyeyoo@gmail.com, willy@infradead.org Cc: linux-mm@kvack.org, linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, chensong_2000@189.cn, xiehuan09@gmail.com, Jeff Xie Subject: [RFC][PATCH 1/4] mm, page_owner: add folio allocate post callback for struct page_owner to make the owner clearer Date: Thu, 9 Nov 2023 11:25:18 +0800 Message-Id: <20231109032521.392217-2-jeff.xie@linux.dev> In-Reply-To: <20231109032521.392217-1-jeff.xie@linux.dev> References: <20231109032521.392217-1-jeff.xie@linux.dev> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Migadu-Flow: FLOW_OUT X-Rspam-User: X-Stat-Signature: 8ie4segoh6951i4pqdyfqcfinfksj3kn X-Rspamd-Server: rspam07 X-Rspamd-Queue-Id: 012BE80011 X-HE-Tag: 1699500352-546528 X-HE-Meta: U2FsdGVkX18JgqoA/3t0Sk0ypGyu/S7B51iIEcZ3QwjupOSVirwYgYj0FEbs1FY64iMI0EWeNVzb329AG/nLRaoN0kRuH+96QO//GeTnSnT4tPWfwZ1nskr6efv+5Nj6d3zCfoJi68fqFqN8faqtDZ1sgofIX8uxKmBVWageoQ5wR7POufWDB/0kAgWVGYGiVJwyIz6gr5pXkI+xXzAuyuDMcsvhsshLl/pS0nUcSmN0+VRUfFMaBMM/GLYX3+RWjyYTOe+mqlon+e4YpGZUOlut+kQrQwKdxqT15CH1yNBL+QJxl8eylaUy7NEjExhMF1cVv/2RKLMPLM2QcXxG483i+QaNXGw9mm3EXhUX+ZTytVpKaBVbpvvjj4MYVrtiI421BCuwBrp1zTGk9nZz5OyyvV4Xj6zv+kFnIgFUuu1w2NhfioVpthlQ+aH4g0YpdfIoNmdEY9SsXC5nsBQG9+mP2/6fC0nz5pn5fHjkp7VMT1Hoxrk5Q9d8mUEUbUhPJPKvfuJgff+NnQjxlVFzF2oNZQcRI74xMEkXD4O8U88LPhZ15AaQfUUikXHkZT//hfAEL1MlRLx5LI9TByUnREWbbjC+uJoZN0i5x4Ycj+PaI/W2vBdlFKdI8pTti9Kww7+OFNtG6fAr+k7Ys+Dfqp1O2eVQmtMWhwSB9bAyQoccntGS48OEOAiZUs+/JrBF4/rFqyEAk1YblmmcTGxz6yHkmY6ZMDx0Qv2ceE66Boq/UL7lMfURQLxb0CvTgz7LR7umT4WO1K8fy97vUPVV8PP/977jFSaCWELF2Ebg0H9QSqQSTcDgYsE/3WHRInMLFyeSYPDD19D+jZ9gSCGGweif3oIKBE9SlqlYQnfTJl8fSi2+4GFlDjrkaFPJw3iskKmGgnlPZE5q7oWlzxjYVaNdC/rcnm+HxSXRkKb5EAmBex4tJn6Fzjp5Y6XWONUm+o84rOdsD+4mz/rWB7Y gqqFKqih ovIMXJZXILd0t+vl68QQS2q1/ROYqkkjk/TuonjcGccZiM5Nfq1BsMw38Ve1cBjbMsUH5NZnuS+h/FsuNddlGUrikbp/TPYWUtu0vG2OEfAAbLER/ZlQ7DaOaNsVh+vA/f9r7Xj27c4i32yAw1oiwyugcvIO8qxD508frQJhrQDZzbiHxcb+o/dHsnapFciryIJnVXbh6CS32YLvLk8t22Fjz2YVBYsNH7ELo 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: adding a callback function in the struct page_owner to let the slab layer or the anon/file handler layer or any other memory-allocated layers to implement what they would like to tell. Signed-off-by: Jeff Xie --- include/linux/page_owner.h | 9 +++++++++ mm/page_owner.c | 36 ++++++++++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+) diff --git a/include/linux/page_owner.h b/include/linux/page_owner.h index 119a0c9d2a8b..71698d82df7c 100644 --- a/include/linux/page_owner.h +++ b/include/linux/page_owner.h @@ -4,6 +4,9 @@ #include +typedef int (folio_alloc_post_page_owner_t)(struct folio *folio, struct task_struct *tsk, + void *data, char *kbuf, size_t count); + #ifdef CONFIG_PAGE_OWNER extern struct static_key_false page_owner_inited; extern struct page_ext_operations page_owner_ops; @@ -17,6 +20,8 @@ extern void __set_page_owner_migrate_reason(struct page *page, int reason); extern void __dump_page_owner(const struct page *page); extern void pagetypeinfo_showmixedcount_print(struct seq_file *m, pg_data_t *pgdat, struct zone *zone); +extern void set_folio_alloc_post_page_owner(struct folio *folio, + folio_alloc_post_page_owner_t *folio_alloc_post_page_owner, void *data); static inline void reset_page_owner(struct page *page, unsigned short order) { @@ -72,5 +77,9 @@ static inline void set_page_owner_migrate_reason(struct page *page, int reason) static inline void dump_page_owner(const struct page *page) { } +static inline void set_folio_alloc_post_page_owner(struct folio *folio, + folio_alloc_post_page_owner_t *folio_alloc_post_page_owner, void *data) +{ +} #endif /* CONFIG_PAGE_OWNER */ #endif /* __LINUX_PAGE_OWNER_H */ diff --git a/mm/page_owner.c b/mm/page_owner.c index 4f13ce7d2452..4de03a7a10d4 100644 --- a/mm/page_owner.c +++ b/mm/page_owner.c @@ -32,6 +32,9 @@ struct page_owner { char comm[TASK_COMM_LEN]; pid_t pid; pid_t tgid; + folio_alloc_post_page_owner_t *folio_alloc_post_page_owner; + /* for folio_alloc_post_page_owner function parameter */ + void *data; }; static bool page_owner_enabled __initdata; @@ -152,6 +155,8 @@ void __reset_page_owner(struct page *page, unsigned short order) page_owner = get_page_owner(page_ext); page_owner->free_handle = handle; page_owner->free_ts_nsec = free_ts_nsec; + page_owner->folio_alloc_post_page_owner = NULL; + page_owner->data = NULL; page_ext = page_ext_next(page_ext); } page_ext_put(page_ext); @@ -256,6 +261,8 @@ void __folio_copy_owner(struct folio *newfolio, struct folio *old) new_page_owner->ts_nsec = old_page_owner->ts_nsec; new_page_owner->free_ts_nsec = old_page_owner->ts_nsec; strcpy(new_page_owner->comm, old_page_owner->comm); + new_page_owner->folio_alloc_post_page_owner = old_page_owner->folio_alloc_post_page_owner; + new_page_owner->data = old_page_owner->data; /* * We don't clear the bit on the old folio as it's going to be freed @@ -272,6 +279,25 @@ void __folio_copy_owner(struct folio *newfolio, struct folio *old) page_ext_put(old_ext); } +void set_folio_alloc_post_page_owner(struct folio *folio, + folio_alloc_post_page_owner_t *folio_alloc_post_page_owner, void *data) +{ + struct page *page; + struct page_ext *page_ext; + struct page_owner *page_owner; + + page = &folio->page; + page_ext = page_ext_get(page); + if (unlikely(!page_ext)) + return; + + page_owner = get_page_owner(page_ext); + page_owner->folio_alloc_post_page_owner = folio_alloc_post_page_owner; + page_owner->data = data; + + page_ext_put(page_ext); +} + void pagetypeinfo_showmixedcount_print(struct seq_file *m, pg_data_t *pgdat, struct zone *zone) { @@ -400,6 +426,7 @@ print_page_owner(char __user *buf, size_t count, unsigned long pfn, depot_stack_handle_t handle) { int ret, pageblock_mt, page_mt; + struct task_struct *tsk; char *kbuf; count = min_t(size_t, count, PAGE_SIZE); @@ -414,6 +441,15 @@ print_page_owner(char __user *buf, size_t count, unsigned long pfn, page_owner->tgid, page_owner->comm, page_owner->ts_nsec); + if (page_owner->folio_alloc_post_page_owner) { + rcu_read_lock(); + tsk = find_task_by_pid_ns(page_owner->pid, &init_pid_ns); + rcu_read_unlock(); + ret += page_owner->folio_alloc_post_page_owner(page_folio(page), tsk, page_owner->data, + kbuf + ret, count - ret); + } else + ret += scnprintf(kbuf + ret, count - ret, "OTHER_PAGE\n"); + /* Print information relevant to grouping pages by mobility */ pageblock_mt = get_pageblock_migratetype(page); page_mt = gfp_migratetype(page_owner->gfp_mask); -- 2.34.1