From: "Siluvery, Arun" <arun.siluvery@linux.intel.com>
To: Eric Anholt <eric@anholt.net>, intel-gfx@lists.freedesktop.org
Subject: Re: [RFC] drm/i915: Add variable gem object size support to i915
Date: Fri, 23 May 2014 15:54:54 +0100 [thread overview]
Message-ID: <537F613E.9070709@linux.intel.com> (raw)
In-Reply-To: <87iopbexrr.fsf@eliezer.anholt.net>
On 12/05/2014 18:02, Eric Anholt wrote:
> arun.siluvery@linux.intel.com writes:
>
>> From: "Siluvery, Arun" <arun.siluvery@intel.com>
>>
>> This patch adds support to have gem objects of variable size.
>> The size of the gem object obj->size is always constant and this fact
>> is tightly coupled in the driver; this implementation allows to vary
>> its effective size using an interface similar to fallocate().
>>
>> A new ioctl() is introduced to mark a range as scratch/usable.
>> Once marked as scratch, associated backing store is released and the
>> region is filled with scratch pages. The region can also be unmarked
>> at a later point in which case new backing pages are created.
>> The range can be anywhere within the object space, it can have multiple
>> ranges possibly overlapping forming a large contiguous range.
>>
>> There is only one single scratch page and Kernel allows to write to this
>> page; userspace need to keep track of scratch page range otherwise any
>> subsequent writes to these pages will overwrite previous content.
>>
>> This feature is useful where the exact size of the object is not clear
>> at the time of its creation, in such case we usually create an object
>> with more than the required size but end up using it partially.
>> In devices where there are tight memory constraints it would be useful
>> to release that additional space which is currently unused. Using this
>> interface the region can be simply marked as scratch which releases
>> its backing store thus reducing the memory pressure on the kernel.
>>
>> Many thanks to Daniel, ChrisW, Tvrtko, Bob for the idea and feedback
>> on this implementation.
>>
>> v2: fix holes in error handling and use consistent data types (Tvrtko)
>> - If page allocation fails simply return error; do not try to invoke
>> shrinker to free backing store.
>> - Release new pages created by us in case of error during page allocation
>> or sg_table update.
>> - Use 64-bit data types for start and length values to avoid truncation.
>
> The idea sounds nice to have for Mesa. We've got this ugly code right
> now for guessing how many levels a miptree is going to be, and then do
> copies if we find out we were wrong about how many the app was going to
> use. This will let us allocate for a maximum-depth miptree, and mark
> the smaller levels as unused until an image gets put there.
>
> The problem I see with this plan is if the page table twiddling ends up
> being too expensive in our BO reallocation path (right now, if we make
> the same guess on every allocation, we'll reuse cached BOs with the same
> size and no mapping cost).
>
> It would be nice to see some performance data from real applications, if
> possible. But then, I don't think I've seen any real applications hit
> the copy path.
>
The way I am planning to test is to calculate the time it takes to
falloc a big object. Could you suggest a best way to test the
performance of this change?
regards
Arun
next prev parent reply other threads:[~2014-05-23 14:54 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-04-28 15:01 [RFC] drm/i915: Add variable gem object size support to i915 arun.siluvery
2014-05-09 21:18 ` Volkin, Bradley D
2014-05-10 13:42 ` Siluvery, Arun
2014-05-12 16:32 ` Volkin, Bradley D
2014-05-12 16:19 ` Daniel Vetter
2014-05-12 17:02 ` Eric Anholt
2014-05-23 14:54 ` Siluvery, Arun [this message]
2014-06-25 10:51 ` Damien Lespiau
2014-06-25 11:14 ` Damien Lespiau
2014-06-25 11:46 ` Siluvery, Arun
2014-06-25 12:57 ` Damien Lespiau
2014-06-25 13:26 ` Tvrtko Ursulin
2014-06-25 13:34 ` Damien Lespiau
2014-07-07 8:34 ` Daniel Vetter
-- strict thread matches above, loose matches on Subject: below --
2014-04-25 12:48 arun.siluvery
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=537F613E.9070709@linux.intel.com \
--to=arun.siluvery@linux.intel.com \
--cc=eric@anholt.net \
--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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox