Re: [PATCH] drm/amdgpu: expose more memory stats in fdinfo
Feel free to add my rb on this and push it to amd-staging-drm-next. Christian. Am 09.03.23 um 17:02 schrieb Marek Olšák: Ping On Thu, Feb 23, 2023 at 1:46 PM Marek Olšák wrote: Updated patch attached. Marek On Mon, Feb 6, 2023 at 4:05 AM Christian König wrote: Just two nit picks: + seq_printf(m, "drm-evicted-visible-vram:\t%llu KiB\n", + stats.evicted_visible_vram/1024UL); For the values not standardized for all DRM drivers we might want to use amd as prefix here instead of drm. + uint64_t requested_gtt; /* how much userspace asked for */ We used to have automated checkers complaining about comments after members. Kerneldoc complicent comments look like this: /* @timestamp replaced by @rcu on dma_fence_release() */ struct rcu_head rcu; Apart from that looks good to me. Regards, Christian. Am 30.01.23 um 07:56 schrieb Marek Olšák: > Hi, > > This will be used for performance investigations. The patch is attached. > > Thanks, > Marek
Re: [PATCH] drm/amdgpu: expose more memory stats in fdinfo
Ping On Thu, Feb 23, 2023 at 1:46 PM Marek Olšák wrote: > Updated patch attached. > > Marek > > On Mon, Feb 6, 2023 at 4:05 AM Christian König < > ckoenig.leichtzumer...@gmail.com> wrote: > >> Just two nit picks: >> >> +seq_printf(m, "drm-evicted-visible-vram:\t%llu KiB\n", >> + stats.evicted_visible_vram/1024UL); >> >> For the values not standardized for all DRM drivers we might want to use >> amd as prefix here instead of drm. >> >> +uint64_t requested_gtt;/* how much userspace asked for */ >> >> We used to have automated checkers complaining about comments after >> members. >> >> Kerneldoc complicent comments look like this: >> >> /* @timestamp replaced by @rcu on dma_fence_release() */ >> struct rcu_head rcu; >> >> Apart from that looks good to me. >> >> Regards, >> Christian. >> >> Am 30.01.23 um 07:56 schrieb Marek Olšák: >> > Hi, >> > >> > This will be used for performance investigations. The patch is attached. >> > >> > Thanks, >> > Marek >> >>
Re: [PATCH] drm/amdgpu: expose more memory stats in fdinfo
Updated patch attached. Marek On Mon, Feb 6, 2023 at 4:05 AM Christian König < ckoenig.leichtzumer...@gmail.com> wrote: > Just two nit picks: > > +seq_printf(m, "drm-evicted-visible-vram:\t%llu KiB\n", > + stats.evicted_visible_vram/1024UL); > > For the values not standardized for all DRM drivers we might want to use > amd as prefix here instead of drm. > > +uint64_t requested_gtt;/* how much userspace asked for */ > > We used to have automated checkers complaining about comments after > members. > > Kerneldoc complicent comments look like this: > > /* @timestamp replaced by @rcu on dma_fence_release() */ > struct rcu_head rcu; > > Apart from that looks good to me. > > Regards, > Christian. > > Am 30.01.23 um 07:56 schrieb Marek Olšák: > > Hi, > > > > This will be used for performance investigations. The patch is attached. > > > > Thanks, > > Marek > > From 3971ab629b17e15343ee428d32c3422f44c915bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Ol=C5=A1=C3=A1k?= Date: Mon, 30 Jan 2023 01:52:40 -0500 Subject: [PATCH] drm/amdgpu: expose more memory stats in fdinfo MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This will be used for performance investigations. Signed-off-by: Marek Olšák --- drivers/gpu/drm/amd/amdgpu/amdgpu_fdinfo.c | 24 +++ drivers/gpu/drm/amd/amdgpu/amdgpu_object.c | 27 ++ drivers/gpu/drm/amd/amdgpu/amdgpu_object.h | 25 ++-- drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | 23 -- drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h | 5 ++-- 5 files changed, 76 insertions(+), 28 deletions(-) diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_fdinfo.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_fdinfo.c index 99a7855ab1bc..c57252f004e8 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_fdinfo.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_fdinfo.c @@ -60,12 +60,13 @@ void amdgpu_show_fdinfo(struct seq_file *m, struct file *f) struct amdgpu_fpriv *fpriv = file->driver_priv; struct amdgpu_vm *vm = &fpriv->vm; - uint64_t vram_mem = 0, gtt_mem = 0, cpu_mem = 0; + struct amdgpu_mem_stats stats; ktime_t usage[AMDGPU_HW_IP_NUM]; uint32_t bus, dev, fn, domain; unsigned int hw_ip; int ret; + memset(&stats, 0, sizeof(stats)); bus = adev->pdev->bus->number; domain = pci_domain_nr(adev->pdev->bus); dev = PCI_SLOT(adev->pdev->devfn); @@ -75,7 +76,7 @@ void amdgpu_show_fdinfo(struct seq_file *m, struct file *f) if (ret) return; - amdgpu_vm_get_memory(vm, &vram_mem, >t_mem, &cpu_mem); + amdgpu_vm_get_memory(vm, &stats); amdgpu_bo_unreserve(vm->root.bo); amdgpu_ctx_mgr_usage(&fpriv->ctx_mgr, usage); @@ -90,9 +91,22 @@ void amdgpu_show_fdinfo(struct seq_file *m, struct file *f) seq_printf(m, "drm-driver:\t%s\n", file->minor->dev->driver->name); seq_printf(m, "drm-pdev:\t%04x:%02x:%02x.%d\n", domain, bus, dev, fn); seq_printf(m, "drm-client-id:\t%Lu\n", vm->immediate.fence_context); - seq_printf(m, "drm-memory-vram:\t%llu KiB\n", vram_mem/1024UL); - seq_printf(m, "drm-memory-gtt: \t%llu KiB\n", gtt_mem/1024UL); - seq_printf(m, "drm-memory-cpu: \t%llu KiB\n", cpu_mem/1024UL); + seq_printf(m, "drm-memory-vram:\t%llu KiB\n", stats.vram/1024UL); + seq_printf(m, "drm-memory-gtt: \t%llu KiB\n", stats.gtt/1024UL); + seq_printf(m, "drm-memory-cpu: \t%llu KiB\n", stats.cpu/1024UL); + seq_printf(m, "amd-memory-visible-vram:\t%llu KiB\n", + stats.visible_vram/1024UL); + seq_printf(m, "amd-evicted-vram:\t%llu KiB\n", + stats.evicted_vram/1024UL); + seq_printf(m, "amd-evicted-visible-vram:\t%llu KiB\n", + stats.evicted_visible_vram/1024UL); + seq_printf(m, "amd-requested-vram:\t%llu KiB\n", + stats.requested_vram/1024UL); + seq_printf(m, "amd-requested-visible-vram:\t%llu KiB\n", + stats.requested_visible_vram/1024UL); + seq_printf(m, "amd-requested-gtt:\t%llu KiB\n", + stats.requested_gtt/1024UL); + for (hw_ip = 0; hw_ip < AMDGPU_HW_IP_NUM; ++hw_ip) { if (!usage[hw_ip]) continue; diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c index 1c3e647400bd..2681e3582f75 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c @@ -1264,24 +1264,41 @@ void amdgpu_bo_move_notify(struct ttm_buffer_object *bo, trace_amdgpu_bo_move(abo, new_mem->mem_type, old_mem->mem_type); } -void amdgpu_bo_get_memory(struct amdgpu_bo *bo, uint64_t *vram_mem, -uint64_t *gtt_mem, uint64_t *cpu_mem) +void amdgpu_bo_get_memory(struct amdgpu_bo *bo, + st
Re: [PATCH] drm/amdgpu: expose more memory stats in fdinfo
Just two nit picks: + seq_printf(m, "drm-evicted-visible-vram:\t%llu KiB\n", + stats.evicted_visible_vram/1024UL); For the values not standardized for all DRM drivers we might want to use amd as prefix here instead of drm. + uint64_t requested_gtt; /* how much userspace asked for */ We used to have automated checkers complaining about comments after members. Kerneldoc complicent comments look like this: /* @timestamp replaced by @rcu on dma_fence_release() */ struct rcu_head rcu; Apart from that looks good to me. Regards, Christian. Am 30.01.23 um 07:56 schrieb Marek Olšák: Hi, This will be used for performance investigations. The patch is attached. Thanks, Marek
[PATCH] drm/amdgpu: expose more memory stats in fdinfo
Hi, This will be used for performance investigations. The patch is attached. Thanks, Marek From 144b478f4e5779314c1965dca43a8d713d5a0fbf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Ol=C5=A1=C3=A1k?= Date: Mon, 30 Jan 2023 01:52:40 -0500 Subject: [PATCH] drm/amdgpu: expose more memory stats in fdinfo MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This will be used for performance investigations. Signed-off-by: Marek Olšák --- drivers/gpu/drm/amd/amdgpu/amdgpu_fdinfo.c | 24 +++ drivers/gpu/drm/amd/amdgpu/amdgpu_object.c | 27 ++ drivers/gpu/drm/amd/amdgpu/amdgpu_object.h | 16 +++-- drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | 23 -- drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h | 5 ++-- 5 files changed, 67 insertions(+), 28 deletions(-) diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_fdinfo.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_fdinfo.c index 99a7855ab1bc..6bd7ccc3db65 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_fdinfo.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_fdinfo.c @@ -60,12 +60,13 @@ void amdgpu_show_fdinfo(struct seq_file *m, struct file *f) struct amdgpu_fpriv *fpriv = file->driver_priv; struct amdgpu_vm *vm = &fpriv->vm; - uint64_t vram_mem = 0, gtt_mem = 0, cpu_mem = 0; + struct amdgpu_mem_stats stats; ktime_t usage[AMDGPU_HW_IP_NUM]; uint32_t bus, dev, fn, domain; unsigned int hw_ip; int ret; + memset(&stats, 0, sizeof(stats)); bus = adev->pdev->bus->number; domain = pci_domain_nr(adev->pdev->bus); dev = PCI_SLOT(adev->pdev->devfn); @@ -75,7 +76,7 @@ void amdgpu_show_fdinfo(struct seq_file *m, struct file *f) if (ret) return; - amdgpu_vm_get_memory(vm, &vram_mem, >t_mem, &cpu_mem); + amdgpu_vm_get_memory(vm, &stats); amdgpu_bo_unreserve(vm->root.bo); amdgpu_ctx_mgr_usage(&fpriv->ctx_mgr, usage); @@ -90,9 +91,22 @@ void amdgpu_show_fdinfo(struct seq_file *m, struct file *f) seq_printf(m, "drm-driver:\t%s\n", file->minor->dev->driver->name); seq_printf(m, "drm-pdev:\t%04x:%02x:%02x.%d\n", domain, bus, dev, fn); seq_printf(m, "drm-client-id:\t%Lu\n", vm->immediate.fence_context); - seq_printf(m, "drm-memory-vram:\t%llu KiB\n", vram_mem/1024UL); - seq_printf(m, "drm-memory-gtt: \t%llu KiB\n", gtt_mem/1024UL); - seq_printf(m, "drm-memory-cpu: \t%llu KiB\n", cpu_mem/1024UL); + seq_printf(m, "drm-memory-vram:\t%llu KiB\n", stats.vram/1024UL); + seq_printf(m, "drm-memory-visible-vram:\t%llu KiB\n", + stats.visible_vram/1024UL); + seq_printf(m, "drm-memory-gtt: \t%llu KiB\n", stats.gtt/1024UL); + seq_printf(m, "drm-memory-cpu: \t%llu KiB\n", stats.cpu/1024UL); + seq_printf(m, "drm-evicted-vram:\t%llu KiB\n", + stats.evicted_vram/1024UL); + seq_printf(m, "drm-evicted-visible-vram:\t%llu KiB\n", + stats.evicted_visible_vram/1024UL); + seq_printf(m, "drm-requested-vram:\t%llu KiB\n", + stats.requested_vram/1024UL); + seq_printf(m, "drm-requested-visible-vram:\t%llu KiB\n", + stats.requested_visible_vram/1024UL); + seq_printf(m, "drm-requested-gtt:\t%llu KiB\n", + stats.requested_gtt/1024UL); + for (hw_ip = 0; hw_ip < AMDGPU_HW_IP_NUM; ++hw_ip) { if (!usage[hw_ip]) continue; diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c index 2d237f3d3a2e..a66827427887 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c @@ -1264,24 +1264,41 @@ void amdgpu_bo_move_notify(struct ttm_buffer_object *bo, trace_amdgpu_bo_move(abo, new_mem->mem_type, old_mem->mem_type); } -void amdgpu_bo_get_memory(struct amdgpu_bo *bo, uint64_t *vram_mem, -uint64_t *gtt_mem, uint64_t *cpu_mem) +void amdgpu_bo_get_memory(struct amdgpu_bo *bo, + struct amdgpu_mem_stats *stats) { unsigned int domain; + uint64_t size = amdgpu_bo_size(bo); domain = amdgpu_mem_type_to_domain(bo->tbo.resource->mem_type); switch (domain) { case AMDGPU_GEM_DOMAIN_VRAM: - *vram_mem += amdgpu_bo_size(bo); + stats->vram += size; + if (amdgpu_bo_in_cpu_visible_vram(bo)) + stats->visible_vram += size; break; case AMDGPU_GEM_DOMAIN_GTT: - *gtt_mem += amdgpu_bo_size(bo); + stats->gtt += size; break; case AMDGPU_GEM_DOMAIN_CPU: default: - *cpu_mem += amdgpu_bo_size(bo); + stats->cpu += size; break; } + + if (bo->preferred_domains & AMDGPU_GEM_DOMAIN_VRAM) { + stats->requested_vram += size; + if (bo->flags & AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED) + stats->requested_visible_vram += size; + + if (domain != AMDGPU_GEM_DOMAIN_VRAM) { + stats->evicted_vram += size; + if (bo->flags & AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED) +stats->evicted_visible_vram