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 59F57C7115B for ; Wed, 18 Jun 2025 04:06:38 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id D26286B0088; Wed, 18 Jun 2025 00:06:37 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id CFD996B0089; Wed, 18 Jun 2025 00:06:37 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id C3FB56B008A; Wed, 18 Jun 2025 00:06:37 -0400 (EDT) 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 A89B96B0088 for ; Wed, 18 Jun 2025 00:06:37 -0400 (EDT) Received: from smtpin24.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay05.hostedemail.com (Postfix) with ESMTP id 0050A56338 for ; Wed, 18 Jun 2025 04:06:36 +0000 (UTC) X-FDA: 83567184834.24.3FBD399 Received: from us-smtp-delivery-44.mimecast.com (us-smtp-delivery-44.mimecast.com [207.211.30.44]) by imf28.hostedemail.com (Postfix) with ESMTP id 05BC5C0002 for ; Wed, 18 Jun 2025 04:06:34 +0000 (UTC) Authentication-Results: imf28.hostedemail.com; dkim=none; spf=softfail (imf28.hostedemail.com: 207.211.30.44 is neither permitted nor denied by domain of airlied@gmail.com) smtp.mailfrom=airlied@gmail.com; dmarc=fail reason="No valid SPF, No valid DKIM" header.from=gmail.com (policy=none) ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1750219595; 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: references; bh=EkfG4SYkeaF7iycWW3VMOyvVJezxIZpoSbvPBSzVv0M=; b=pp55aCPPqa0mBi+p/LWQWVKqfnhXrHjb7h6XmNTrfmKjkUBiHZqGkL/kDH1UVLnLiCFsBz IGRxIo0s8wmmE27osuWzBmc3nL/BaKtOOS5T6UV2gi3cKjZ4hY6scy9mPFKO7smwblrMqC tx9L0mxH5TU8oZH7ASL/s/p+dZo4wZ8= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1750219595; a=rsa-sha256; cv=none; b=b/YQZXCzgFNofr5C5wsR7aBGSEspPIuNUrk12ViDUt5f272N+t3QJlLHIdpAbpP8v/Ac5v hUj0Hy8ezF5E7+vjRISBYmVr0I2kATPkFjEaM3KESBqckQpBlnEUfX+dJVUi2EhND7nNOu nygGAik8zIE2sQSiMzNM4Z/9iIlElXM= ARC-Authentication-Results: i=1; imf28.hostedemail.com; dkim=none; spf=softfail (imf28.hostedemail.com: 207.211.30.44 is neither permitted nor denied by domain of airlied@gmail.com) smtp.mailfrom=airlied@gmail.com; dmarc=fail reason="No valid SPF, No valid DKIM" header.from=gmail.com (policy=none) Received: from mx-prod-mc-03.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-609-ttFkMfe9P36aYmWnS4EreQ-1; Wed, 18 Jun 2025 00:06:30 -0400 X-MC-Unique: ttFkMfe9P36aYmWnS4EreQ-1 X-Mimecast-MFC-AGG-ID: ttFkMfe9P36aYmWnS4EreQ_1750219589 Received: from mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.111]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-03.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 5293019560B5; Wed, 18 Jun 2025 04:06:29 +0000 (UTC) Received: from dreadlord.redhat.com (unknown [10.67.24.91]) by mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 8D161180045B; Wed, 18 Jun 2025 04:06:22 +0000 (UTC) From: Dave Airlie To: dri-devel@lists.freedesktop.org Cc: Dave Airlie , Christian Koenig , Matthew Brost , Johannes Weiner , linux-mm@kvack.org, Andrew Morton Subject: [PATCH 1/2] mm: add gpu active/reclaim per-node stat counters Date: Wed, 18 Jun 2025 14:06:17 +1000 Message-ID: <20250618040618.564650-1-airlied@gmail.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.111 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: ZNuf70dETUp-ln6xM6YOoqqGdTdjdrYRfmPAOSSwgKs_1750219589 X-Mimecast-Originator: gmail.com Content-Transfer-Encoding: quoted-printable content-type: text/plain; charset=WINDOWS-1252; x-default=true X-Rspamd-Server: rspam03 X-Stat-Signature: zogfoz7qik9prj3r4m8ghid6cqa5yy3f X-Rspam-User: X-Rspamd-Queue-Id: 05BC5C0002 X-HE-Tag: 1750219594-70871 X-HE-Meta: U2FsdGVkX1+6wjY/7Em5MDshZW3TAHXOw8tQcCh6+oXmogZ9b5aHSIRD6s9KQcNeOqsvUQdL6xP6LxQgwwpNIn7SWpebev/BXWf2X6C2R0TdnRCwJyF1hnBZ8whDh15ArBjrdb7CXNHsAIUJF1gYxq1A+ySsts5x64NRKl5/lVIqbSWXxXX4e55AVYH4td1MdYw49/GUcl/XT2WjlT55nAbDKxCmimooxf2IbX++LbHQ501wEPnMeJwJmap9OYXDFZg+uK9Ckmj0hkfQtHXxAw8wBQwmloTe+m8a6HpUpY8zRCxWKnKUDYr6KLY0gBuulIOsF7npGWH9zuWodkxghRQ1dW/yNx8rAQTJP/dpw7TGaUd2mKayQKBA0ojSdWBQnNn3Le1HCvnENVI+iRKeePzMO2s5TTxDWgRSne0QrwN9w69qOc9zti4VtnbJN8+xQp8rchiq/Sx2VVg68sJwp5ig5X4GcFuSRz8/05PH4iFII22xL9zjh38+x4b0BIqIqbnvk1GCxQIYOAWPuKzyA7IaW0rF5a9Unj9z2a41kVRXSiRTX14Sb+Q7vF+9/20rzPbFz1ESQnpMb6IW6eb6Mm+qQMJn29icgr3SbvkJ/5EFlR5rnsnIL2aTWLzTtqebQcHFtWPLcEamaN4zOzluwZ2x2h7w74cXYPgr6HyIB3QGS9HIHKtQiAneYnL13lWP7AIbnBo2/LjP+3nWfCB91FeHgriadw56iWNtHH61VhuW79hjHnchxfiBpmUMD28PPXU8v4/zxpnjYrKWKmWcaB8U5oAvWYUhmNRcF2cjXUKLF3N0Usg0bbgvR7VjTMEwAUlLyuMNm9Cx7TA9lL/ZSCNhMsjUEuUs9IuiQs3lx9W0z6iqKkfggddynVoSqjbDOhe8y4sDMgjjUHKassuXQRmt97IZtXrpN9Nk6iqVN3EA0dwG8QOEm1+mNyXH9WjMayUSSMxc9OXI7W/nVZv DVUpH/lZ HNOuASF38gnvX5BZyx4uRERgdUxnpJKJs/zBW169dut+ajMLHd0x/PzzjWToBc++hzGMgOln17yXxHmsulyMS3AoqDIT3xHDBQMKN0ugVkuVeU+x5dOYWt0sbD6NbkTuH4ELyCXrtEII9fZBnqgo2e3RwFNiuFTqsGd0hrF22hzqhF8/L0TmchFqSqQsIOQk7rWJ6AHSaYwNPJpOd80/R/OwTET+gT0+FDsmVt8AbjdXFtgX/BSEZZ59VNsCd/sU9GpNI75I8ArqxHJTIgoWh3qUpBx0EMV5QdUrRZ6swBZPLiFdVDTHDwZ4zPDQ9nXQ0mrUbZQqVk0CiHVy1ANZefrehqSwXLoF0BSIwEq7OJgBh++aTIyhoVa4TKihTYJZh495UyAL9DTRABOT7SLkcCrKuCJpyIrmsagdnxexCAZVeuKIK2w1kGI1qFDKt/7eW4upwD4srEYabq76cGqpqW8R4LlhmiVl4NvSUgdf/hX1EovVWs7HA/yeg+/VXCCWIGlgCZYkFc0rWOUBdeNKcOcAIiaxj6TxXZ3b73ei6w/bM/1t67CLG2JYcpkQhkKPX+zPO1dNBUOaF+vGeDoTt4ePNNV+TQVQ9E4pu 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: From: Dave Airlie While discussing memcg intergration with gpu memory allocations, it was pointed out that there was no numa/system counters for GPU memory allocations. With more integrated memory GPU server systems turning up, and more requirements for memory tracking it seems we should start closing the gap. Add two counters to track GPU per-node system memory allocations. The first is currently allocated to GPU objects, and the second is for memory that is stored in GPU page pools that can be reclaimed, by the shrinker. Cc: Christian Koenig Cc: Matthew Brost Cc: Johannes Weiner Cc: linux-mm@kvack.org Cc: Andrew Morton Signed-off-by: Dave Airlie --- I'd like to get acks to merge this via the drm tree, if possible, Dave. --- Documentation/filesystems/proc.rst | 6 ++++++ drivers/base/node.c | 5 +++++ fs/proc/meminfo.c | 6 ++++++ include/linux/mmzone.h | 2 ++ mm/show_mem.c | 9 +++++++-- mm/vmstat.c | 2 ++ 6 files changed, 28 insertions(+), 2 deletions(-) diff --git a/Documentation/filesystems/proc.rst b/Documentation/filesystems= /proc.rst index 5236cb52e357..45f61a19a790 100644 --- a/Documentation/filesystems/proc.rst +++ b/Documentation/filesystems/proc.rst @@ -1095,6 +1095,8 @@ Example output. You may not have all of these fields. CmaFree: 0 kB Unaccepted: 0 kB Balloon: 0 kB + GPUActive: 0 kB + GPUReclaim: 0 kB HugePages_Total: 0 HugePages_Free: 0 HugePages_Rsvd: 0 @@ -1273,6 +1275,10 @@ Unaccepted Memory that has not been accepted by the guest Balloon Memory returned to Host by VM Balloon Drivers +GPUActive + Memory allocated to GPU objects +GPUReclaim + Memory in GPU allocator pools that is reclaimable HugePages_Total, HugePages_Free, HugePages_Rsvd, HugePages_Surp, Hugepages= ize, Hugetlb See Documentation/admin-guide/mm/hugetlbpage.rst. DirectMap4k, DirectMap2M, DirectMap1G diff --git a/drivers/base/node.c b/drivers/base/node.c index c19094481630..64406862314b 100644 --- a/drivers/base/node.c +++ b/drivers/base/node.c @@ -463,6 +463,8 @@ static ssize_t node_read_meminfo(struct device *dev, #ifdef CONFIG_UNACCEPTED_MEMORY =09=09=09 "Node %d Unaccepted: %8lu kB\n" #endif +=09=09=09 "Node %d GPUActive: %8lu kB\n" +=09=09=09 "Node %d GPUReclaim: %8lu kB\n" =09=09=09 , =09=09=09 nid, K(node_page_state(pgdat, NR_FILE_DIRTY)), =09=09=09 nid, K(node_page_state(pgdat, NR_WRITEBACK)), @@ -496,6 +498,9 @@ static ssize_t node_read_meminfo(struct device *dev, =09=09=09 , =09=09=09 nid, K(sum_zone_node_page_state(nid, NR_UNACCEPTED)) #endif +=09=09=09 , +=09=09=09 nid, K(node_page_state(pgdat, NR_GPU_ACTIVE)), +=09=09=09 nid, K(node_page_state(pgdat, NR_GPU_RECLAIM)) =09=09=09 ); =09len +=3D hugetlb_report_node_meminfo(buf, len, nid); =09return len; diff --git a/fs/proc/meminfo.c b/fs/proc/meminfo.c index bc2bc60c36cc..334948744e55 100644 --- a/fs/proc/meminfo.c +++ b/fs/proc/meminfo.c @@ -164,6 +164,12 @@ static int meminfo_proc_show(struct seq_file *m, void = *v) =09show_val_kb(m, "Balloon: ", =09=09 global_node_page_state(NR_BALLOON_PAGES)); =20 +=09show_val_kb(m, "GPUActive: ", +=09=09 global_node_page_state(NR_GPU_ACTIVE)); + +=09show_val_kb(m, "GPUReclaim: ", +=09=09 global_node_page_state(NR_GPU_RECLAIM)); + =09hugetlb_report_meminfo(m); =20 =09arch_report_meminfo(m); diff --git a/include/linux/mmzone.h b/include/linux/mmzone.h index 283913d42d7b..95c5e4813427 100644 --- a/include/linux/mmzone.h +++ b/include/linux/mmzone.h @@ -241,6 +241,8 @@ enum node_stat_item { =09NR_HUGETLB, #endif =09NR_BALLOON_PAGES, +=09NR_GPU_ACTIVE, /* GPU pages assigned to an object */ +=09NR_GPU_RECLAIM, /* GPU pages in shrinkable pool */ =09NR_VM_NODE_STAT_ITEMS }; =20 diff --git a/mm/show_mem.c b/mm/show_mem.c index 0cf8bf5d832d..072d33a50148 100644 --- a/mm/show_mem.c +++ b/mm/show_mem.c @@ -255,7 +255,9 @@ static void show_free_areas(unsigned int filter, nodema= sk_t *nodemask, int max_z =09=09=09" sec_pagetables:%lukB" =09=09=09" all_unreclaimable? %s" =09=09=09" Balloon:%lukB" -=09=09=09"\n", +=09=09 " gpu_active:%lukB" +=09=09 " gpu_reclaim:%lukB" +=09=09 "\n", =09=09=09pgdat->node_id, =09=09=09K(node_page_state(pgdat, NR_ACTIVE_ANON)), =09=09=09K(node_page_state(pgdat, NR_INACTIVE_ANON)), @@ -281,7 +283,10 @@ static void show_free_areas(unsigned int filter, nodem= ask_t *nodemask, int max_z =09=09=09K(node_page_state(pgdat, NR_PAGETABLE)), =09=09=09K(node_page_state(pgdat, NR_SECONDARY_PAGETABLE)), =09=09=09str_yes_no(pgdat->kswapd_failures >=3D MAX_RECLAIM_RETRIES), -=09=09=09K(node_page_state(pgdat, NR_BALLOON_PAGES))); +=09=09 K(node_page_state(pgdat, NR_BALLOON_PAGES)), +=09=09 K(node_page_state(pgdat, NR_GPU_ACTIVE)), +=09=09=09K(node_page_state(pgdat, NR_GPU_RECLAIM))); + =09} =20 =09for_each_populated_zone(zone) { diff --git a/mm/vmstat.c b/mm/vmstat.c index 429ae5339bfe..25a74cf29473 100644 --- a/mm/vmstat.c +++ b/mm/vmstat.c @@ -1281,6 +1281,8 @@ const char * const vmstat_text[] =3D { =09"nr_hugetlb", #endif =09"nr_balloon_pages", +=09"nr_gpu_active", +=09"nr_gpu_reclaim", =09/* system-wide enum vm_stat_item counters */ =09"nr_dirty_threshold", =09"nr_dirty_background_threshold", --=20 2.49.0