All of lore.kernel.org
 help / color / mirror / Atom feed
From: Chris Wilson <chris@chris-wilson.co.uk>
To: Ben Widawsky <ben@bwidawsk.net>
Cc: Intel GFX <intel-gfx@lists.freedesktop.org>,
	Ben Widawsky <benjamin.widawsky@intel.com>
Subject: Re: [PATCH 15/26] drm/i915: Create page table allocators
Date: Sat, 22 Mar 2014 21:10:03 +0000	[thread overview]
Message-ID: <20140322211003.GE4366@nuc-i3427.alporthouse.com> (raw)
In-Reply-To: <20140322202139.GD18765@bwidawsk.net>

On Sat, Mar 22, 2014 at 01:21:39PM -0700, Ben Widawsky wrote:
> On Tue, Mar 18, 2014 at 09:14:09AM +0000, Chris Wilson wrote:
> > On Mon, Mar 17, 2014 at 10:48:47PM -0700, Ben Widawsky wrote:
> > > As we move toward dynamic page table allocation, it becomes much easier
> > > to manage our data structures if break do things less coarsely by
> > > breaking up all of our actions into individual tasks.  This makes the
> > > code easier to write, read, and verify.
> > > 
> > > Aside from the dissection of the allocation functions, the patch
> > > statically allocates the page table structures without a page directory.
> > > This remains the same for all platforms,
> > > 
> > > The patch itself should not have much functional difference. The primary
> > > noticeable difference is the fact that page tables are no longer
> > > allocated, but rather statically declared as part of the page directory.
> > > This has non-zero overhead, but things gain non-trivial complexity as a
> > > result.
> > 
> > We increase overhead for increased complexity. What's the selling point
> > of this patch then?
> 
> I'd argue about the complexity. Personally, I think the result is easier
> to read.
> 
> I'll add this all to the commit message, but hopefully you agree:
> 
> 1. Splitting out the functions allows easily combining GEN6 and GEN8
> code. Page tables have no difference based on GEN8. As we'll see in a
> future patch when we add the dma mappings to the allocations, it
> requires only one small change to make work, and error handling should
> just fall into place.
> 
> 2. Unless we always want to allocate all page tables under a given PDE,
> we'll have to eventually break this up into an array of pointers (or
> pointer to pointer).
> 
> 3. Having the discrete functions is easier to review, and understand.
> All allocations and frees now take place in just a couple of locations.
> Reviewing, and cathcing leaks should be easy.
> 
> 4. Less important: the gfp flags are confined to one location, which
> makes playing around with such things trivial.o
> 
> Hopefully you're more convinced after you went through more of the patch
> series.

Right, the patches and the resulting code look good. I just felt the
changelog here was self-contradictory. And now we have a great spiel to
include ;-)
 
> If you want to try to optimize the overhead of managing the page tables,
> I think this is a worthy thing to do (for instance, not statically
> declaring the array). It takes a little more work though, and I'd prefer
> to do it after the code is doing what it's supposed to do.

Agreed. I'm still watching PT pages come and go with great joy, and not
yet worrying about the impact. (Though I think I did notices some
side-effect when a reap of the userspace cache lead to a sudden release
of lots of pages, and a dip in throughput.)
-Chris

-- 
Chris Wilson, Intel Open Source Technology Centre

  reply	other threads:[~2014-03-22 21:10 UTC|newest]

