On Sat, Mar 18, 2017 at 2:24 AM, Gustaw Smolarczyk <wielkie...@gmail.com> wrote:
> 18 mar 2017 05:24 "Jason Ekstrand" <ja...@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 <asm...@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, > + >t_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, >t_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.
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev