From patchwork Sat Feb 19 18:04:50 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yixuan Cao X-Patchwork-Id: 12752347 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 BC956C433F5 for ; Sat, 19 Feb 2022 18:05:32 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id E533E6B0071; Sat, 19 Feb 2022 13:05:31 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id E03C36B0072; Sat, 19 Feb 2022 13:05:31 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id CCA866B0074; Sat, 19 Feb 2022 13:05:31 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (relay.hostedemail.com [64.99.140.27]) by kanga.kvack.org (Postfix) with ESMTP id BE66B6B0071 for ; Sat, 19 Feb 2022 13:05:31 -0500 (EST) Received: from smtpin05.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay11.hostedemail.com (Postfix) with ESMTP id 7FF4E80CD2 for ; Sat, 19 Feb 2022 18:05:31 +0000 (UTC) X-FDA: 79160306862.05.C6255BE Received: from smtpbgbr2.qq.com (smtpbgbr2.qq.com [54.207.22.56]) by imf27.hostedemail.com (Postfix) with ESMTP id BC7E740008 for ; Sat, 19 Feb 2022 18:05:25 +0000 (UTC) X-QQ-mid: bizesmtp69t1645293913t7knxfog Received: from localhost.localdomain (unknown [202.96.137.248]) by bizesmtp.qq.com (ESMTP) with id ; Sun, 20 Feb 2022 02:04:52 +0800 (CST) X-QQ-SSF: 01400000000000D0N000B00A0000000 X-QQ-FEAT: l2baldexF9l31JYpc/mQabxD4TJZaEAyqM+u9vrz/2Wzx8oahLNxbfg6cFCMc lzPJluj2xovT7H0ygkSZwoHxQfhVpdLOVe/331kflsGtjCx2zIXpkbiNG4GhgzLdpHO8HMD D0zNVYJfkRKsf+fgHEQobMtYML/JXi62G9T9umb1H+bXhiAHTwyCC4SOlAk0fB8HN2Jp1+D Z2hgID0T+kP5eWQ+8GGdAcCiaHi5u5lCmAZMQN3APk3j3JO08YFYUqNP8UeQLuG6HWZu46x 0tTcQcGkw6bOxmj9o+cgQTqUnUwFOVL5CeVXwWAcF9uvp2ZxtnrozlCNLXDWqAEiFnu7mzm v/JHNdN X-QQ-GoodBg: 2 From: Yixuan Cao To: akpm@linux-foundation.org Cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org, Yixuan Cao Subject: [PATCH] mm/page_owner.c: record tgid Date: Sun, 20 Feb 2022 02:04:50 +0800 Message-Id: <20220219180450.2399-1-caoyixuan2019@email.szu.edu.cn> X-Mailer: git-send-email 2.31.1 MIME-Version: 1.0 X-QQ-SENDSIZE: 520 Feedback-ID: bizesmtp:email.szu.edu.cn:qybgforeign:qybgforeign6 X-QQ-Bgrelay: 1 X-Rspam-User: X-Rspamd-Server: rspam12 X-Rspamd-Queue-Id: BC7E740008 X-Stat-Signature: 3ocfo4kxqfzkpscbs3z7mnojkp4sn56z Authentication-Results: imf27.hostedemail.com; dkim=none; dmarc=pass (policy=quarantine) header.from=email.szu.edu.cn; spf=pass (imf27.hostedemail.com: domain of caoyixuan2019@email.szu.edu.cn designates 54.207.22.56 as permitted sender) smtp.mailfrom=caoyixuan2019@email.szu.edu.cn X-HE-Tag: 1645293925-581037 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: In a single-threaded process, the pid in kernel task_struct is the same as the tgid, which can mark the process of page allocation. But in a multithreaded process, only the task_struct of the thread leader has the same pid as tgid, and the pids of other threads are different from tgid. Therefore, tgid is recorded to provide effective information for debugging and data statistics of multithreaded programs. This can also be achieved by observing the task name (executable file name) for a specific process. However, when the same program is started multiple times, the task name is the same and the tgid is different. Therefore, in the debugging of multi-threaded programs, combined with the task name and tgid, more accurate runtime information of a certain run of the program can be obtained. Signed-off-by: Yixuan Cao --- mm/page_owner.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/mm/page_owner.c b/mm/page_owner.c index d56afa9c792e..0a9588506571 100644 --- a/mm/page_owner.c +++ b/mm/page_owner.c @@ -31,6 +31,7 @@ struct page_owner { u64 free_ts_nsec; char comm[TASK_COMM_LEN]; pid_t pid; + pid_t tgid; }; static bool page_owner_enabled = false; @@ -165,6 +166,7 @@ static inline void __set_page_owner_handle(struct page_ext *page_ext, page_owner->gfp_mask = gfp_mask; page_owner->last_migrate_reason = -1; page_owner->pid = current->pid; + page_owner->tgid = current->tgid; page_owner->ts_nsec = local_clock(); strlcpy(page_owner->comm, current->comm, sizeof(page_owner->comm)); @@ -233,6 +235,7 @@ void __folio_copy_owner(struct folio *newfolio, struct folio *old) old_page_owner->last_migrate_reason; new_page_owner->handle = old_page_owner->handle; new_page_owner->pid = old_page_owner->pid; + new_page_owner->tgid = old_page_owner->tgid; 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); @@ -383,11 +386,11 @@ print_page_owner(char __user *buf, size_t count, unsigned long pfn, return -ENOMEM; ret = scnprintf(kbuf, count, - "Page allocated via order %u, mask %#x(%pGg), pid %d (%s), ts %llu ns, free_ts %llu ns\n", + "Page allocated via order %u, mask %#x(%pGg), pid %d, tgid %d (%s), ts %llu ns, free_ts %llu ns\n", page_owner->order, page_owner->gfp_mask, &page_owner->gfp_mask, page_owner->pid, - page_owner->comm, page_owner->ts_nsec, - page_owner->free_ts_nsec); + page_owner->tgid, page_owner->comm, + page_owner->ts_nsec, page_owner->free_ts_nsec); /* Print information relevant to grouping pages by mobility */ pageblock_mt = get_pageblock_migratetype(page); @@ -454,10 +457,10 @@ void __dump_page_owner(const struct page *page) else pr_alert("page_owner tracks the page as freed\n"); - pr_alert("page last allocated via order %u, migratetype %s, gfp_mask %#x(%pGg), pid %d (%s), ts %llu, free_ts %llu\n", + pr_alert("page last allocated via order %u, migratetype %s, gfp_mask %#x(%pGg), pid %d, tgid %d (%s), ts %llu, free_ts %llu\n", page_owner->order, migratetype_names[mt], gfp_mask, &gfp_mask, - page_owner->pid, page_owner->comm, page_owner->ts_nsec, - page_owner->free_ts_nsec); + page_owner->pid, page_owner->tgid, page_owner->comm, + page_owner->ts_nsec, page_owner->free_ts_nsec); handle = READ_ONCE(page_owner->handle); if (!handle) @@ -669,3 +672,4 @@ static int __init pageowner_init(void) return 0; } late_initcall(pageowner_init) +