From: "Thomas Hellström" <thomas.hellstrom@linux.intel.com>
To: intel-xe@lists.freedesktop.org
Cc: "Thomas Hellström" <thomas.hellstrom@linux.intel.com>,
"Somalapuram Amaranath" <Amaranath.Somalapuram@amd.com>,
"Christian König" <christian.koenig@amd.com>,
dri-devel@lists.freedesktop.org
Subject: [RFC PATCH 0/8] TTM shrinker helpers and xe buffer object shrinker
Date: Fri, 29 Mar 2024 15:56:59 +0100 [thread overview]
Message-ID: <20240329145707.3087-1-thomas.hellstrom@linux.intel.com> (raw)
This series implements TTM shrinker / eviction helpers and an xe bo
shrinker. It builds on two previous series. First
https://www.mail-archive.com/dri-devel@lists.freedesktop.org/msg484425.html
for patch 1-4, which IMO still could be reviewed and pushed as a
separate series.
Second the previous TTM shrinker series
https://lore.kernel.org/linux-mm/b7491378-defd-4f1c-31e2-29e4c77e2d67@amd.com/T/
Where the comment about layering
https://lore.kernel.org/linux-mm/b7491378-defd-4f1c-31e2-29e4c77e2d67@amd.com/T/#ma918844aa8a6efe8768fdcda0c6590d5c93850c9
now addressed, and this version also implements shmem objects for backup
rather than direct swap-cache insertions, which was used in the previuos
series. It turns out that with per-page backup / shrinking, shmem objects
appears to work just as well as direct swap-cache insertions with the
added benefit that was introduced in the previous TTM shrinker series to
avoid running out of swap entries isn't really needed.
In any case, patch 1-4 are better described in their separate series.
(RFC is removed for those).
Patch 5 could in theory be skipped but introduces a possibility to easily
add or test multiple backup backends, like the direct swap-cache
insertion or even files into fast dedicated nvme storage for for example.
Patch 6 introduces helpers in the ttm_pool code for page-by-page shrinking
and recovery. It avoids having to temporarily allocate a huge amount of
memory to be able to shrink a buffer object. It also introduces the
possibility to immediately write-back pages if needed, since that tends
to be a bit delayed when left to kswapd.
Patch 7 introduces a LRU walk helper for eviction and shrinking. It's
currently xe-only but not xe-specific and can easily be moved to TTM when
used by more than one driver or when eviction is implemented using it.
Patch 8 introduces a helper callback for shrinking (Also ready to be
moved to TTM) and an xe-specific shrinker implementation.
Testing:
ATM I don't think we have good tests to cover the shrinking functionality
The series has been tested with a hack that continously creates
TTM_TT buffer objects until system memory and swap space is exhausted,
and then reads them back and frees them. However, these tests
seem to be very slow.
Ideally a similar test on a machine with very fast solid state or
similar storage should be set up. Ideally also verifying content
preservation.
Cc: Somalapuram Amaranath <Amaranath.Somalapuram@amd.com>
Cc: Christian König <christian.koenig@amd.com>
Cc: <dri-devel@lists.freedesktop.org>
Thomas Hellström (8):
drm/ttm: Allow TTM LRU list nodes of different types
drm/ttm: Use LRU hitches
drm/ttm, drm/amdgpu, drm/xe: Consider hitch moves within bulk sublist
moves
drm/ttm: Allow continued swapout after -ENOSPC falure
drm/ttm: Add a virtual base class for graphics memory backup
drm/ttm/pool: Provide a helper to shrink pages.
drm/xe, drm/ttm: Provide a generic LRU walker helper
drm/xe: Add a shrinker for xe bos
drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | 4 +
drivers/gpu/drm/ttm/Makefile | 2 +-
drivers/gpu/drm/ttm/ttm_backup_shmem.c | 137 +++++++++
drivers/gpu/drm/ttm/ttm_bo.c | 1 +
drivers/gpu/drm/ttm/ttm_device.c | 33 ++-
drivers/gpu/drm/ttm/ttm_pool.c | 391 ++++++++++++++++++++++++-
drivers/gpu/drm/ttm/ttm_resource.c | 231 ++++++++++++---
drivers/gpu/drm/ttm/ttm_tt.c | 34 +++
drivers/gpu/drm/xe/Makefile | 2 +
drivers/gpu/drm/xe/xe_bo.c | 123 ++++++--
drivers/gpu/drm/xe/xe_bo.h | 3 +
drivers/gpu/drm/xe/xe_device.c | 8 +
drivers/gpu/drm/xe/xe_device_types.h | 2 +
drivers/gpu/drm/xe/xe_shrinker.c | 237 +++++++++++++++
drivers/gpu/drm/xe/xe_shrinker.h | 18 ++
drivers/gpu/drm/xe/xe_ttm_helpers.c | 224 ++++++++++++++
drivers/gpu/drm/xe/xe_ttm_helpers.h | 63 ++++
drivers/gpu/drm/xe/xe_vm.c | 4 +
include/drm/ttm/ttm_backup.h | 136 +++++++++
include/drm/ttm/ttm_device.h | 2 +
include/drm/ttm/ttm_pool.h | 4 +
include/drm/ttm/ttm_resource.h | 96 +++++-
include/drm/ttm/ttm_tt.h | 19 ++
23 files changed, 1683 insertions(+), 91 deletions(-)
create mode 100644 drivers/gpu/drm/ttm/ttm_backup_shmem.c
create mode 100644 drivers/gpu/drm/xe/xe_shrinker.c
create mode 100644 drivers/gpu/drm/xe/xe_shrinker.h
create mode 100644 drivers/gpu/drm/xe/xe_ttm_helpers.c
create mode 100644 drivers/gpu/drm/xe/xe_ttm_helpers.h
create mode 100644 include/drm/ttm/ttm_backup.h
--
2.44.0
next reply other threads:[~2024-03-29 14:57 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-03-29 14:56 Thomas Hellström [this message]
2024-03-29 14:57 ` [PATCH 1/8] drm/ttm: Allow TTM LRU list nodes of different types Thomas Hellström
2024-04-05 12:34 ` Christian König
2024-04-08 12:45 ` Thomas Hellström
2024-03-29 14:57 ` [PATCH 2/8] drm/ttm: Use LRU hitches Thomas Hellström
2024-04-05 12:41 ` Christian König
2024-04-08 12:56 ` Thomas Hellström
2024-03-29 14:57 ` [PATCH 3/8] drm/ttm, drm/amdgpu, drm/xe: Consider hitch moves within bulk sublist moves Thomas Hellström
2024-03-29 14:57 ` [PATCH 4/8] drm/ttm: Allow continued swapout after -ENOSPC falure Thomas Hellström
2024-03-29 14:57 ` [RFC PATCH 5/8] drm/ttm: Add a virtual base class for graphics memory backup Thomas Hellström
2024-03-29 14:57 ` [RFC PATCH 6/8] drm/ttm/pool: Provide a helper to shrink pages Thomas Hellström
2024-03-29 14:57 ` [RFC PATCH 7/8] drm/xe, drm/ttm: Provide a generic LRU walker helper Thomas Hellström
2024-03-29 14:57 ` [RFC PATCH 8/8] drm/xe: Add a shrinker for xe bos Thomas Hellström
2024-03-29 15:04 ` ✓ CI.Patch_applied: success for TTM shrinker helpers and xe buffer object shrinker Patchwork
2024-03-29 15:04 ` ✗ CI.checkpatch: warning " Patchwork
2024-03-29 15:05 ` ✓ CI.KUnit: success " Patchwork
2024-03-29 15:16 ` ✓ CI.Build: " Patchwork
2024-03-29 15:19 ` ✓ CI.Hooks: " Patchwork
2024-03-29 15:21 ` ✗ CI.checksparse: warning " Patchwork
2024-03-29 15:56 ` ✓ CI.BAT: success " Patchwork
2024-04-02 11:55 ` [RFC PATCH 0/8] " Somalapuram, Amaranath
2024-04-08 13:05 ` 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=20240329145707.3087-1-thomas.hellstrom@linux.intel.com \
--to=thomas.hellstrom@linux.intel.com \
--cc=Amaranath.Somalapuram@amd.com \
--cc=christian.koenig@amd.com \
--cc=dri-devel@lists.freedesktop.org \
--cc=intel-xe@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.