[Mesa-dev] [PATCH 2/2] anv: Advertise larger heap sizes

Jason Ekstrand jason at jlekstrand.net
Sat Mar 18 15:16:15 UTC 2017


On Sat, Mar 18, 2017 at 2:24 AM, Gustaw Smolarczyk <wielkiegie at gmail.com>
wrote:

> 18 mar 2017 05:24 "Jason Ekstrand" <jason at jlekstrand.net> napisaƂ(a):
>
> Instead of just advertising the aperture size, we do something more
> intelligent.  On systems with a full 48-bit PPGTT, we can address 100%
> of the available system RAM from the GPU.  In order to keep clients from
> burning 100% of your available RAM for graphics resources, we have a
> nice little heuristic (which has received exactly zero tuning) to keep
> things under a reasonable level of control.
>
> Cc: Alex Smith <asmith at feralinteractive.com>
> ---
>  src/intel/vulkan/anv_device.c  | 61 ++++++++++++++++++++++++++++++
> +++---------
>  src/intel/vulkan/anv_gem.c     | 16 +++++++++++
>  src/intel/vulkan/anv_private.h | 13 ++++++++-
>  3 files changed, 76 insertions(+), 14 deletions(-)
>
> diff --git a/src/intel/vulkan/anv_device.c b/src/intel/vulkan/anv_device.c
> index 8994e70..fd71a23 100644
> --- a/src/intel/vulkan/anv_device.c
> +++ b/src/intel/vulkan/anv_device.c
> @@ -25,6 +25,7 @@
>  #include <stdbool.h>
>  #include <string.h>
>  #include <sys/mman.h>
> +#include <sys/sysinfo.h>
>  #include <unistd.h>
>  #include <fcntl.h>
>  #include <xf86drm.h>
> @@ -53,6 +54,48 @@ compiler_perf_log(void *data, const char *fmt, ...)
>     va_end(args);
>  }
>
> +static VkResult
> +anv_compute_heap_size(int fd, uint64_t *heap_size)
> +{
> +   uint64_t gtt_size;
> +   if (anv_gem_get_context_param(fd, 0, I915_CONTEXT_PARAM_GTT_SIZE,
> +                                 &gtt_size) == -1) {
> +      /* If, for whatever reason, we can't actually get the GTT size from
> the
> +       * kernel (too old?) fall back to the aperture size.
> +       */
> +      anv_perf_warn("Failed to get I915_CONTEXT_PARAM_GTT_SIZE: %m");
> +
> +      if (anv_gem_get_aperture(fd, &gtt_size) == -1) {
> +         return vk_errorf(VK_ERROR_INITIALIZATION_FAILED,
> +                          "failed to get aperture size: %m");
> +      }
> +   }
> +
> +   /* Query the total ram from the system */
> +   struct sysinfo info;
> +   sysinfo(&info);
> +
> +   uint64_t total_ram = (uint64_t)info.totalram * (uint64_t)info.mem_unit;
> +
> +   /* We don't want to burn too much ram with the GPU.  If the user has
> 4GiB
> +    * or less, we use at most half.  If they have more than 4GiB, we use
> 3/4.
> +    */
> +   uint64_t available_ram;
> +   if (total_ram < 4ull * 1024ull * 1024ull * 1024ull)
> +      available_ram = total_ram / 2;
> +   else
> +      available_ram = total_ram * 3 / 4;
>
>
> This will result in 3/4 in case of exactly 4GB of RAM present. Did you
> mean to use <= instead of <?
>

You're right, I did.  Thanks for catching that!  Fixed loclly.

That said, my laptop actually reports slightly less than 8 GiB of ram so
I'd expect a 4 GiB system to report slightly less and it would still work.
Never hurts to be correct though.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20170318/49c596c5/attachment.html>


More information about the mesa-dev mailing list