dri-devel Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: "Christian König" <christian.koenig@amd.com>
To: "Thomas Hellström" <thomas.hellstrom@linux.intel.com>,
	intel-xe@lists.freedesktop.org
Cc: Somalapuram Amaranath <Amaranath.Somalapuram@amd.com>,
	Matthew Brost <matthew.brost@intel.com>,
	dri-devel@lists.freedesktop.org,
	Paulo Zanoni <paulo.r.zanoni@intel.com>,
	Simona Vetter <simona.vetter@ffwll.ch>
Subject: Re: [PATCH v14 3/8] drm/ttm/pool: Provide a helper to shrink pages
Date: Tue, 3 Dec 2024 17:20:44 +0100	[thread overview]
Message-ID: <0595e4df-86d4-4082-86ab-b77902d3020b@amd.com> (raw)
In-Reply-To: <73588525571a68f5638300ef171591de10ba5e5d.camel@linux.intel.com>

[-- Attachment #1: Type: text/plain, Size: 2981 bytes --]

[SNIP]
>>>>> @@ -453,9 +601,36 @@ int ttm_pool_alloc(struct ttm_pool *pool,
>>>>> struct ttm_tt *tt,
>>>>>     	else
>>>>>     		gfp_flags |= GFP_HIGHUSER;
>>>>>     
>>>>> -	for (order = min_t(unsigned int, MAX_PAGE_ORDER,
>>>>> __fls(num_pages));
>>>>> -	     num_pages;
>>>>> -	     order = min_t(unsigned int, order,
>>>>> __fls(num_pages)))
>>>>> {
>>>>> +	order = min_t(unsigned int, MAX_PAGE_ORDER,
>>>>> __fls(num_pages));
>>>>> +
>>>>> +	if (tt->page_flags & TTM_TT_FLAG_PRIV_BACKED_UP) {
>>>>> +		if (!tt->restore) {
>>>>> +			gfp_t gfp = GFP_KERNEL | __GFP_NOWARN;
>>>>> +
>>>>> +			if (ctx->gfp_retry_mayfail)
>>>>> +				gfp |= __GFP_RETRY_MAYFAIL;
>>>>> +
>>>>> +			tt->restore =
>>>>> +				kvzalloc(struct_size(tt-
>>>>>> restore,
>>>>> old_pages,
>>>>> +						     (size_t)1
>>>>> <<
>>>>> order), gfp);
>>>>> +			if (!tt->restore)
>>>>> +				return -ENOMEM;
>>>>> +		} else if (ttm_pool_restore_valid(tt-
>>>>>> restore)) {
>>>>> +			struct ttm_pool_tt_restore *restore =
>>>>> tt-
>>>>>> restore;
>>>>> +
>>>>> +			num_pages -= restore->alloced_pages;
>>>>> +			order = min_t(unsigned int, order,
>>>>> __fls(num_pages));
>>>>> +			pages += restore->alloced_pages;
>>>>> +			r = ttm_pool_restore_tt(restore, tt-
>>>>>> backup, ctx);
>>>>> +			if (r)
>>>>> +				return r;
>>>>> +			caching = restore->caching_divide;
>>>>> +		}
>>>>> +
>>>>> +		tt->restore->pool = pool;
>>>>> +	}
>>>> Hui? Why is that part of the allocation function now?
>>>>
>>>> At bare minimum I would expect that this is a new function.
>>> It's because we now have partially backed up tts, so the restore is
>>> interleaved on a per-page basis, replacing the backup handles with
>>> page-pointers. I'll see if I can separate out at least the
>>> initialization here.
>> Yeah, that kind of makes sense.
>>
>> My expectation was just that we now have explicit ttm_pool_swapout()
>> and
>> ttm_pool_swapin() functions.
> I fully understand, although in the allocation step, that would also
> increase the memory pressure since we might momentarily have twice the
> bo-size allocated, if the shmem object was never swapped out, and we
> don't want to unnecessarily risc OOM at recover time, although that
> should be a recoverable situation now. If the OOM receiver can free up
> system memory resources they can could potentially restart the recover.

What I meant was more that we have ttm_pool_swapout() which does a mix 
of moving each page to a swap backend and freeing one by one.

And ttm_pool_swapin() which allocates a bit of memory (usually one huge 
page) and then copies the content back in from the swap backend.

Alternatively we could rename ttm_pool_alloc() into something like 
ttm_pool_populate() and ttm_pool_free() into ttm_pool_unpopulate(), but 
those names are not very descriptive either.

It's just that we now do a bit more than just alloc and free in those 
functions, so the naming doesn't really match that well any more.

Christian.

>
> /Thomas
>

[-- Attachment #2: Type: text/html, Size: 4552 bytes --]

  reply	other threads:[~2024-12-03 16:20 UTC|newest]

Thread overview: 36+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-11-15 15:01 [PATCH v14 0/8] TTM shrinker helpers and xe buffer object shrinker Thomas Hellström
2024-11-15 15:01 ` [PATCH v14 1/8] drm/ttm: Balance ttm_resource_cursor_init() and ttm_resource_cursor_fini() Thomas Hellström
2024-11-20 10:51   ` Christian König
2024-11-21 15:54     ` Thomas Hellström
2024-11-15 15:01 ` [PATCH v14 2/8] drm/ttm: Provide a shmem backup implementation Thomas Hellström
2024-11-19 13:40   ` Christian König
2024-11-20  7:58     ` Thomas Hellström
2024-11-20  9:24       ` Christian König
2024-11-20 10:34         ` Thomas Hellström
2024-11-20 10:50           ` Christian König
2024-11-20 11:07             ` Thomas Hellström
2024-11-20 11:20         ` Thomas Hellström
2024-11-15 15:01 ` [PATCH v14 3/8] drm/ttm/pool: Provide a helper to shrink pages Thomas Hellström
2024-12-03 13:12   ` Christian König
2024-12-03 13:42     ` Thomas Hellström
2024-12-03 14:51       ` Christian König
2024-12-03 15:50         ` Thomas Hellström
2024-12-03 16:20           ` Christian König [this message]
2024-12-03 16:31             ` Thomas Hellström
2024-12-03 16:39               ` Christian König
2024-12-03 16:43                 ` Thomas Hellström
2024-12-03 16:46                   ` Christian König
2024-12-03 17:44                     ` Thomas Hellström
2024-12-04  9:16                       ` Christian König
2024-12-04  9:56                         ` Thomas Hellström
2024-12-04 10:56                           ` Christian König
2024-12-04 11:09                             ` Thomas Hellström
2024-12-04 11:24                               ` Christian König
2024-12-04 12:24                                 ` Thomas Hellström
2024-12-18 10:07                                 ` Thomas Hellström
2024-12-18 10:15         ` Thomas Hellström
2024-11-15 15:01 ` [PATCH v14 4/8] drm/ttm: Use fault-injection to test error paths Thomas Hellström
2024-11-15 15:01 ` [PATCH v14 5/8] drm/ttm: Add a macro to perform LRU iteration Thomas Hellström
2024-11-15 15:01 ` [PATCH v14 6/8] drm/ttm: Add helpers for shrinking Thomas Hellström
2024-11-15 15:01 ` [PATCH v14 7/8] drm/xe: Add a shrinker for xe bos Thomas Hellström
2024-11-15 15:01 ` [PATCH v14 8/8] drm/xe: Increase the XE_PL_TT watermark Thomas Hellström

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=0595e4df-86d4-4082-86ab-b77902d3020b@amd.com \
    --to=christian.koenig@amd.com \
    --cc=Amaranath.Somalapuram@amd.com \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=intel-xe@lists.freedesktop.org \
    --cc=matthew.brost@intel.com \
    --cc=paulo.r.zanoni@intel.com \
    --cc=simona.vetter@ffwll.ch \
    --cc=thomas.hellstrom@linux.intel.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