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 87C15C83F1A for ; Mon, 14 Jul 2025 18:33:32 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id C8AD48D000C; Mon, 14 Jul 2025 14:33:31 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id C3ACD8D0001; Mon, 14 Jul 2025 14:33:31 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id B02008D000C; Mon, 14 Jul 2025 14:33:31 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0015.hostedemail.com [216.40.44.15]) by kanga.kvack.org (Postfix) with ESMTP id 99EBD8D0001 for ; Mon, 14 Jul 2025 14:33:31 -0400 (EDT) Received: from smtpin22.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay10.hostedemail.com (Postfix) with ESMTP id 9F301C024B for ; Mon, 14 Jul 2025 18:33:30 +0000 (UTC) X-FDA: 83663718180.22.360DC41 Received: from out-185.mta0.migadu.com (out-185.mta0.migadu.com [91.218.175.185]) by imf28.hostedemail.com (Postfix) with ESMTP id C45CCC000A for ; Mon, 14 Jul 2025 18:33:28 +0000 (UTC) Authentication-Results: imf28.hostedemail.com; dkim=pass header.d=linux.dev header.s=key1 header.b=ZTEBT6Pb; spf=pass (imf28.hostedemail.com: domain of shakeel.butt@linux.dev designates 91.218.175.185 as permitted sender) smtp.mailfrom=shakeel.butt@linux.dev; dmarc=pass (policy=none) header.from=linux.dev ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1752518009; 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: in-reply-to:in-reply-to:references:references:dkim-signature; bh=V0w35sJiaFHKvoa98nG7CjPkF9EmUF1Ww6GJaNOJtTs=; b=OkowhFeULonJ2FdxkkQyo2O0CCBf07jDw7XsgHD3y+K5OkS0qDrFkbqt2Uv/Y3HcLv13Xr KtMqT4LducHwNIbzNcUFaLC5Xt0xb30v7OP5YfXyAVPuepuCEh/5CdfD4yYdekUd9yzjHF PQangpKUz/D9QwlGl4I20B/uplQh8es= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1752518009; a=rsa-sha256; cv=none; b=f9tAmPb/rQKvKDoGbFal6zQtt8Vrmw75X5ko2W0rYvmTshXuxduZRl65clb6rgUWrkRvqx fJPJ0Ajt2Hnj8ZDBns7u/Tr192DDoSxc4A/hUV9Zyf/h4DqkEtE3VyJmG1uoRLXxyTvT1u vo5WhO4DFDDfbxdNtoklNz+di1H1g/E= ARC-Authentication-Results: i=1; imf28.hostedemail.com; dkim=pass header.d=linux.dev header.s=key1 header.b=ZTEBT6Pb; spf=pass (imf28.hostedemail.com: domain of shakeel.butt@linux.dev designates 91.218.175.185 as permitted sender) smtp.mailfrom=shakeel.butt@linux.dev; dmarc=pass (policy=none) header.from=linux.dev Date: Mon, 14 Jul 2025 11:33:21 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1752518006; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=V0w35sJiaFHKvoa98nG7CjPkF9EmUF1Ww6GJaNOJtTs=; b=ZTEBT6Pbnvhhx9aSZPRbvf9H5sxgmTRsbc4SufMQVgPBitsj+t8xI61Cd9xB+MYbfamVpr Tiaxk4ECpU9Fm+pNlWcQ+tCxH4D0mESOhcrPH+gFJIEWG6AzOC8TWnhxlOFjvpxq7uOsWA DrhH6wun759jmhp7wMXW0kU/w6frt8Q= X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. From: Shakeel Butt To: Dave Airlie Cc: dri-devel@lists.freedesktop.org, linux-mm@kvack.org, Johannes Weiner , Christian Koenig , Dave Chinner , Kairui Song , Dave Airlie , Matthew Brost , Andrew Morton Subject: Re: [PATCH 02/18] drm/ttm: use gpu mm stats to track gpu memory allocations. (v3) Message-ID: <6jilicmybrxnrv3ynpcheh7skij6caly6bqs5mls77tovmiskz@sxhok6ewvilg> References: <20250714052243.1149732-1-airlied@gmail.com> <20250714052243.1149732-3-airlied@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20250714052243.1149732-3-airlied@gmail.com> X-Migadu-Flow: FLOW_OUT X-Rspamd-Queue-Id: C45CCC000A X-Stat-Signature: qpi97sjkd6csgh9jqgaji9qwbn7pe7hn X-Rspam-User: X-Rspamd-Server: rspam07 X-HE-Tag: 1752518008-667507 X-HE-Meta: U2FsdGVkX1+NQfWP2uVV9dr8N3rXcTVR47FysMlic6aW3rQGUtM98Bvbe/7wVkdxeMHYmYN/jzp9JyGyo7I81vEbx2eRs0MQ1bgGOn0mP0a3z49u270rmYlQrpvEvylETH8j4Pm3gKk6xmlRCMT60QEFvpkdL1A68E+pns6wRI3g6QQ20Edx4rAg8Vix/UeCIIAs2Juvv6E3iD7rGdYH60LvkWskghlWMVTdO3JysiDfntMc3Tk4MXfXIqxL6xEjnOHozg3ckMgTKLzxjQ68KH3FnvFmJRA0Tp8GppqNljB1uDennSlZJlTLRSWDzmYIU8g18w6/QsEG1dtKPPrkhun9iWijuIT2M2LWW7uGM/RKgDsa4K5bnaS/0lhw9gLEB9gKhZBvWDZEt3tz3lBdFvWIjnepUMBKWRywId7IXufURuRYRA8jw8dxDzcxiIvIkLnXXpR6PGHNOr4vuu+IVidf+6+spzp6V3XpYlPnj/TqhSu164Jskg4PSvETlinHpBKF4DVJlfGy4+vd+b0VVHCRrD6jsAFpy9qsqD4tpmNj0tOsUk+uvaPxoRvIRQnkQgpYjtoeeNuIpqbGyyYoN0st5M4bqdXBResEtbPVrl40/ByF/1cXbPu/1f6ASqUalAhk4WgSBldPEozquVDZS+D3QY55MzUXS9wMmSrlmfS0bcDBEdmGOHl021onVnyRy1Ox16jaNQpp1j/oazqDV/fT3HEg/CTduyVnU6jiYm9sSei6v5U1OlYMKzYt6n6xI9EErkXrwAGxOsko8JbZxUbcJKwnGs0h9oTjWotCe76vp7gHD7p73UqhLwGYPJpOfc+CrLTs/SJsAWf5b+JhOqVVTp9g5Ptm5TShojFy/vptV0JsZXiPRDUOXq3vI4Z1bGbn5VO0VN7yQwC8Sf5K2mvYuUnPfcWzo5Z5bnqvkllv1Cpgklqsl3BL6QkffdwKuV1Cup57VG6JZ689QRj HCdhbl3q rkArtXbH4ab5BujjYbCuWstLoeQ2pliHjknAqvk+MH0qxiiKL/d1MlaoP1qubD6tCBvM/4R67k35ufYiMOqRA4a8rTy/7DVURDTVdzIQsUDzo63yYXgVHIdJK+cEsBxy9tXd/IJQcCdxfHR8H818drlHJHkUcynK1/fWt6bFW7QZM0gC/HAJ+dNSTboE28h2jLLZ0xse44vxLcu357n8gOJ761dfNwTboHItVtPnLBnZcTKdki+J9fiJRWP/JKrZ+kr3QOCe1gxCATlEivMr3C6bhX20PoWIv6Ytay0rpeoo1MyeUygSkaze8iTALkqF+7pa21h+c9hhjzVAWOnI/sb1poGSJh2pGLftreuGN1/9Y3Kfql1wbZZ8QBEkwNVLWJuXgNeSh53+MVIrl+L7EAkjnWhATt/80NliRB3uU/jzPcCM5BH8PKj8Z2S8kodjL52KuIcBVw2VRcc8sSoBtO3vDUg== 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 Mon, Jul 14, 2025 at 03:18:17PM +1000, Dave Airlie wrote: > From: Dave Airlie > > This uses the newly introduced per-node gpu tracking stats, > to track GPU memory allocated via TTM and reclaimable memory in > the TTM page pools. > > These stats will be useful later for system information and > later when mem cgroups are integrated. > > Cc: Christian Koenig > Cc: Matthew Brost > Cc: Johannes Weiner > Cc: linux-mm@kvack.org > Cc: Andrew Morton > Signed-off-by: Dave Airlie > > --- > v2: add reclaim parameters and adjust the right counters. > v3: drop the nid helper and get it from page. > --- > drivers/gpu/drm/ttm/ttm_pool.c | 25 +++++++++++++++++++------ > 1 file changed, 19 insertions(+), 6 deletions(-) > > diff --git a/drivers/gpu/drm/ttm/ttm_pool.c b/drivers/gpu/drm/ttm/ttm_pool.c > index baf27c70a419..ee2344089d47 100644 > --- a/drivers/gpu/drm/ttm/ttm_pool.c > +++ b/drivers/gpu/drm/ttm/ttm_pool.c > @@ -150,8 +150,10 @@ static struct page *ttm_pool_alloc_page(struct ttm_pool *pool, gfp_t gfp_flags, > > if (!pool->use_dma_alloc) { > p = alloc_pages_node(pool->nid, gfp_flags, order); > - if (p) > + if (p) { > p->private = order; > + mod_node_page_state(NODE_DATA(page_to_nid(p)), NR_GPU_ACTIVE, (1 << order)); Please use mod_lruvec_page_state() here. > + } > return p; > } > > @@ -186,7 +188,7 @@ static struct page *ttm_pool_alloc_page(struct ttm_pool *pool, gfp_t gfp_flags, > > /* Reset the caching and pages of size 1 << order */ > static void ttm_pool_free_page(struct ttm_pool *pool, enum ttm_caching caching, > - unsigned int order, struct page *p) > + unsigned int order, struct page *p, bool reclaim) > { > unsigned long attr = DMA_ATTR_FORCE_CONTIGUOUS; > struct ttm_pool_dma *dma; > @@ -201,6 +203,9 @@ static void ttm_pool_free_page(struct ttm_pool *pool, enum ttm_caching caching, > #endif > > if (!pool || !pool->use_dma_alloc) { > + mod_node_page_state(NODE_DATA(page_to_nid(p)), > + reclaim ? NR_GPU_RECLAIM : NR_GPU_ACTIVE, > + -(1 << order)); Same here. > __free_pages(p, order); > return; > } > @@ -276,6 +281,7 @@ static void ttm_pool_unmap(struct ttm_pool *pool, dma_addr_t dma_addr, > static void ttm_pool_type_give(struct ttm_pool_type *pt, struct page *p) > { > unsigned int i, num_pages = 1 << pt->order; > + int nid = page_to_nid(p); > > for (i = 0; i < num_pages; ++i) { > if (PageHighMem(p)) > @@ -288,17 +294,24 @@ static void ttm_pool_type_give(struct ttm_pool_type *pt, struct page *p) > list_add(&p->lru, &pt->pages); > spin_unlock(&pt->lock); > atomic_long_add(1 << pt->order, &allocated_pages); > + > + mod_node_page_state(NODE_DATA(nid), NR_GPU_ACTIVE, -num_pages); > + mod_node_page_state(NODE_DATA(nid), NR_GPU_RECLAIM, num_pages); Same here. > } > > /* Take pages from a specific pool_type, return NULL when nothing available */ > static struct page *ttm_pool_type_take(struct ttm_pool_type *pt) > { > struct page *p; > + int nid; > > spin_lock(&pt->lock); > p = list_first_entry_or_null(&pt->pages, typeof(*p), lru); > if (p) { > + nid = page_to_nid(p); > atomic_long_sub(1 << pt->order, &allocated_pages); > + mod_node_page_state(NODE_DATA(nid), NR_GPU_ACTIVE, (1 << pt->order)); > + mod_node_page_state(NODE_DATA(nid), NR_GPU_RECLAIM, -(1 << pt->order)); Same here.