[Mesa-dev] [PATCH 06/10] i965: Add virtual memory allocator infrastructure to brw_bufmgr.

Kenneth Graunke kenneth at whitecape.org
Fri May 4 07:59:43 UTC 2018


On Friday, May 4, 2018 12:02:33 AM PDT Chris Wilson wrote:
> Quoting Kenneth Graunke (2018-05-04 02:12:36)
> > This introduces a new fast virtual memory allocator integrated with our
> > BO cache bucketing.  For larger objects, it falls back to the simple
> > free-list allocator (util_vma).
> 
> I wouldn't say fast just yet ;) If you want to explain any advantages,
> focus on the lack of relocation processing required in userspace, and
> the novel approach of memzones.
> 
> Note that you can use user allocated addresses *without* softpin just
> fine (suggest an address to the kernel and it will use it, if
> empty/idle). That lets you preassign an address and avoid relocations on
> the first pass; just without softpin you cannot force the kernel to use
> it and so must supply the relocation fixups just in case.
> 
> Since you do use NO_RELOC, the kernel should never have to touch the
> relocation arrays, and I don't have a profile that makes me worry about
> the drm_mm range manager performance.
> 
> Hmm, something else to note is that this vma manager works best with
> DRI3. Importing a bo for a single frame (and then reimporting it again
> for the next frame etc) is unlikely to keep the same vma allocation.
> -Chris

I wasn't actually trying to compare the performance of the userspace
allocator to the kernel allocator - I was more saying that the bitfield
based allocator should be cheap.  Grab first element and ffsll should
definitely be cheaper than a freelist with interval comparisons.  I
noticed that we allocate enough BOs on the fly in i965 that I figured
it would be better to do something a bit nicer than util_vma's simple
approach.

You're right that the main advantages are that we...

- Don't even need to think about relocation processing
- Can use memzones to stream out state without worrying about hitting
  a limit, having to make a larger BO, and memcpy stuff.
- Can pre-bake things like SURFACE_STATE up front, including addresses

I thought about allocating addresses even with relocations.  But I don't
think that would look quite like this...we'd want to "free" our assigned
VMA when updating GTT offsets after execbuf...and probably mark the new
ranges returned by the kernel as in-use...gets a bit messy...

For full-PPGTT platforms, we definitely don't want to keep relocs.  For
non-full-PPGTT platforms...yeah, we can assign addresses...but if we
conflict with some other process...the kernel will just move them
anyway.  I guess we could choose random addresses and srand based on the
process ID or GEM context ID or something.  I'm not sure it's worth it?
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: This is a digitally signed message part.
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20180504/b3118acf/attachment.sig>


More information about the mesa-dev mailing list