Received: by 2002:a05:7412:2a8c:b0:e2:908c:2ebd with SMTP id u12csp2969749rdh; Wed, 27 Sep 2023 20:35:20 -0700 (PDT) X-Google-Smtp-Source: AGHT+IHCPCfjbn7K8VZVoDLIKzQp3bQeP7zA1wR6sYvl6KurGVQetL3w4WQKVEgoIzA7aAzeDeq+ X-Received: by 2002:a17:90a:e38a:b0:26f:b228:faea with SMTP id b10-20020a17090ae38a00b0026fb228faeamr59922pjz.18.1695872120005; Wed, 27 Sep 2023 20:35:20 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1695872119; cv=none; d=google.com; s=arc-20160816; b=lZY2wWIJZHBDI/9h53u1Wa7sy/aFNKE7LMbivz021uSU37ra0j7sTMEarNhElk/I4a mQ1rn9o9y4cTqJzGPr9rHRZW5f5D1BoFMwUm7EizCw3X0YZivereGluN0+qGGxsjwNXz PtBXu1pX1Ud355ir2xBENi8bHGrHuwTOV7QqDfeDXxKwXP4V+tKNDH/KU4baLCM4I6Ls VWJDGmKwJPPpaHObWU1xdY53a5U3phU8Z7WdtAGqkoCPbCotR02DlrItR6+Al3zS0+eh gSHejPUyOc7jCAI/D0jSB0I0fk7jSyvevVlULUMZIz0WXZBcgNt7H8ZF/LWvD2lJAd8e CEbA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=J5AJSVmF1t2APrsR4UUB4eUnT7EcdUAl6CT+2VkdB3M=; fh=oafDi+4LBrMFegKu/vIn55zDZSRk5yV7iqXSiz6vip8=; b=sbDo0sVzyN1uRWUAcLEXy7Nutv5rThBD+kNhN/oIc5E/WlDi0wx18nEaMTZueaZizd DWzk/XKdG8/NQv3e0WfCN46c2FYVwvL1KHbRkmYkvbHIDWPqpdrzt/e8/DqTurXKhs4x w5J4HEBKbsdFNkWgneEfrU7/cskxbIYPqViN2WMcj2NABPX6JzVMSXn4mVk0SblTDSKk 3bO5FBslwSpgE9Xv1ghu38AL3RrgEPWB5JN6zvAz/KuZaGg0JM0w++S6vRAIELaZmaVU +sMrFbqp9bmcst8dPGRjoGeu87hfeSfPmD6LCEVUL6HjZpWgJc0ijmRSJUey6kc7LHB8 YPSQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@collabora.com header.s=mail header.b=CuD2g74X; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.36 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=collabora.com Return-Path: Received: from pete.vger.email (pete.vger.email. [23.128.96.36]) by mx.google.com with ESMTPS id f2-20020a17090a9b0200b002700bcdbff1si270577pjp.154.2023.09.27.20.35.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 27 Sep 2023 20:35:19 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.36 as permitted sender) client-ip=23.128.96.36; Authentication-Results: mx.google.com; dkim=pass header.i=@collabora.com header.s=mail header.b=CuD2g74X; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.36 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=collabora.com Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by pete.vger.email (Postfix) with ESMTP id 2E8E680411BE; Wed, 27 Sep 2023 14:32:27 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at pete.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230009AbjI0Vby (ORCPT + 99 others); Wed, 27 Sep 2023 17:31:54 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:32862 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229954AbjI0Vbq (ORCPT ); Wed, 27 Sep 2023 17:31:46 -0400 Received: from madras.collabora.co.uk (madras.collabora.co.uk [46.235.227.172]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 85D0C126; Wed, 27 Sep 2023 14:31:44 -0700 (PDT) Received: from localhost.localdomain (unknown [IPv6:2a02:8010:65b5:0:1ac0:4dff:feee:236a]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: alarumbe) by madras.collabora.co.uk (Postfix) with ESMTPSA id 32989660731A; Wed, 27 Sep 2023 22:31:43 +0100 (BST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1695850303; bh=y6K2Kxu+7xbA/SYhPSA1aQAKzrnxHm217qP6EJXy33k=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=CuD2g74XuKA8eLOn8SB7wUNUHAdhShM14NlITc5I/jKUCTSd5JLE5D8tggnEg/Eh6 uBwUEQeaj0YB1owIQXRaemgkBk871wZr9vzwNcUWphNlHLNFQDk82Wosg3umDK2C/R CvLbRrt/hJ1vtRXoDJ5aFUsaxvXujgoDj6ZpaWo4lAHZo8Qga0XiBEkCPqMV8fGBvl MZXo5g6TTB4IlphG5F1ofceeuRyfo3OvG2Xnveqa1ydrAm+N6B4xTowFBdz55SJdRj w5utSsaf1/4udLisIOs1Wd4BpSxoqc6LwAWGWGpU7B81uoAW/dN/q7MRNgLFo5clKI rD7WW6X/ROS1g== From: =?UTF-8?q?Adri=C3=A1n=20Larumbe?= To: maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, daniel@ffwll.ch, robdclark@gmail.com, quic_abhinavk@quicinc.com, dmitry.baryshkov@linaro.org, sean@poorly.run, marijn.suijten@somainline.org, robh@kernel.org, steven.price@arm.com Cc: adrian.larumbe@collabora.com, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, freedreno@lists.freedesktop.org, healych@amazon.com, kernel@collabora.com, tvrtko.ursulin@linux.intel.com, boris.brezillon@collabora.com Subject: [PATCH v7 4/5] drm/drm_file: Add DRM obj's RSS reporting function for fdinfo Date: Wed, 27 Sep 2023 22:29:58 +0100 Message-ID: <20230927213133.1651169-5-adrian.larumbe@collabora.com> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20230927213133.1651169-1-adrian.larumbe@collabora.com> References: <20230927213133.1651169-1-adrian.larumbe@collabora.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-0.9 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI, SPF_HELO_NONE,SPF_PASS autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on pete.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (pete.vger.email [0.0.0.0]); Wed, 27 Sep 2023 14:32:27 -0700 (PDT) Some BO's might be mapped onto physical memory chunkwise and on demand, like Panfrost's tiler heap. In this case, even though the drm_gem_shmem_object page array might already be allocated, only a very small fraction of the BO is currently backed by system memory, but drm_show_memory_stats will then proceed to add its entire virtual size to the file's total resident size regardless. This led to very unrealistic RSS sizes being reckoned for Panfrost, where said tiler heap buffer is initially allocated with a virtual size of 128 MiB, but only a small part of it will eventually be backed by system memory after successive GPU page faults. Provide a new DRM object generic function that would allow drivers to return a more accurate RSS and purgeable sizes for their BOs. Signed-off-by: Adrián Larumbe Reviewed-by: Boris Brezillon Reviewed-by: Steven Price --- drivers/gpu/drm/drm_file.c | 8 +++++--- include/drm/drm_gem.h | 9 +++++++++ 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/drivers/gpu/drm/drm_file.c b/drivers/gpu/drm/drm_file.c index 883d83bc0e3d..9a1bd8d0d785 100644 --- a/drivers/gpu/drm/drm_file.c +++ b/drivers/gpu/drm/drm_file.c @@ -930,6 +930,8 @@ void drm_show_memory_stats(struct drm_printer *p, struct drm_file *file) spin_lock(&file->table_lock); idr_for_each_entry (&file->object_idr, obj, id) { enum drm_gem_object_status s = 0; + size_t add_size = (obj->funcs && obj->funcs->rss) ? + obj->funcs->rss(obj) : obj->size; if (obj->funcs && obj->funcs->status) { s = obj->funcs->status(obj); @@ -944,7 +946,7 @@ void drm_show_memory_stats(struct drm_printer *p, struct drm_file *file) } if (s & DRM_GEM_OBJECT_RESIDENT) { - status.resident += obj->size; + status.resident += add_size; } else { /* If already purged or not yet backed by pages, don't * count it as purgeable: @@ -953,14 +955,14 @@ void drm_show_memory_stats(struct drm_printer *p, struct drm_file *file) } if (!dma_resv_test_signaled(obj->resv, dma_resv_usage_rw(true))) { - status.active += obj->size; + status.active += add_size; /* If still active, don't count as purgeable: */ s &= ~DRM_GEM_OBJECT_PURGEABLE; } if (s & DRM_GEM_OBJECT_PURGEABLE) - status.purgeable += obj->size; + status.purgeable += add_size; } spin_unlock(&file->table_lock); diff --git a/include/drm/drm_gem.h b/include/drm/drm_gem.h index bc9f6aa2f3fe..16364487fde9 100644 --- a/include/drm/drm_gem.h +++ b/include/drm/drm_gem.h @@ -208,6 +208,15 @@ struct drm_gem_object_funcs { */ enum drm_gem_object_status (*status)(struct drm_gem_object *obj); + /** + * @rss: + * + * Return resident size of the object in physical memory. + * + * Called by drm_show_memory_stats(). + */ + size_t (*rss)(struct drm_gem_object *obj); + /** * @vm_ops: * -- 2.42.0