Thread overview: 62+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-03-18  5:48 [PATCH 00/26] [RFCish] GEN7 dynamic page tables Ben Widawsky
2014-03-18  5:48 ` [PATCH 01/26] drm/i915: Split out verbose PPGTT dumping Ben Widawsky
2014-03-20 11:57   ` Chris Wilson
2014-03-20 12:08     ` Chris Wilson
2014-03-22 18:13       ` Ben Widawsky
2014-03-22 20:59         ` Chris Wilson
2014-03-18  5:48 ` [PATCH 02/26] drm/i915: Extract switch to default context Ben Widawsky
2014-03-18  8:38   ` Chris Wilson
2014-03-18  5:48 ` [PATCH 03/26] drm/i915: s/pd/pdpe, s/pt/pde Ben Widawsky
2014-03-18  5:48 ` [PATCH 04/26] drm/i915: rename map/unmap to dma_map/unmap Ben Widawsky
2014-03-18  8:40   ` Chris Wilson
2014-03-18  5:48 ` [PATCH 05/26] drm/i915: Setup less PPGTT on failed pagedir Ben Widawsky
2014-03-18  5:48 ` [PATCH 06/26] drm/i915: Wrap VMA binding Ben Widawsky
2014-03-18  8:42   ` Chris Wilson
2014-03-18  5:48 ` [PATCH 07/26] drm/i915: clean up PPGTT init error path Ben Widawsky
2014-03-18  8:44   ` Chris Wilson
2014-03-22 19:43     ` Ben Widawsky
2014-03-22 20:58       ` Chris Wilson
2014-03-23 17:27         ` Ben Widawsky
2014-03-18  5:48 ` [PATCH 08/26] drm/i915: Un-hardcode number of page directories Ben Widawsky
2014-03-18  5:48 ` [PATCH 09/26] drm/i915: Split out gtt specific header file Ben Widawsky
2014-03-18  8:46   ` Chris Wilson
2014-03-18  9:15   ` Daniel Vetter
2014-03-22 19:44     ` Ben Widawsky
2014-03-23  0:46       ` Daniel Vetter
2014-03-18  5:48 ` [PATCH 10/26] drm/i915: Make gen6_write_pdes gen6_map_page_tables Ben Widawsky
2014-03-18  8:48   ` Chris Wilson
2014-03-18  5:48 ` [PATCH 11/26] drm/i915: Range clearing is PPGTT agnostic Ben Widawsky
2014-03-18  8:50   ` Chris Wilson
2014-03-18  5:48 ` [PATCH 12/26] drm/i915: Page table helpers, and define renames Ben Widawsky
2014-03-18  9:05   ` Chris Wilson
2014-03-18 18:29     ` Jesse Barnes
2014-03-19  0:58       ` Ben Widawsky
2014-03-18  5:48 ` [PATCH 13/26] drm/i915: construct page table abstractions Ben Widawsky
2014-03-18  5:48 ` [PATCH 14/26] drm/i915: Complete page table structures Ben Widawsky
2014-03-18  9:09   ` Chris Wilson
2014-03-22 20:10     ` Ben Widawsky
2014-03-22 21:14       ` Chris Wilson
2014-03-18  5:48 ` [PATCH 15/26] drm/i915: Create page table allocators Ben Widawsky
2014-03-18  9:14   ` Chris Wilson
2014-03-22 20:21     ` Ben Widawsky
2014-03-22 21:10       ` Chris Wilson [this message]
2014-03-18  5:48 ` [PATCH 16/26] drm/i915: Generalize GEN6 mapping Ben Widawsky
2014-03-18  9:22   ` Chris Wilson
2014-03-18  5:48 ` [PATCH 17/26] drm/i915: Clean up pagetable DMA map & unmap Ben Widawsky
2014-03-18  9:24   ` Chris Wilson
2014-03-18  5:48 ` [PATCH 18/26] drm/i915: Always dma map page table allocations Ben Widawsky
2014-03-18  9:25   ` Chris Wilson
2014-03-18  5:48 ` [PATCH 19/26] drm/i915: Consolidate dma mappings Ben Widawsky
2014-03-18  9:28   ` Chris Wilson
2014-03-18  5:48 ` [PATCH 20/26] drm/i915: Always dma map page directory allocations Ben Widawsky
2014-03-18  9:29   ` Chris Wilson
2014-03-18  5:48 ` [PATCH 21/26] drm/i915: Track GEN6 page table usage Ben Widawsky
2014-03-18  5:48 ` [PATCH 22/26] drm/i915: Extract context switch skip logic Ben Widawsky
2014-03-18  5:48 ` [PATCH 23/26] drm/i915: Force pd restore when PDEs change, gen6-7 Ben Widawsky
2014-03-18  5:48 ` [PATCH 24/26] drm/i915: Finish gen6/7 dynamic page table allocation Ben Widawsky
2014-03-20 12:15   ` Chris Wilson
2014-03-18  5:48 ` [PATCH 25/26] drm/i915: Print used ppgtt pages for gen6 in debugfs Ben Widawsky
2014-03-20 10:09   ` Chris Wilson
2014-03-20 10:17   ` Chris Wilson
2014-03-18  5:48 ` [PATCH 26/26] FOR REFERENCE ONLY Ben Widawsky
2014-03-20 12:17 ` [PATCH 00/26] [RFCish] GEN7 dynamic page tables Chris Wilson

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20140322211003.GE4366@nuc-i3427.alporthouse.com \
    --to=chris@chris-wilson.co.uk \
    --cc=ben@bwidawsk.net \
    --cc=benjamin.widawsky@intel.com \
    --cc=intel-gfx@lists.freedesktop.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.