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 6953EC433EF for ; Mon, 31 Jan 2022 22:04:32 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id CB0458D002A; Mon, 31 Jan 2022 17:04:31 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id C5FCB8D0028; Mon, 31 Jan 2022 17:04:31 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id B01088D002A; Mon, 31 Jan 2022 17:04:31 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0202.hostedemail.com [216.40.44.202]) by kanga.kvack.org (Postfix) with ESMTP id 9DDBE8D0028 for ; Mon, 31 Jan 2022 17:04:31 -0500 (EST) Received: from smtpin10.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay02.hostedemail.com (Postfix) with ESMTP id 57ABF92EA5 for ; Mon, 31 Jan 2022 22:04:31 +0000 (UTC) X-FDA: 79091961942.10.2B8C313 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by imf19.hostedemail.com (Postfix) with ESMTP id 486FA1A000A for ; Mon, 31 Jan 2022 22:04:30 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1643666669; 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=9aKB5sHqkB4yA/NZkUcPtaZmTB/OCLFJA8xcIjhQ6gw=; b=H+bpJLIA7SEKyTkHdUtskkps5WXY5L7569JP0bica++9nijna64DP8utmWNHL1OHIUzhmo nJqkp/Cd0l8EnfNyGlosasxOB38S9V2lAnJLmTuLnKaMUwFH8UeAlojIbSS0hePYW7b/bX PiM4T7Jb+1itMB7qdjAx30JAlocwZ94= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-484-AR1_0s-ROqeqVAAzulU2Pw-1; Mon, 31 Jan 2022 17:04:26 -0500 X-MC-Unique: AR1_0s-ROqeqVAAzulU2Pw-1 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id D0CC6192AB73; Mon, 31 Jan 2022 22:04:23 +0000 (UTC) Received: from llong.com (unknown [10.22.16.244]) by smtp.corp.redhat.com (Postfix) with ESMTP id 8E6A36AB9A; Mon, 31 Jan 2022 22:04:21 +0000 (UTC) From: Waiman Long To: Johannes Weiner , Michal Hocko , Vladimir Davydov , Andrew Morton , Petr Mladek , Steven Rostedt , Sergey Senozhatsky , Andy Shevchenko , Rasmus Villemoes Cc: linux-kernel@vger.kernel.org, cgroups@vger.kernel.org, linux-mm@kvack.org, Ira Weiny , Mike Rapoport , David Rientjes , Roman Gushchin , Rafael Aquini , Waiman Long Subject: [PATCH v4 4/4] mm/page_owner: Record task command name Date: Mon, 31 Jan 2022 17:03:28 -0500 Message-Id: <20220131220328.622162-1-longman@redhat.com> In-Reply-To: <20220131192308.608837-5-longman@redhat.com> References: <20220131192308.608837-5-longman@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-Stat-Signature: hq4nimpxjuj39uxn6gwdf7wakop5gk38 X-Rspam-User: nil Authentication-Results: imf19.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=H+bpJLIA; spf=none (imf19.hostedemail.com: domain of longman@redhat.com has no SPF policy when checking 170.10.133.124) smtp.mailfrom=longman@redhat.com; dmarc=pass (policy=none) header.from=redhat.com X-Rspamd-Server: rspam02 X-Rspamd-Queue-Id: 486FA1A000A X-HE-Tag: 1643666670-511569 Content-Transfer-Encoding: quoted-printable 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: The page_owner information currently includes the pid of the calling task. That is useful as long as the task is still running. Otherwise, the number is meaningless. To have more information about the allocating tasks that had exited by the time the page_owner information is retrieved, we need to store the command name of the task. Add a new comm field into page_owner structure to store the command name and display it when the page_owner information is retrieved. Signed-off-by: Waiman Long --- mm/page_owner.c | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/mm/page_owner.c b/mm/page_owner.c index a471c74c7fe0..485542155483 100644 --- a/mm/page_owner.c +++ b/mm/page_owner.c @@ -29,6 +29,7 @@ struct page_owner { depot_stack_handle_t free_handle; u64 ts_nsec; u64 free_ts_nsec; + char comm[TASK_COMM_LEN]; pid_t pid; }; =20 @@ -146,6 +147,7 @@ void __reset_page_owner(struct page *page, unsigned s= hort order) page_owner =3D get_page_owner(page_ext); page_owner->free_handle =3D handle; page_owner->free_ts_nsec =3D free_ts_nsec; + page_owner->comm[0] =3D '\0'; page_ext =3D page_ext_next(page_ext); } } @@ -165,6 +167,8 @@ static inline void __set_page_owner_handle(struct pag= e_ext *page_ext, page_owner->last_migrate_reason =3D -1; page_owner->pid =3D current->pid; page_owner->ts_nsec =3D local_clock(); + strlcpy(page_owner->comm, current->comm, + sizeof(page_owner->comm)); __set_bit(PAGE_EXT_OWNER, &page_ext->flags); __set_bit(PAGE_EXT_OWNER_ALLOCATED, &page_ext->flags); =20 @@ -232,6 +236,7 @@ void __folio_copy_owner(struct folio *newfolio, struc= t folio *old) new_page_owner->pid =3D old_page_owner->pid; new_page_owner->ts_nsec =3D old_page_owner->ts_nsec; new_page_owner->free_ts_nsec =3D old_page_owner->ts_nsec; + strcpy(new_page_owner->comm, old_page_owner->comm); =20 /* * We don't clear the bit on the old folio as it's going to be freed @@ -376,10 +381,11 @@ print_page_owner(char __user *buf, size_t count, un= signed long pfn, return -ENOMEM; =20 ret =3D scnprintf(kbuf, count, - "Page allocated via order %u, mask %#x(%pGg), pid %d, ts %llu ns, fre= e_ts %llu ns\n", + "Page allocated via order %u, mask %#x(%pGg), pid %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->ts_nsec, page_owner->free_ts_nsec); + page_owner->comm, page_owner->ts_nsec, + page_owner->free_ts_nsec); =20 /* Print information relevant to grouping pages by mobility */ pageblock_mt =3D get_pageblock_migratetype(page); @@ -446,9 +452,10 @@ void __dump_page_owner(const struct page *page) else pr_alert("page_owner tracks the page as freed\n"); =20 - pr_alert("page last allocated via order %u, migratetype %s, gfp_mask %#= x(%pGg), pid %d, ts %llu, free_ts %llu\n", + pr_alert("page last allocated via order %u, migratetype %s, gfp_mask %#= x(%pGg), pid %d (%s), ts %llu, free_ts %llu\n", page_owner->order, migratetype_names[mt], gfp_mask, &gfp_mask, - page_owner->pid, page_owner->ts_nsec, page_owner->free_ts_nsec); + page_owner->pid, page_owner->comm, page_owner->ts_nsec, + page_owner->free_ts_nsec); =20 handle =3D READ_ONCE(page_owner->handle); if (!handle) --=20 2.27.0