From: Matthew Auld <matthew.auld@intel.com>
To: Tvrtko Ursulin <tvrtko.ursulin@linux.intel.com>,
intel-gfx@lists.freedesktop.org
Cc: "Thomas Hellström" <thomas.hellstrom@linux.intel.com>,
"Christian König" <christian.koenig@amd.com>,
dri-devel@lists.freedesktop.org
Subject: Re: [Intel-gfx] [PATCH v9 2/8] drm/i915/ttm: add tt shmem backend
Date: Tue, 7 Dec 2021 14:05:44 +0000 [thread overview]
Message-ID: <52fadb30-bdc2-6432-931b-ef1bbf3be0ba@intel.com> (raw)
In-Reply-To: <1a8431eb-566d-ac2b-85b7-31c590ec84ff@linux.intel.com>
On 07/12/2021 13:10, Tvrtko Ursulin wrote:
>
> On 18/10/2021 10:10, Matthew Auld wrote:
>> For cached objects we can allocate our pages directly in shmem. This
>> should make it possible(in a later patch) to utilise the existing
>> i915-gem shrinker code for such objects. For now this is still disabled.
>>
>> v2(Thomas):
>> - Add optional try_to_writeback hook for objects. Importantly we need
>> to check if the object is even still shrinkable; in between us
>> dropping the shrinker LRU lock and acquiring the object lock it
>> could for
>> example have been moved. Also we need to differentiate between
>> "lazy" shrinking and the immediate writeback mode. Also later we
>> need to
>> handle objects which don't even have mm.pages, so bundling this into
>> put_pages() would require somehow handling that edge case, hence
>> just letting the ttm backend handle everything in try_to_writeback
>> doesn't seem too bad.
>> v3(Thomas):
>> - Likely a bad idea to touch the object from the unpopulate hook,
>> since it's not possible to hold a reference, without also creating
>> circular dependency, so likely this is too fragile. For now just
>> ensure we at least mark the pages as dirty/accessed when called
>> from the
>> shrinker on WILLNEED objects.
>> - s/try_to_writeback/shrinker_release_pages, since this can do more
>> than just writeback.
>> - Get rid of do_backup boolean and just set the SWAPPED flag prior to
>> calling unpopulate.
>> - Keep shmem_tt as lowest priority for the TTM LRU bo_swapout walk,
>> since
>> these just get skipped anyway. We can try to come up with something
>> better later.
>> v4(Thomas):
>> - s/PCI_DMA/DMA/. Also drop NO_KERNEL_MAPPING and NO_WARN, which
>> apparently doesn't do anything with streaming mappings.
>> - Just pass along the error for ->truncate, and assume nothing.
>>
>> Signed-off-by: Matthew Auld <matthew.auld@intel.com>
>> Cc: Thomas Hellström <thomas.hellstrom@linux.intel.com>
>> Cc: Christian König <christian.koenig@amd.com>
>> Cc: Oak Zeng <oak.zeng@intel.com>
>> Reviewed-by: Thomas Hellström <thomas.hellstrom@linux.intel.com>
>> Acked-by: Oak Zeng <oak.zeng@intel.com>
>
> [snip]
>
>> -static void try_to_writeback(struct drm_i915_gem_object *obj,
>> - unsigned int flags)
>> +static int try_to_writeback(struct drm_i915_gem_object *obj, unsigned
>> int flags)
>> {
>> + if (obj->ops->shrinker_release_pages)
>> + return obj->ops->shrinker_release_pages(obj,
>> + flags & I915_SHRINK_WRITEBACK);
>
> I have a high level question about how does this new vfunc fit with the
> existing code.
>
> Because I notice in the implementation (i915_ttm_shrinker_release_pages)
> it ends up doing:
> ...
>
> switch (obj->mm.madv) {
> case I915_MADV_DONTNEED:
> return i915_ttm_purge(obj);
> case __I915_MADV_PURGED:
> return 0;
> }
>
> ... and then...
>
> if (should_writeback)
> __shmem_writeback(obj->base.size,
> i915_tt->filp->f_mapping);
>
> Which on a glance looks like a possible conceptual duplication of the
> concepts in this very function (try_to_writeback):
>
>> +
>> switch (obj->mm.madv) {
>> case I915_MADV_DONTNEED:
>> i915_gem_object_truncate(obj);
>> - return;
>> + return 0;
>> case __I915_MADV_PURGED:
>> - return;
>> + return 0;
>> }
>> if (flags & I915_SHRINK_WRITEBACK)
>> i915_gem_object_writeback(obj);
>
> So question is this the final design or some futher tidy is
> possible/planned?
It seems ok to me, all things considered. The TTM version needs to check
if the object is still shrinkable at the start(plus some other stuff),
upon acquiring the object lock. If that succeeds we can do the above
madv checks and potentially just call truncate. Otherwise we can proceed
with shrinking, but again TTM is special here, and we have to call
ttm_bo_validate() underneath(we might not even have mm.pages here). And
then if that all works we might be able to also perform the writeback,
if needed. So I suppose we could add all that directly in
try_to_writeback(), and make it conditional for TTM devices, or I guess
we need two separate hooks, one to do some pre-checking and another do
the actual swap step. Not sure if that is better or worse though.
>
> Background to my question is that I will float a patch which proposes to
> remove writeback altogether. There are reports from the fields that it
> causes deadlocks and looking at 2d6692e642e7 ("drm/i915: Start writeback
> from the shrinker") and its history it seems like it was a known risk.
>
> Apart from the code organisation questions, on the practical level - do
> you need writeback from the TTM backend or while I am proposing to
> remove it from the "legacy" paths, I can propose removing it from the
> TTM flow as well?
Yeah, if that is somehow busted then we should remove from TTM backend also.
>
> Regards,
>
> Tvrtko
next prev parent reply other threads:[~2021-12-07 14:05 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-10-18 9:10 [Intel-gfx] [PATCH v9 1/8] drm/i915/gem: Break out some shmem backend utils Matthew Auld
2021-10-18 9:10 ` [Intel-gfx] [PATCH v9 2/8] drm/i915/ttm: add tt shmem backend Matthew Auld
2021-12-07 13:10 ` Tvrtko Ursulin
2021-12-07 14:05 ` Matthew Auld [this message]
2021-12-08 8:30 ` Tvrtko Ursulin
2021-12-08 8:39 ` Thomas Hellström
2021-12-08 9:24 ` Tvrtko Ursulin
2021-12-08 9:32 ` Thomas Hellström
2021-10-18 9:10 ` [Intel-gfx] [PATCH v9 3/8] drm/i915/gtt: drop unneeded make_unshrinkable Matthew Auld
2021-10-18 9:10 ` [Intel-gfx] [PATCH v9 4/8] drm/i915: drop unneeded make_unshrinkable in free_object Matthew Auld
2021-10-18 9:10 ` [Intel-gfx] [PATCH v9 5/8] drm/i915: add some kernel-doc for shrink_pin and friends Matthew Auld
2021-10-18 9:10 ` [Intel-gfx] [PATCH v9 6/8] drm/i915/ttm: move shrinker management into adjust_lru Matthew Auld
2021-10-20 14:32 ` Thomas Hellström
2021-10-18 9:10 ` [Intel-gfx] [PATCH v9 7/8] drm/i915/ttm: use cached system pages when evicting lmem Matthew Auld
2021-10-18 9:10 ` [Intel-gfx] [PATCH v9 8/8] drm/i915/ttm: enable shmem tt backend Matthew Auld
2021-10-18 11:57 ` [Intel-gfx] ✗ Fi.CI.CHECKPATCH: warning for series starting with [v9,1/8] drm/i915/gem: Break out some shmem backend utils Patchwork
2021-10-18 11:58 ` [Intel-gfx] ✗ Fi.CI.SPARSE: " Patchwork
2021-10-18 12:29 ` [Intel-gfx] ✓ Fi.CI.BAT: success " Patchwork
2021-10-18 15:48 ` [Intel-gfx] ✗ Fi.CI.IGT: failure " Patchwork
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=52fadb30-bdc2-6432-931b-ef1bbf3be0ba@intel.com \
--to=matthew.auld@intel.com \
--cc=christian.koenig@amd.com \
--cc=dri-devel@lists.freedesktop.org \
--cc=intel-gfx@lists.freedesktop.org \
--cc=thomas.hellstrom@linux.intel.com \
--cc=tvrtko.ursulin@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