[Intel-gfx] [RFC 00/38] PPGTT dynamic page allocations

Michel Thierry michel.thierry at intel.com
Tue Nov 4 17:29:23 CET 2014


On 11/4/2014 12:54 PM, Daniel Vetter wrote:
> On Tue, Oct 07, 2014 at 06:10:56PM +0100, Michel Thierry wrote:
>> This is based on the first 55 patches of Ben's 48b addressing work, taking
>> into consideration the latest changes in (mainly aliasing) ppgtt rules.
>>
>> Because of these changes in the tree, the first 17 patches of the original
>> series are no longer needed, and some patches required more rework than others.
>>
>> For GEN8, it has also been extended to work in logical ring submission (lrc)
>> mode, as it looks like it will be the preferred mode of operation.
>> I also tried to update the lrc code at the same time the ppgtt refactoring
>> occurred, leaving only one patch that is exclusively for lrc.
>>
>> I'm asking for comments, as this is the foundation for 48b virtual addressing
>> in Broadwell.
>>
>> This list can be seen in 3 parts:
>> [01-24] Include code rework for PPGTT (all GENs).
>> [25-28] Adds page table allocation for GEN6/GEN7
>> [29-38] Enables dynamic allocation in GEN8. It is enabled for both legacy
>> and execlist submission modes.
>>
>> Ben Widawsky (37):
>>    drm/i915: Add some extra guards in evict_vm
>>    drm/i915/trace: Fix offsets for 64b
>>    drm/i915: Wrap VMA binding
>>    drm/i915: Make pin global flags explicit
>>    drm/i915: Split out aliasing binds
>>    drm/i915: fix gtt_total_entries()
>>    drm/i915: Rename to GEN8_LEGACY_PDPES
>>    drm/i915: Split out verbose PPGTT dumping
>>    drm/i915: s/pd/pdpe, s/pt/pde
>>    drm/i915: rename map/unmap to dma_map/unmap
>>    drm/i915: Setup less PPGTT on failed pagedir
>>    drm/i915: Un-hardcode number of page directories
>>    drm/i915: Make gen6_write_pdes gen6_map_page_tables
>>    drm/i915: Range clearing is PPGTT agnostic
>>    drm/i915: Page table helpers, and define renames
>>    drm/i915: construct page table abstractions
>>    drm/i915: Complete page table structures
>>    drm/i915: Create page table allocators
>>    drm/i915: Generalize GEN6 mapping
>>    drm/i915: Clean up pagetable DMA map & unmap
>>    drm/i915: Always dma map page table allocations
>>    drm/i915: Consolidate dma mappings
>>    drm/i915: Always dma map page directory allocations
>>    drm/i915: Track GEN6 page table usage
>>    drm/i915: Extract context switch skip logic
>>    drm/i915: Track page table reload need
>>    drm/i915: Initialize all contexts
>>    drm/i915: Finish gen6/7 dynamic page table allocation
>>    drm/i915/bdw: Use dynamic allocation idioms on free
>>    drm/i915/bdw: pagedirs rework allocation
>>    drm/i915/bdw: pagetable allocation rework
>>    drm/i915/bdw: Make the pdp switch a bit less hacky
>>    drm/i915: num_pd_pages/num_pd_entries isn't useful
>>    drm/i915: Extract PPGTT param from pagedir alloc
>>    drm/i915/bdw: Split out mappings
>>    drm/i915/bdw: begin bitmap tracking
>>    drm/i915/bdw: Dynamic page table allocations
>>
>> Michel Thierry (1):
>>    drm/i915/bdw: Dynamic page table allocations in lrc mode
> Ok, high level review:
>
> - The first part of this series seems to shuffle the code around in the
>    vma binding code. If we actually want to fix this I think we need a
>    REBIND flag and push the logic for rewriting ptes into the vma_bind
>    hooks. There's no other way really to fix this, and the breakage for
>    aliasing ppgtt this current code produces is what's blocking the cmd
>    parser atm.
>
> - Imo mergin the vma_bind/insert_entries hooks isn't useful, they imo
>    provide good abstraction. Ofc we should move the vma_bind/unbind
>    funcstion into the vm functions, since the vfunc dictionary varies by vm
>    and not by vma. And they only really provide good abstraction if we
>    first fix up the binding mess.
>
> - The code massively shuffles around the pte and page table handling code,
>    promising a lot better future. But I simply don't get it - to me this
>    all looks like massive amounts of churn for no clear gain.
>
> - Imo the really critical part of dynamic pagetable alloc is where exactly
>    we add this new memory allocation point and how we handle failures. But
>    since there's so much churn that I somehow can't see through I can't
>    have a solid opinion on the proposed design.
>
> So overall I think we should untangle this series first and throw out as
> much churn as possible. E.g. the binding rework is very much separate imo.
> Or someone needs to explain to my why we need all this code reflow.
>
> With that out of the way reviewing the changes due to dynamic page table
> alloc should be fairly simple. My expectation would have been that we'd
> add a new interface to allocate vm ranges and essentially leave all the
> current vma binding unchanged. Having the separate vm range extension is
> somewhat important since the drm_mm allocator has a bit the tendency to
> just walk up the address space, wasting piles of free space lower down.
>
> Or like I've said maybe I just don't see the real issues and have way too
> naive opinion here.
>
> Cheers, Daniel
Thanks for the comments Daniel,
I'll prepare another version, trying to just focus in the dynamic alloc 
part.

-Michel

-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/pkcs7-signature
Size: 5510 bytes
Desc: S/MIME Cryptographic Signature
URL: <http://lists.freedesktop.org/archives/intel-gfx/attachments/20141104/ef6b143e/attachment.bin>


More information about the Intel-gfx mailing list