From: "Michel Dänzer" <michel@daenzer.net>
To: Jerome Glisse <j.glisse@gmail.com>
Cc: Thomas Hellstrom <thellstrom@vmware.com>,
Jack.Xiao@amd.com, dri-devel@lists.freedesktop.org,
Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Subject: Re: [PATCH 2/3] drm/ttm: fix object deallocation to properly fill in the page pool.
Date: Tue, 7 Jul 2015 15:39:29 +0900 [thread overview]
Message-ID: <559B7421.50101@daenzer.net> (raw)
In-Reply-To: <20150706161025.GA3489@gmail.com>
On 07.07.2015 01:10, Jerome Glisse wrote:
> On Mon, Jul 06, 2015 at 06:11:29PM +0900, Michel Dänzer wrote:
>>
>> Hi Jérôme,
>>
>> On 13.08.2014 12:52, Jérôme Glisse wrote:
>>> From: Jérôme Glisse <jglisse@redhat.com>
>>>
>>> Current code never allowed the page pool to actualy fill in anyway. This fix
>>> it and also allow it to grow over its limit until it grow beyond the batch
>>> size for allocation and deallocation.
>>>
>>> Signed-off-by: Jérôme Glisse <jglisse@redhat.com>
>>> Reviewed-by: Mario Kleiner <mario.kleiner.de@gmail.com>
>>> Tested-by: Michel Dänzer <michel@daenzer.net>
>>> Cc: Thomas Hellstrom <thellstrom@vmware.com>
>>> Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
>>> ---
>>> drivers/gpu/drm/ttm/ttm_page_alloc_dma.c | 9 ++-------
>>> 1 file changed, 2 insertions(+), 7 deletions(-)
>>>
>>> diff --git a/drivers/gpu/drm/ttm/ttm_page_alloc_dma.c b/drivers/gpu/drm/ttm/ttm_page_alloc_dma.c
>>> index c96db43..a076ff3 100644
>>> --- a/drivers/gpu/drm/ttm/ttm_page_alloc_dma.c
>>> +++ b/drivers/gpu/drm/ttm/ttm_page_alloc_dma.c
>>> @@ -953,14 +953,9 @@ void ttm_dma_unpopulate(struct ttm_dma_tt *ttm_dma, struct device *dev)
>>> } else {
>>> pool->npages_free += count;
>>> list_splice(&ttm_dma->pages_list, &pool->free_list);
>>> - npages = count;
>>> - if (pool->npages_free > _manager->options.max_size) {
>>> + if (pool->npages_free >= (_manager->options.max_size +
>>> + NUM_PAGES_TO_ALLOC))
>>> npages = pool->npages_free - _manager->options.max_size;
>>> - /* free at least NUM_PAGES_TO_ALLOC number of pages
>>> - * to reduce calls to set_memory_wb */
>>> - if (npages < NUM_PAGES_TO_ALLOC)
>>> - npages = NUM_PAGES_TO_ALLOC;
>>> - }
>>> }
>>> spin_unlock_irqrestore(&pool->lock, irq_flags);
>>>
>>>
>>
>> Colleagues of mine have measured significant performance gains for some
>> workloads with this patch. Without it, a lot of CPU cycles are spent
>> changing the caching attributes of pages on allocation.
>>
>> Note that the performance effect seems to mostly disappear when applying
>> patch 1 as well, so apparently 64MB is too small for the max pool size.
>>
>> Is there any chance this patch could be applied without the
>> controversial patch 3? If not, do you have ideas for addressing the
>> concerns raised against patch 3?
>
> Wahou, now i need to find the keys to the DeLorean to travel back in time.
>
> This patch is a fix and should be applied without 1 or 3. Because today
> basicly the pool is always emptied and never fill up. But as Thomas pointed
> out there is already bit too much pool accross the stack. Proper solution
> would be to work something inside the mm level or the architecture (i assume
> AMD is mostly interested in x86 on that front).
>
> Here the whole issue is really about allocating page with WC/UC cache
> properties. Changing cache properties on page is really costly on several
> level, like the kernel needs to break the huge linear mapping and populate
> lower level to remap the page with proper cache attribute inside the kernel
> mapping.
>
> As far as i remember the kernel never goes back to huge page mapping when
> restoring page cache attribute, which meaning that little by litte with
> uptime you loose the whole huge page mapping benefit for everything and you
> waste more memory.
That sounds pretty bad, but this patch might actually help a little for
that by reducing the amount of huge page mappings that need to be broken up?
> In meantime i think we need to apply this patch as it is really a fix to
> make the code actually do what the comment and design pretends it does.
I agree.
BTW, maybe it should be split up into the actual fix (removing the
npages assignment) and the NUM_PAGES_TO_ALLOC related simplification?
--
Earthling Michel Dänzer | http://www.amd.com
Libre software enthusiast | Mesa and X developer
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel
next prev parent reply other threads:[~2015-07-07 6:39 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-08-13 3:52 [PATCH 0/3] drm/ttm: hard to swim in an empty pool Jérôme Glisse
2014-08-13 3:52 ` [PATCH 1/3] drm/ttm: set sensible pool size limit Jérôme Glisse
2014-08-13 6:24 ` Michel Dänzer
2014-08-13 3:52 ` [PATCH 2/3] drm/ttm: fix object deallocation to properly fill in the page pool Jérôme Glisse
2015-03-25 19:06 ` Konrad Rzeszutek Wilk
2015-07-06 9:11 ` Michel Dänzer
2015-07-06 16:10 ` Jerome Glisse
2015-07-07 6:39 ` Michel Dänzer [this message]
2015-07-07 17:41 ` Jerome Glisse
2015-07-08 2:34 ` Michel Dänzer
2014-08-13 3:52 ` [PATCH 3/3] drm/ttm: under memory pressure minimize the size of memory pool Jérôme Glisse
2014-08-13 6:32 ` Michel Dänzer
2014-08-13 9:06 ` Thomas Hellstrom
2014-08-13 10:42 ` Daniel Vetter
2014-08-13 12:35 ` GEM memory DOS (WAS Re: [PATCH 3/3] drm/ttm: under memory pressure minimize the size of memory pool) Thomas Hellstrom
2014-08-13 12:40 ` David Herrmann
2014-08-13 12:48 ` Thomas Hellstrom
2014-08-13 13:01 ` Daniel Vetter
2014-08-13 14:09 ` Oded Gabbay
2014-08-13 15:19 ` Thomas Hellstrom
2014-08-13 16:30 ` Daniel Vetter
2014-08-13 15:13 ` Thomas Hellstrom
2014-08-13 16:24 ` Daniel Vetter
2014-08-13 16:30 ` Alex Deucher
2014-08-13 16:38 ` Daniel Vetter
2014-08-13 16:45 ` Daniel Vetter
2014-08-13 17:38 ` Thomas Hellstrom
2014-08-13 17:20 ` Thomas Hellstrom
2014-08-14 22:29 ` Jesse Barnes
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=559B7421.50101@daenzer.net \
--to=michel@daenzer.net \
--cc=Jack.Xiao@amd.com \
--cc=dri-devel@lists.freedesktop.org \
--cc=j.glisse@gmail.com \
--cc=konrad.wilk@oracle.com \
--cc=thellstrom@vmware.com \
/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