mbox series

[v3,0/8] fdinfo memory stats

Message ID 20230609121143.1232420-1-tvrtko.ursulin@linux.intel.com (mailing list archive)
Headers show
Series fdinfo memory stats | expand

Message

Tvrtko Ursulin June 9, 2023, 12:11 p.m. UTC
From: Tvrtko Ursulin <tvrtko.ursulin@intel.com>

I added tracking of most classes of objects which contribute to client's memory
footprint and accouting along the similar lines as in Rob's msm code. Then
printing it out to fdinfo using the drm helper Rob added.

Accounting by keeping per client lists may not be the most effient method,
perhaps we should simply add and subtract stats directly at convenient sites,
but that too is not straightforward due no existing connection between buffer
objects and clients. Possibly some other tricky bits in the buffer sharing
deparment. So lets see if this works for now. Infrequent reader penalty should
not be too bad (may be even useful to dump the lists in debugfs?) and additional
list_head per object pretty much drowns in the noise.

Example fdinfo with the series applied:

# cat /proc/1383/fdinfo/8
pos:    0
flags:  02100002
mnt_id: 21
ino:    397
drm-driver:     i915
drm-client-id:  18
drm-pdev:       0000:00:02.0
drm-total-system:       125 MiB
drm-shared-system:      16 MiB
drm-active-system:      110 MiB
drm-resident-system:    125 MiB
drm-purgeable-system:   2 MiB
drm-total-stolen-system:        0
drm-shared-stolen-system:       0
drm-active-stolen-system:       0
drm-resident-stolen-system:     0
drm-purgeable-stolen-system:    0
drm-engine-render:      25662044495 ns
drm-engine-copy:        0 ns
drm-engine-video:       0 ns
drm-engine-video-enhance:       0 ns

Example gputop output (local patches currently):

DRM minor 0
 PID     SMEM  SMEMRSS   render     copy     video    NAME
1233     124M     124M |████████||        ||        ||        | neverball
1130      59M      59M |█▌      ||        ||        ||        | Xorg
1207      12M      12M |        ||        ||        ||        | xfwm4

v2:
 * Now actually per client.

v3:
 * Track imported dma-buf objects.

P.S. Patch 1 in the series is to silence a false positive lockdep splat due
fence signaling annotations.

Tvrtko Ursulin (8):
  dma-fence: Bypass signaling annotation from dma_fence_is_signaled
  drm/i915: Track buffer objects belonging to clients
  drm/i915: Record which clients own a VM
  drm/i915: Track page table backing store usage
  drm/i915: Account ring buffer and context state storage
  drm: Add drm_gem_prime_fd_to_handle_obj
  drm/i915: Track imported dma-buf objects in memory stats
  drm/i915: Implement fdinfo memory stats printing

 drivers/dma-buf/dma-fence.c                   |  26 +++-
 drivers/gpu/drm/drm_prime.c                   |  41 ++++++-
 drivers/gpu/drm/i915/gem/i915_gem_context.c   |  17 ++-
 .../gpu/drm/i915/gem/i915_gem_context_types.h |   3 +
 drivers/gpu/drm/i915/gem/i915_gem_create.c    |  32 ++++-
 drivers/gpu/drm/i915/gem/i915_gem_dmabuf.c    |  32 +++++
 drivers/gpu/drm/i915/gem/i915_gem_dmabuf.h    |   7 ++
 drivers/gpu/drm/i915/gem/i915_gem_object.c    |   6 +
 .../gpu/drm/i915/gem/i915_gem_object_types.h  |  12 ++
 .../gpu/drm/i915/gem/selftests/mock_context.c |   4 +-
 drivers/gpu/drm/i915/gt/intel_gtt.c           |   6 +
 drivers/gpu/drm/i915/gt/intel_gtt.h           |   1 +
 drivers/gpu/drm/i915/i915_driver.c            |   2 +-
 drivers/gpu/drm/i915/i915_drm_client.c        | 113 +++++++++++++++++-
 drivers/gpu/drm/i915/i915_drm_client.h        |  45 ++++++-
 drivers/gpu/drm/i915/i915_gem.c               |   2 +-
 include/drm/drm_prime.h                       |   4 +
 include/linux/dma-fence.h                     |   3 +-
 18 files changed, 332 insertions(+), 24 deletions(-)