[RFC,v2,00/12] drm/i915/svm: Add SVM support
mbox series

Message ID 20191213215614.24558-1-niranjana.vishwanathapura@intel.com
Headers show
Series
  • drm/i915/svm: Add SVM support
Related show

Message

Niranjana Vishwanathapura Dec. 13, 2019, 9:56 p.m. UTC
Shared Virtual Memory (SVM) allows the programmer to use a single virtual
address space which will be shared between threads executing on CPUs and GPUs.
It abstracts away from the user the location of the backing memory, and hence
simplifies the user programming model.
SVM supports two types of virtual memory allocation methods.
Runtime allocator requires the driver to provide memory allocation and
management interface, like buffer object (BO) interface.
Whereas system allocator makes use of default OS memory allocation and
management support like malloc().

This patch series adds both SVM system and runtime allocator support
to i915 driver.

The patch series includes
 - SVM support for both system and runtime allocation.
 - Plugin in device memory with the Linux kernel.
 - User API advertising SVM capability and configuration by user on per
   vm basis.
 - User API to bind an address range or a BO with a device page table.
 - User API to prefetch an address range to device memory.
 - Implicit migration by moving pages or BOs back from device to host
   memory upon CPU access.
 - CPU copy and blitter copy support for migrating the pages/BOs.
 - Large page mapping support
 - Page table dump support.

References:
https://www.kernel.org/doc/Documentation/vm/hmm.rst
The HMM use cases in the Linux kernel.
Test RFC series
   "[RFC i-g-t 0/7] tests/i915/svm: Shared Virtual Memory (SVM) test"

v2:
- Use updated HMM API
- HMM usage changes as per review feedback
- UAPI name change as per review feedback
- Reformat RFC series
- Some minor fixes

Niranjana Vishwanathapura (11):
  drm/i915/svm: Add SVM documentation
  drm/i915/svm: Runtime (RT) allocator support
  drm/i915/svm: Page table update support for SVM
  drm/i915/svm: Page table mirroring support
  drm/i915/svm: Device memory support
  drm/i915/svm: Implicitly migrate pages upon CPU fault
  drm/i915/svm: Page copy support during migration
  drm/i915/svm: Add functions to blitter copy SVM buffers
  drm/i915/svm: Use blitter copy for migration
  drm/i915/svm: Add support to en/disable SVM
  drm/i915/svm: Add page table dump support

Venkata Sandeep Dhanalakota (1):
  drm/i915/svm: Implicitly migrate BOs upon CPU access

 Documentation/gpu/i915.rst                    |  29 +
 drivers/gpu/drm/i915/Kconfig                  |  23 +
 drivers/gpu/drm/i915/Kconfig.debug            |  14 +
 drivers/gpu/drm/i915/Makefile                 |   6 +
 drivers/gpu/drm/i915/gem/i915_gem_context.c   |  95 ++-
 drivers/gpu/drm/i915/gem/i915_gem_context.h   |   2 +
 .../gpu/drm/i915/gem/i915_gem_context_types.h |   1 +
 .../gpu/drm/i915/gem/i915_gem_execbuffer.c    |  65 +-
 drivers/gpu/drm/i915/gem/i915_gem_mman.c      |  10 +
 drivers/gpu/drm/i915/gem/i915_gem_object.c    |  43 +-
 drivers/gpu/drm/i915/gem/i915_gem_object.h    |   6 +
 drivers/gpu/drm/i915/gem/i915_gem_svm.c       |  60 ++
 drivers/gpu/drm/i915/gem/i915_gem_svm.h       |  22 +
 drivers/gpu/drm/i915/gem/i915_gem_wait.c      |   2 +-
 drivers/gpu/drm/i915/i915_buddy.h             |  12 +
 drivers/gpu/drm/i915/i915_drv.c               |  31 +-
 drivers/gpu/drm/i915/i915_drv.h               |  32 +
 drivers/gpu/drm/i915/i915_gem_gtt.c           | 158 +++-
 drivers/gpu/drm/i915/i915_gem_gtt.h           |  41 +
 drivers/gpu/drm/i915/i915_getparam.c          |   3 +
 drivers/gpu/drm/i915/i915_svm.c               | 330 ++++++++
 drivers/gpu/drm/i915/i915_svm.h               |  71 ++
 drivers/gpu/drm/i915/i915_svm_copy.c          | 172 ++++
 drivers/gpu/drm/i915/i915_svm_devmem.c        | 781 ++++++++++++++++++
 drivers/gpu/drm/i915/intel_memory_region.c    |   4 -
 drivers/gpu/drm/i915/intel_memory_region.h    |  18 +
 drivers/gpu/drm/i915/intel_region_lmem.c      |  10 +
 include/uapi/drm/i915_drm.h                   |  73 ++
 28 files changed, 2078 insertions(+), 36 deletions(-)
 create mode 100644 drivers/gpu/drm/i915/gem/i915_gem_svm.c
 create mode 100644 drivers/gpu/drm/i915/gem/i915_gem_svm.h
 create mode 100644 drivers/gpu/drm/i915/i915_svm.c
 create mode 100644 drivers/gpu/drm/i915/i915_svm.h
 create mode 100644 drivers/gpu/drm/i915/i915_svm_copy.c
 create mode 100644 drivers/gpu/drm/i915/i915_svm_devmem.c

Comments

