All of lore.kernel.org
 help / color / mirror / Atom feed
* [RFC PATCH 0/8] TTM shrinker helpers and xe buffer object shrinker
@ 2024-03-29 14:56 Thomas Hellström
  2024-03-29 14:57 ` [PATCH 1/8] drm/ttm: Allow TTM LRU list nodes of different types Thomas Hellström
                   ` (15 more replies)
  0 siblings, 16 replies; 23+ messages in thread
From: Thomas Hellström @ 2024-03-29 14:56 UTC (permalink / raw)
  To: intel-xe
  Cc: Thomas Hellström, Somalapuram Amaranath,
	Christian König, dri-devel

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


^ permalink raw reply	[flat|nested] 23+ messages in thread
* Re: [RFC PATCH 5/8] drm/ttm: Add a virtual base class for graphics memory backup
@ 2024-04-01 12:44 kernel test robot
  0 siblings, 0 replies; 23+ messages in thread
From: kernel test robot @ 2024-04-01 12:44 UTC (permalink / raw)
  To: oe-kbuild; +Cc: lkp, Julia Lawall

BCC: lkp@intel.com
CC: oe-kbuild-all@lists.linux.dev
In-Reply-To: <20240329145707.3087-6-thomas.hellstrom@linux.intel.com>
References: <20240329145707.3087-6-thomas.hellstrom@linux.intel.com>
TO: "Thomas Hellström" <thomas.hellstrom@linux.intel.com>

Hi Thomas,

[This is a private test report for your RFC patch.]
kernel test robot noticed the following build warnings:

[auto build test WARNING on drm-tip/drm-tip]
[cannot apply to drm-misc/drm-misc-next drm-xe/drm-xe-next drm/drm-next drm-exynos/exynos-drm-next drm-intel/for-linux-next drm-intel/for-linux-next-fixes linus/master v6.9-rc2 next-20240328]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]

url:    https://github.com/intel-lab-lkp/linux/commits/Thomas-Hellstr-m/drm-ttm-Allow-TTM-LRU-list-nodes-of-different-types/20240329-230014
base:   git://anongit.freedesktop.org/drm/drm-tip drm-tip
patch link:    https://lore.kernel.org/r/20240329145707.3087-6-thomas.hellstrom%40linux.intel.com
patch subject: [RFC PATCH 5/8] drm/ttm: Add a virtual base class for graphics memory backup
:::::: branch date: 3 days ago
:::::: commit date: 3 days ago
config: x86_64-randconfig-103-20240401 (https://download.01.org/0day-ci/archive/20240401/202404012026.OqsAS9KJ-lkp@intel.com/config)
compiler: clang version 17.0.6 (https://github.com/llvm/llvm-project 6009708b4367171ccdbf4b5905cb6a803753fe18)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Reported-by: Julia Lawall <julia.lawall@inria.fr>
| Closes: https://lore.kernel.org/r/202404012026.OqsAS9KJ-lkp@intel.com/

cocci warnings: (new ones prefixed by >>)
>> drivers/gpu/drm/ttm/ttm_backup_shmem.c:130:18-25: ERROR: reference preceded by free on line 129

vim +130 drivers/gpu/drm/ttm/ttm_backup_shmem.c

73db80e5206ba1 Thomas Hellström 2024-03-29  109  
73db80e5206ba1 Thomas Hellström 2024-03-29  110  /**
73db80e5206ba1 Thomas Hellström 2024-03-29  111   * ttm_backup_shmem_create() - Create a shmem-based struct backup.
73db80e5206ba1 Thomas Hellström 2024-03-29  112   * @size: The maximum size (in bytes) to back up.
73db80e5206ba1 Thomas Hellström 2024-03-29  113   *
73db80e5206ba1 Thomas Hellström 2024-03-29  114   * Create a backup utilizing shmem objects.
73db80e5206ba1 Thomas Hellström 2024-03-29  115   *
73db80e5206ba1 Thomas Hellström 2024-03-29  116   * Return: A pointer to a struct ttm_backup on success,
73db80e5206ba1 Thomas Hellström 2024-03-29  117   * an error pointer on error.
73db80e5206ba1 Thomas Hellström 2024-03-29  118   */
73db80e5206ba1 Thomas Hellström 2024-03-29  119  struct ttm_backup *ttm_backup_shmem_create(loff_t size)
73db80e5206ba1 Thomas Hellström 2024-03-29  120  {
73db80e5206ba1 Thomas Hellström 2024-03-29  121  	struct ttm_backup_shmem *sbackup =
73db80e5206ba1 Thomas Hellström 2024-03-29  122  		kzalloc(sizeof(*sbackup), GFP_KERNEL | __GFP_ACCOUNT);
73db80e5206ba1 Thomas Hellström 2024-03-29  123  
73db80e5206ba1 Thomas Hellström 2024-03-29  124  	if (!sbackup)
73db80e5206ba1 Thomas Hellström 2024-03-29  125  		return ERR_PTR(-ENOMEM);
73db80e5206ba1 Thomas Hellström 2024-03-29  126  
73db80e5206ba1 Thomas Hellström 2024-03-29  127  	sbackup->filp = shmem_file_setup("ttm shmem backup", size, 0);
73db80e5206ba1 Thomas Hellström 2024-03-29  128  	if (IS_ERR(sbackup->filp)) {
73db80e5206ba1 Thomas Hellström 2024-03-29 @129  		kfree(sbackup);
73db80e5206ba1 Thomas Hellström 2024-03-29 @130  		return ERR_CAST(sbackup->filp);

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki

^ permalink raw reply	[flat|nested] 23+ messages in thread

end of thread, other threads:[~2024-04-08 13:05 UTC | newest]

Thread overview: 23+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-03-29 14:56 [RFC PATCH 0/8] TTM shrinker helpers and xe buffer object shrinker Thomas Hellström
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
  -- strict thread matches above, loose matches on Subject: below --
2024-04-01 12:44 [RFC PATCH 5/8] drm/ttm: Add a virtual base class for graphics memory backup kernel test robot

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.