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 54DE0C7EE2A for ; Mon, 30 Jun 2025 04:51:11 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id E5A058D0003; Mon, 30 Jun 2025 00:51:10 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id E0AC68D0001; Mon, 30 Jun 2025 00:51:10 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id CF9B08D0003; Mon, 30 Jun 2025 00:51:10 -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 BD3A98D0001 for ; Mon, 30 Jun 2025 00:51:10 -0400 (EDT) Received: from smtpin17.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay04.hostedemail.com (Postfix) with ESMTP id 9D2091A033E for ; Mon, 30 Jun 2025 04:51:10 +0000 (UTC) X-FDA: 83610842700.17.A47C75E Received: from us-smtp-delivery-44.mimecast.com (us-smtp-delivery-44.mimecast.com [207.211.30.44]) by imf10.hostedemail.com (Postfix) with ESMTP id 917E9C0010 for ; Mon, 30 Jun 2025 04:51:08 +0000 (UTC) Authentication-Results: imf10.hostedemail.com; dkim=none; spf=softfail (imf10.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=1751259068; 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:in-reply-to:references:references; bh=JNH1ejQ+s4KTIAn8DavPEt9jrJ1ZKVP132BTdmFlRWk=; b=urkyyg7jBLc15xQvFQo5T0sAxVlcyC7NAzW5G3p/qDN685Kp6opaM1sggRCaoSTLSJBy4M UK1rS/z+wWjB+8OzNA1mKRYsngZTUVJ7tGYbxcEc47P5t+MfcdZ/9SF7B2MJmSQYGql68z mWdHFKd6FQwQUQNd1/LVepRSFi0QAP8= ARC-Authentication-Results: i=1; imf10.hostedemail.com; dkim=none; spf=softfail (imf10.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-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1751259068; a=rsa-sha256; cv=none; b=M6P9PrgakKQXyL+MBkcKuZUO54Jr4TMty01MNi1/n20XPmHy9iQQZgLSR/QXVDGv6xRXWG M68i/08zvJnfJ+xo/rb0XVDrJ6KLv23FYGo1ELCFZlna5UCUk02ZjmesyF+QaxNDZXzjgh 9QXqMqZM+H1LMZOERnr+hdz7oXRN6xQ= Received: from mx-prod-mc-06.mail-002.prod.us-west-2.aws.redhat.com (ec2-35-165-154-97.us-west-2.compute.amazonaws.com [35.165.154.97]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-677-JEfJhAQvNsqooh4ZGYQIcg-1; Mon, 30 Jun 2025 00:51:06 -0400 X-MC-Unique: JEfJhAQvNsqooh4ZGYQIcg-1 X-Mimecast-MFC-AGG-ID: JEfJhAQvNsqooh4ZGYQIcg_1751259065 Received: from mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.17]) (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-06.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 4988A180029E; Mon, 30 Jun 2025 04:51:05 +0000 (UTC) Received: from dreadlord.redhat.com (unknown [10.67.24.96]) by mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 135F51956095; Mon, 30 Jun 2025 04:50:59 +0000 (UTC) From: Dave Airlie To: dri-devel@lists.freedesktop.org, linux-mm@kvack.org, Johannes Weiner , Christian Koenig Cc: Dave Chinner , Kairui Song , Dave Airlie Subject: [PATCH 06/17] ttm/pool: make pool shrinker NUMA aware Date: Mon, 30 Jun 2025 14:49:25 +1000 Message-ID: <20250630045005.1337339-7-airlied@gmail.com> In-Reply-To: <20250630045005.1337339-1-airlied@gmail.com> References: <20250630045005.1337339-1-airlied@gmail.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.0 on 10.30.177.17 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: QpOXJM03InhxjspEMg5IrQFB3pnyEUGDNz5k-aUt-s0_1751259065 X-Mimecast-Originator: gmail.com Content-Transfer-Encoding: quoted-printable content-type: text/plain; charset=WINDOWS-1252; x-default=true X-Stat-Signature: 8n3rwnpogqrpbmk5fm7yk1mnbfi6bcsy X-Rspamd-Server: rspam08 X-Rspamd-Queue-Id: 917E9C0010 X-Rspam-User: X-HE-Tag: 1751259068-834828 X-HE-Meta: U2FsdGVkX19wh3IdeM21O5xwzJrZiw6Ej+T9mbIqP+hKokTKo7s6U6r2oU5BpUBl841EEzliAzfn3qsCMsFDca2//PQQD40AebL01FGTQxKwCaWKp6vtD06owMni37UjxN88EykCDAPEHkGrYWACZD6gBIqYcP2HxaA0ZUpuv+GsGCrmT25ntubVq8j8EDBkiyX+TSNmr5e0EtdiQFvBgnH1T2sYKfEYl2UoPoUoBNB0h9e/A6hkvyyQ9kyxEkggMnyqIrwODelSdsi7Jn4KJ27abSsWGDAn57AQTs/j0BJyD8ACl60cIV8baXABbz9EDSkLK9KpDe7Kkl+/89D7zS7Kz4Ob+E3aXOfPfmWJATn8TBhm5OQLrKiLHw+6XKHDQJycRe3/qrhI8x+hW4tO3lmZP6ywlzmD8HsCKdVBRAFuB5kO/PA4FNp6ahkcX1sGWHGLF9XNUGeEboCNGQniMUQzYnneL5MSvU3UIlm+G8xk+Z5ajg2zPHlp+lZMi3BL4S7TbsOPUqXImNfM6oE7SozoaW/RTRsiZDPVJ3P4oW2P9vEm44rnbF83hZYHRn9W+7fyEZNsdheMpZtGRwhriQTPMW70V8CjCTdcE+5OETp/L5qPxEw22hNVxfQHEXt1m6b/eiLWopeocbLJOqh4hHZTTOo5IDiE1PYBbH+rlk2XsfKR29Tdrvi2njUXUg9qsuIbj5kK74GJ1mpW/Drn0S2/Y7vPkGAfw23wfJj+M6UevSsDMqfL9N/nD1MIyOv14gePyZ/GEZEL1YeWosiJWZIKug0L0Ylp1+6xZYSw2BZVHX/1enWYpg7Mqa5K6Po3OGZW4Mg246gq771a453xr9Fmc0zYhOBvpx8dluPu0YeF90rw/nScU4EjRjT2w3E9BX70+gnBzEP7/1MvUx38TSObDlTN6bvhEZ45NH+siawx4WyRzloAVWerPcb7ttjyloDwWZwoDP/JWBjUbQ6 CCzm+HZx xOArls8513AtJDSmPqAjWRdW+r35CtuM3RP145S6Rv7oud7VlF3xOJWAoCAeX3OfOYXxzAVO5nQ+VruG+hh0IeCihDKqdwyyhwu9XZEfoQyBVorVOrE3Rz0I35Lv5q4uVn/bIZDJhRYj7Z3G95seqSyUys+psBZmXTQXME45r+w+m1AkM6Q59KLcTDfN5HV9xNmBWBCU+JdSTH+Tgeb8w+rGwA1AZ9Rnvejy8I0qpAQ7eFQ/MKpJfZXqKURPESHGTVxlsYn7dyic59N+WKuxrp/ToJVzyntlkFaqdrdZGR815ES4PLyL8JWGYL+sF+grNOukb6yNK/mZUP4dhC0P2iv32ybq4FY8rwsm47wRp4OcakIxdgyNhrLxyGlCerLGCAArTBGkcU+IkNU6i2gwKtNSCSCGgn+aM91Mrt5AnuAnSvFouAjqougTb82C0V2+XB8wy/D02ULunwN1PyqklGuIxeuKqWY9CGb95V5GWWHq7ORwT4tSkVIZqBg== 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 This enable NUMA awareness for the shrinker on the ttm pools. Cc: Christian Koenig Cc: Dave Chinner Signed-off-by: Dave Airlie --- drivers/gpu/drm/ttm/ttm_pool.c | 38 +++++++++++++++++++--------------- 1 file changed, 21 insertions(+), 17 deletions(-) diff --git a/drivers/gpu/drm/ttm/ttm_pool.c b/drivers/gpu/drm/ttm/ttm_pool.= c index 95bbbc843b97..66cd963b24dc 100644 --- a/drivers/gpu/drm/ttm/ttm_pool.c +++ b/drivers/gpu/drm/ttm/ttm_pool.c @@ -416,12 +416,12 @@ static struct ttm_pool_type *ttm_pool_select_type(str= uct ttm_pool *pool, =09return NULL; } =20 -/* Free pages using the global shrinker list */ -static unsigned int ttm_pool_shrink(void) +/* Free pages using the per-node shrinker list */ +static unsigned int ttm_pool_shrink(int nid, unsigned long num_to_free) { +=09LIST_HEAD(dispose); =09struct ttm_pool_type *pt; =09unsigned int num_pages; -=09struct page *p; =20 =09down_read(&pool_shrink_rwsem); =09spin_lock(&shrinker_lock); @@ -429,13 +429,10 @@ static unsigned int ttm_pool_shrink(void) =09list_move_tail(&pt->shrinker_list, &shrinker_list); =09spin_unlock(&shrinker_lock); =20 -=09p =3D ttm_pool_type_take(pt, ttm_pool_nid(pt->pool)); -=09if (p) { -=09=09ttm_pool_free_page(pt->pool, pt->caching, pt->order, p, true); -=09=09num_pages =3D 1 << pt->order; -=09} else { -=09=09num_pages =3D 0; -=09} +=09num_pages =3D list_lru_walk_node(&pt->pages, nid, pool_move_to_dispose_= list, &dispose, &num_to_free); +=09num_pages *=3D 1 << pt->order; + +=09ttm_pool_dispose_list(pt, &dispose); =09up_read(&pool_shrink_rwsem); =20 =09return num_pages; @@ -784,6 +781,7 @@ static int __ttm_pool_alloc(struct ttm_pool *pool, stru= ct ttm_tt *tt, =09=09pt =3D ttm_pool_select_type(pool, page_caching, order); =09=09if (pt && allow_pools) =09=09=09p =3D ttm_pool_type_take(pt, ttm_pool_nid(pool)); + =09=09/* =09=09 * If that fails or previously failed, allocate from system. =09=09 * Note that this also disallows additional pool allocations using @@ -932,8 +930,10 @@ void ttm_pool_free(struct ttm_pool *pool, struct ttm_t= t *tt) { =09ttm_pool_free_range(pool, tt, tt->caching, 0, tt->num_pages); =20 -=09while (atomic_long_read(&allocated_pages) > page_pool_size) -=09=09ttm_pool_shrink(); +=09while (atomic_long_read(&allocated_pages) > page_pool_size) { +=09=09unsigned long diff =3D page_pool_size - atomic_long_read(&allocated_= pages); +=09=09ttm_pool_shrink(ttm_pool_nid(pool), diff); +=09} } EXPORT_SYMBOL(ttm_pool_free); =20 @@ -1190,7 +1190,7 @@ static unsigned long ttm_pool_shrinker_scan(struct sh= rinker *shrink, =09unsigned long num_freed =3D 0; =20 =09do -=09=09num_freed +=3D ttm_pool_shrink(); +=09=09num_freed +=3D ttm_pool_shrink(sc->nid, sc->nr_to_scan); =09while (num_freed < sc->nr_to_scan && =09 atomic_long_read(&allocated_pages)); =20 @@ -1323,11 +1323,15 @@ static int ttm_pool_debugfs_shrink_show(struct seq_= file *m, void *data) =09=09.nr_to_scan =3D TTM_SHRINKER_BATCH, =09}; =09unsigned long count; +=09int nid; =20 =09fs_reclaim_acquire(GFP_KERNEL); -=09count =3D ttm_pool_shrinker_count(mm_shrinker, &sc); -=09seq_printf(m, "%lu/%lu\n", count, -=09=09 ttm_pool_shrinker_scan(mm_shrinker, &sc)); +=09for_each_node(nid) { +=09=09sc.nid =3D nid; +=09=09count =3D ttm_pool_shrinker_count(mm_shrinker, &sc); +=09=09seq_printf(m, "%d: %lu/%lu\n", nid, count, +=09=09=09 ttm_pool_shrinker_scan(mm_shrinker, &sc)); +=09} =09fs_reclaim_release(GFP_KERNEL); =20 =09return 0; @@ -1375,7 +1379,7 @@ int ttm_pool_mgr_init(unsigned long num_pages) #endif #endif =20 -=09mm_shrinker =3D shrinker_alloc(0, "drm-ttm_pool"); +=09mm_shrinker =3D shrinker_alloc(SHRINKER_NUMA_AWARE, "drm-ttm_pool"); =09if (!mm_shrinker) =09=09return -ENOMEM; =20 --=20 2.49.0