Niranjana Vishwanathapura Jan. 24, 2020, 8:42 a.m. UTC | #1
On Fri, Dec 13, 2019 at 01:56:02PM -0800, Niranjana Vishwanathapura wrote:
>Shared Virtual Memory (SVM) allows the programmer to use a single virtual
>address space which will be shared between threads executing on CPUs and GPUs.
>It abstracts away from the user the location of the backing memory, and hence
>simplifies the user programming model.
>SVM supports two types of virtual memory allocation methods.
>Runtime allocator requires the driver to provide memory allocation and
>management interface, like buffer object (BO) interface.
>Whereas system allocator makes use of default OS memory allocation and
>management support like malloc().
>
>This patch series adds both SVM system and runtime allocator support
>to i915 driver.
>

I will split runtime allocator and system allocator support into separate
RFC series. I will prioritize runtime allocator support to address the
feedback in patch [02] of this series.

Thanks,
Niranjana

>The patch series includes
> - SVM support for both system and runtime allocation.
> - Plugin in device memory with the Linux kernel.
> - User API advertising SVM capability and configuration by user on per
>   vm basis.
> - User API to bind an address range or a BO with a device page table.
> - User API to prefetch an address range to device memory.
> - Implicit migration by moving pages or BOs back from device to host
>   memory upon CPU access.
> - CPU copy and blitter copy support for migrating the pages/BOs.
> - Large page mapping support
> - Page table dump support.
>
>References:
>https://www.kernel.org/doc/Documentation/vm/hmm.rst
>The HMM use cases in the Linux kernel.
>Test RFC series
>   "[RFC i-g-t 0/7] tests/i915/svm: Shared Virtual Memory (SVM) test"
>
>v2:
>- Use updated HMM API
>- HMM usage changes as per review feedback
>- UAPI name change as per review feedback
>- Reformat RFC series
>- Some minor fixes
>
>Niranjana Vishwanathapura (11):
>  drm/i915/svm: Add SVM documentation
>  drm/i915/svm: Runtime (RT) allocator support
>  drm/i915/svm: Page table update support for SVM
>  drm/i915/svm: Page table mirroring support
>  drm/i915/svm: Device memory support
>  drm/i915/svm: Implicitly migrate pages upon CPU fault
>  drm/i915/svm: Page copy support during migration
>  drm/i915/svm: Add functions to blitter copy SVM buffers
>  drm/i915/svm: Use blitter copy for migration
>  drm/i915/svm: Add support to en/disable SVM
>  drm/i915/svm: Add page table dump support
>
>Venkata Sandeep Dhanalakota (1):
>  drm/i915/svm: Implicitly migrate BOs upon CPU access
>
> Documentation/gpu/i915.rst                    |  29 +
> drivers/gpu/drm/i915/Kconfig                  |  23 +
> drivers/gpu/drm/i915/Kconfig.debug            |  14 +
> drivers/gpu/drm/i915/Makefile                 |   6 +
> drivers/gpu/drm/i915/gem/i915_gem_context.c   |  95 ++-
> drivers/gpu/drm/i915/gem/i915_gem_context.h   |   2 +
> .../gpu/drm/i915/gem/i915_gem_context_types.h |   1 +
> .../gpu/drm/i915/gem/i915_gem_execbuffer.c    |  65 +-
> drivers/gpu/drm/i915/gem/i915_gem_mman.c      |  10 +
> drivers/gpu/drm/i915/gem/i915_gem_object.c    |  43 +-
> drivers/gpu/drm/i915/gem/i915_gem_object.h    |   6 +
> drivers/gpu/drm/i915/gem/i915_gem_svm.c       |  60 ++
> drivers/gpu/drm/i915/gem/i915_gem_svm.h       |  22 +
> drivers/gpu/drm/i915/gem/i915_gem_wait.c      |   2 +-
> drivers/gpu/drm/i915/i915_buddy.h             |  12 +
> drivers/gpu/drm/i915/i915_drv.c               |  31 +-
> drivers/gpu/drm/i915/i915_drv.h               |  32 +
> drivers/gpu/drm/i915/i915_gem_gtt.c           | 158 +++-
> drivers/gpu/drm/i915/i915_gem_gtt.h           |  41 +
> drivers/gpu/drm/i915/i915_getparam.c          |   3 +
> drivers/gpu/drm/i915/i915_svm.c               | 330 ++++++++
> drivers/gpu/drm/i915/i915_svm.h               |  71 ++
> drivers/gpu/drm/i915/i915_svm_copy.c          | 172 ++++
> drivers/gpu/drm/i915/i915_svm_devmem.c        | 781 ++++++++++++++++++
> drivers/gpu/drm/i915/intel_memory_region.c    |   4 -
> drivers/gpu/drm/i915/intel_memory_region.h    |  18 +
> drivers/gpu/drm/i915/intel_region_lmem.c      |  10 +
> include/uapi/drm/i915_drm.h                   |  73 ++
> 28 files changed, 2078 insertions(+), 36 deletions(-)
> create mode 100644 drivers/gpu/drm/i915/gem/i915_gem_svm.c
> create mode 100644 drivers/gpu/drm/i915/gem/i915_gem_svm.h
> create mode 100644 drivers/gpu/drm/i915/i915_svm.c
> create mode 100644 drivers/gpu/drm/i915/i915_svm.h
> create mode 100644 drivers/gpu/drm/i915/i915_svm_copy.c
> create mode 100644 drivers/gpu/drm/i915/i915_svm_devmem.c
>
>-- 
>2.21.0.rc0.32.g243a4c7e27
>
>_______________________________________________
>dri-devel mailing list
>dri-devel@lists.freedesktop.org
>https://lists.freedesktop.org/mailman/listinfo/dri-devel