[Mesa-dev] [PATCH] i965: Query the actual GTT size for reporting total usuable GPU memory
Daniel Vetter
daniel at ffwll.ch
Mon Oct 19 09:39:45 PDT 2015
On Mon, Oct 19, 2015 at 12:08:41PM +0100, Chris Wilson wrote:
> The amount of memory that the GPU can use in any single batch is the
> amount of memory it can map into its page tables, that is the GTT size.
> With per-process GTT (i.e. every context has its own set of page tables),
> this value may differ from the global GTT size (and is often larger).
> When reporting how much memory a client may use with the GPU, it is the
> size of the context GTT that is the limiting factor.
>
> (Additionally, get_aperture_ioctl is relatively expensive for our query
> of the constant GTT size as it also computes addition information not
> used here and has the side-effect of doing a sysfs scan for PCI
> devices.)
>
> Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
Since I just pulled in the kernel side earlier today:
Reviewed-by: Daniel Vetter <daniel.vetter at ffwll.ch>
> Cc: Daniel Vetter <daniel at ffwll.ch>
> Cc: Kristian Høgsberg <krh at bitplanet.net>
> Cc: Kenneth Graunke <kenneth at whitecape.org>
> Cc: Ian Romanick <ian.d.romanick at intel.com>
> ---
> src/mesa/drivers/dri/i965/intel_screen.c | 22 +++++++++++++++++-----
> 1 file changed, 17 insertions(+), 5 deletions(-)
>
> diff --git a/src/mesa/drivers/dri/i965/intel_screen.c b/src/mesa/drivers/dri/i965/intel_screen.c
> index b77b747..cdf5b0d 100644
> --- a/src/mesa/drivers/dri/i965/intel_screen.c
> +++ b/src/mesa/drivers/dri/i965/intel_screen.c
> @@ -787,6 +787,22 @@ static const __DRIimageExtension intelImageExtension = {
> .getCapabilities = NULL
> };
>
> +static uint64_t intel_get_gtt_size(int fd)
> +{
> + struct drm_i915_gem_context_param p;
> + size_t mappable_size, aper_size;
> +
> + memset(&p, 0, sizeof(p));
> +#define I915_CONTEXT_PARAM_GTT_SIZE 0x3 /* XXX requires future libdrm */
> + p.param = I915_CONTEXT_PARAM_GTT_SIZE;
Optional bikeshed: Maybe explicitly set the context to 0 to make it clear
we're querying the (always present) default context here.
> + if (drmIoctl(fd, DRM_IOCTL_I915_GEM_CONTEXT_GETPARAM, &p) == 0)
> + return p.value;
> +
> + drm_intel_get_aperture_sizes(fd, &mappable_size, &aper_size);
> +
> + return aper_size;
> +}
> +
> static int
> brw_query_renderer_integer(__DRIscreen *psp, int param, unsigned int *value)
> {
> @@ -808,11 +824,7 @@ brw_query_renderer_integer(__DRIscreen *psp, int param, unsigned int *value)
> * assume that there's some fragmentation, and we start doing extra
> * flushing, etc. That's the big cliff apps will care about.
> */
> - size_t aper_size;
> - size_t mappable_size;
> -
> - drm_intel_get_aperture_sizes(psp->fd, &mappable_size, &aper_size);
> -
> + uint64_t aper_size = intel_get_gtt_size(psp->fd);
> const unsigned gpu_mappable_megabytes =
> (aper_size / (1024 * 1024)) * 3 / 4;
>
> --
> 2.6.1
>
--
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
More information about the mesa-dev
mailing list