[Mesa-dev] [PATCH 7/8] gallium/radeon: add a driver query for AMDGPU_INFO_NUM_EVICTIONS

Bas Nieuwenhuizen bas at basnieuwenhuizen.nl
Fri Aug 26 10:51:58 UTC 2016


Patch 1-7 of this series are

Reviewed-by: Bas Nieuwenhuizen <bas at basnieuwenhuizen.nl>

- Bas

(Adding mesa-dev ML this time)

On Thu, Aug 18, 2016 at 9:46 PM, Marek Olšák <maraeo at gmail.com> wrote:
> From: Marek Olšák <marek.olsak at amd.com>
>
> If the kernel driver doesn't support it, it returns 0.
> ---
>  src/gallium/drivers/radeon/r600_query.c           | 8 ++++++--
>  src/gallium/drivers/radeon/r600_query.h           | 1 +
>  src/gallium/drivers/radeon/radeon_winsys.h        | 1 +
>  src/gallium/winsys/amdgpu/drm/amdgpu_winsys.c     | 7 +++++++
>  src/gallium/winsys/radeon/drm/radeon_drm_winsys.c | 2 ++
>  5 files changed, 17 insertions(+), 2 deletions(-)
>
> diff --git a/src/gallium/drivers/radeon/r600_query.c b/src/gallium/drivers/radeon/r600_query.c
> index 5825e8b..bd0a906 100644
> --- a/src/gallium/drivers/radeon/r600_query.c
> +++ b/src/gallium/drivers/radeon/r600_query.c
> @@ -49,20 +49,21 @@ static void r600_query_sw_destroy(struct r600_common_context *rctx,
>  static enum radeon_value_id winsys_id_from_type(unsigned type)
>  {
>         switch (type) {
>         case R600_QUERY_REQUESTED_VRAM: return RADEON_REQUESTED_VRAM_MEMORY;
>         case R600_QUERY_REQUESTED_GTT: return RADEON_REQUESTED_GTT_MEMORY;
>         case R600_QUERY_MAPPED_VRAM: return RADEON_MAPPED_VRAM;
>         case R600_QUERY_MAPPED_GTT: return RADEON_MAPPED_GTT;
>         case R600_QUERY_BUFFER_WAIT_TIME: return RADEON_BUFFER_WAIT_TIME_NS;
>         case R600_QUERY_NUM_CS_FLUSHES: return RADEON_NUM_CS_FLUSHES;
>         case R600_QUERY_NUM_BYTES_MOVED: return RADEON_NUM_BYTES_MOVED;
> +       case R600_QUERY_NUM_EVICTIONS: return RADEON_NUM_EVICTIONS;
>         case R600_QUERY_VRAM_USAGE: return RADEON_VRAM_USAGE;
>         case R600_QUERY_GTT_USAGE: return RADEON_GTT_USAGE;
>         case R600_QUERY_GPU_TEMPERATURE: return RADEON_GPU_TEMPERATURE;
>         case R600_QUERY_CURRENT_GPU_SCLK: return RADEON_CURRENT_SCLK;
>         case R600_QUERY_CURRENT_GPU_MCLK: return RADEON_CURRENT_MCLK;
>         default: unreachable("query type does not correspond to winsys id");
>         }
>  }
>
>  static bool r600_query_sw_begin(struct r600_common_context *rctx,
> @@ -96,21 +97,22 @@ static bool r600_query_sw_begin(struct r600_common_context *rctx,
>         case R600_QUERY_VRAM_USAGE:
>         case R600_QUERY_GTT_USAGE:
>         case R600_QUERY_GPU_TEMPERATURE:
>         case R600_QUERY_CURRENT_GPU_SCLK:
>         case R600_QUERY_CURRENT_GPU_MCLK:
>         case R600_QUERY_BACK_BUFFER_PS_DRAW_RATIO:
>                 query->begin_result = 0;
>                 break;
>         case R600_QUERY_BUFFER_WAIT_TIME:
>         case R600_QUERY_NUM_CS_FLUSHES:
> -       case R600_QUERY_NUM_BYTES_MOVED: {
> +       case R600_QUERY_NUM_BYTES_MOVED:
> +       case R600_QUERY_NUM_EVICTIONS: {
>                 enum radeon_value_id ws_id = winsys_id_from_type(query->b.type);
>                 query->begin_result = rctx->ws->query_value(rctx->ws, ws_id);
>                 break;
>         }
>         case R600_QUERY_GPU_LOAD:
>                 query->begin_result = r600_gpu_load_begin(rctx->screen);
>                 break;
>         case R600_QUERY_NUM_COMPILATIONS:
>                 query->begin_result = p_atomic_read(&rctx->screen->num_compilations);
>                 break;
> @@ -160,21 +162,22 @@ static bool r600_query_sw_end(struct r600_common_context *rctx,
>         case R600_QUERY_REQUESTED_GTT:
>         case R600_QUERY_MAPPED_VRAM:
>         case R600_QUERY_MAPPED_GTT:
>         case R600_QUERY_VRAM_USAGE:
>         case R600_QUERY_GTT_USAGE:
>         case R600_QUERY_GPU_TEMPERATURE:
>         case R600_QUERY_CURRENT_GPU_SCLK:
>         case R600_QUERY_CURRENT_GPU_MCLK:
>         case R600_QUERY_BUFFER_WAIT_TIME:
>         case R600_QUERY_NUM_CS_FLUSHES:
> -       case R600_QUERY_NUM_BYTES_MOVED: {
> +       case R600_QUERY_NUM_BYTES_MOVED:
> +       case R600_QUERY_NUM_EVICTIONS: {
>                 enum radeon_value_id ws_id = winsys_id_from_type(query->b.type);
>                 query->end_result = rctx->ws->query_value(rctx->ws, ws_id);
>                 break;
>         }
>         case R600_QUERY_GPU_LOAD:
>                 query->end_result = r600_gpu_load_end(rctx->screen,
>                                                       query->begin_result);
>                 query->begin_result = 0;
>                 break;
>         case R600_QUERY_NUM_COMPILATIONS:
> @@ -1179,20 +1182,21 @@ static struct pipe_driver_query_info r600_driver_query_list[] = {
>         X("compute-calls",              COMPUTE_CALLS,          UINT64, AVERAGE),
>         X("spill-compute-calls",        SPILL_COMPUTE_CALLS,    UINT64, AVERAGE),
>         X("dma-calls",                  DMA_CALLS,              UINT64, AVERAGE),
>         X("requested-VRAM",             REQUESTED_VRAM,         BYTES, AVERAGE),
>         X("requested-GTT",              REQUESTED_GTT,          BYTES, AVERAGE),
>         X("mapped-VRAM",                MAPPED_VRAM,            BYTES, AVERAGE),
>         X("mapped-GTT",                 MAPPED_GTT,             BYTES, AVERAGE),
>         X("buffer-wait-time",           BUFFER_WAIT_TIME,       MICROSECONDS, CUMULATIVE),
>         X("num-cs-flushes",             NUM_CS_FLUSHES,         UINT64, AVERAGE),
>         X("num-bytes-moved",            NUM_BYTES_MOVED,        BYTES, CUMULATIVE),
> +       X("num-evictions",              NUM_EVICTIONS,          UINT64, CUMULATIVE),
>         X("VRAM-usage",                 VRAM_USAGE,             BYTES, AVERAGE),
>         X("GTT-usage",                  GTT_USAGE,              BYTES, AVERAGE),
>         X("back-buffer-ps-draw-ratio",  BACK_BUFFER_PS_DRAW_RATIO, UINT64, AVERAGE),
>
>         /* GPIN queries are for the benefit of old versions of GPUPerfStudio,
>          * which use it as a fallback path to detect the GPU type.
>          *
>          * Note: The names of these queries are significant for GPUPerfStudio
>          * (and possibly their order as well). */
>         XG(GPIN, "GPIN_000",            GPIN_ASIC_ID,           UINT, AVERAGE),
> diff --git a/src/gallium/drivers/radeon/r600_query.h b/src/gallium/drivers/radeon/r600_query.h
> index 7aa684c..0bb7cdd 100644
> --- a/src/gallium/drivers/radeon/r600_query.h
> +++ b/src/gallium/drivers/radeon/r600_query.h
> @@ -46,20 +46,21 @@ enum {
>         R600_QUERY_COMPUTE_CALLS,
>         R600_QUERY_SPILL_COMPUTE_CALLS,
>         R600_QUERY_DMA_CALLS,
>         R600_QUERY_REQUESTED_VRAM,
>         R600_QUERY_REQUESTED_GTT,
>         R600_QUERY_MAPPED_VRAM,
>         R600_QUERY_MAPPED_GTT,
>         R600_QUERY_BUFFER_WAIT_TIME,
>         R600_QUERY_NUM_CS_FLUSHES,
>         R600_QUERY_NUM_BYTES_MOVED,
> +       R600_QUERY_NUM_EVICTIONS,
>         R600_QUERY_VRAM_USAGE,
>         R600_QUERY_GTT_USAGE,
>         R600_QUERY_GPU_TEMPERATURE,
>         R600_QUERY_CURRENT_GPU_SCLK,
>         R600_QUERY_CURRENT_GPU_MCLK,
>         R600_QUERY_GPU_LOAD,
>         R600_QUERY_NUM_COMPILATIONS,
>         R600_QUERY_NUM_SHADERS_CREATED,
>         R600_QUERY_BACK_BUFFER_PS_DRAW_RATIO,
>         R600_QUERY_GPIN_ASIC_ID,
> diff --git a/src/gallium/drivers/radeon/radeon_winsys.h b/src/gallium/drivers/radeon/radeon_winsys.h
> index f4e3773..741dc99 100644
> --- a/src/gallium/drivers/radeon/radeon_winsys.h
> +++ b/src/gallium/drivers/radeon/radeon_winsys.h
> @@ -153,20 +153,21 @@ enum ring_type {
>
>  enum radeon_value_id {
>      RADEON_REQUESTED_VRAM_MEMORY,
>      RADEON_REQUESTED_GTT_MEMORY,
>      RADEON_MAPPED_VRAM,
>      RADEON_MAPPED_GTT,
>      RADEON_BUFFER_WAIT_TIME_NS,
>      RADEON_TIMESTAMP,
>      RADEON_NUM_CS_FLUSHES,
>      RADEON_NUM_BYTES_MOVED,
> +    RADEON_NUM_EVICTIONS,
>      RADEON_VRAM_USAGE,
>      RADEON_GTT_USAGE,
>      RADEON_GPU_TEMPERATURE, /* DRM 2.42.0 */
>      RADEON_CURRENT_SCLK,
>      RADEON_CURRENT_MCLK,
>      RADEON_GPU_RESET_COUNTER, /* DRM 2.43.0 */
>  };
>
>  /* Each group of four has the same priority. */
>  enum radeon_bo_priority {
> diff --git a/src/gallium/winsys/amdgpu/drm/amdgpu_winsys.c b/src/gallium/winsys/amdgpu/drm/amdgpu_winsys.c
> index 9556777..d8aed8b 100644
> --- a/src/gallium/winsys/amdgpu/drm/amdgpu_winsys.c
> +++ b/src/gallium/winsys/amdgpu/drm/amdgpu_winsys.c
> @@ -52,20 +52,24 @@
>  #define     CIK__PIPE_CONFIG__ADDR_SURF_P8_16x16_8x16    8
>  #define     CIK__PIPE_CONFIG__ADDR_SURF_P8_16x32_8x16    9
>  #define     CIK__PIPE_CONFIG__ADDR_SURF_P8_32x32_8x16    10
>  #define     CIK__PIPE_CONFIG__ADDR_SURF_P8_16x32_16x16   11
>  #define     CIK__PIPE_CONFIG__ADDR_SURF_P8_32x32_16x16   12
>  #define     CIK__PIPE_CONFIG__ADDR_SURF_P8_32x32_16x32   13
>  #define     CIK__PIPE_CONFIG__ADDR_SURF_P8_32x64_32x32   14
>  #define     CIK__PIPE_CONFIG__ADDR_SURF_P16_32X32_8X16   16
>  #define     CIK__PIPE_CONFIG__ADDR_SURF_P16_32X32_16X16  17
>
> +#ifndef AMDGPU_INFO_NUM_EVICTIONS
> +#define AMDGPU_INFO_NUM_EVICTIONS              0x18
> +#endif
> +
>  static struct util_hash_table *dev_tab = NULL;
>  pipe_static_mutex(dev_tab_mutex);
>
>  static unsigned cik_get_num_tile_pipes(struct amdgpu_gpu_info *info)
>  {
>     unsigned mode2d = info->gb_tile_mode[CIK_TILE_MODE_COLOR_2D];
>
>     switch (CIK__GB_TILE_MODE__PIPE_CONFIG(mode2d)) {
>     case CIK__PIPE_CONFIG__ADDR_SURF_P2:
>         return 2;
> @@ -386,20 +390,23 @@ static uint64_t amdgpu_query_value(struct radeon_winsys *rws,
>     case RADEON_BUFFER_WAIT_TIME_NS:
>        return ws->buffer_wait_time;
>     case RADEON_TIMESTAMP:
>        amdgpu_query_info(ws->dev, AMDGPU_INFO_TIMESTAMP, 8, &retval);
>        return retval;
>     case RADEON_NUM_CS_FLUSHES:
>        return ws->num_cs_flushes;
>     case RADEON_NUM_BYTES_MOVED:
>        amdgpu_query_info(ws->dev, AMDGPU_INFO_NUM_BYTES_MOVED, 8, &retval);
>        return retval;
> +   case RADEON_NUM_EVICTIONS:
> +      amdgpu_query_info(ws->dev, AMDGPU_INFO_NUM_EVICTIONS, 8, &retval);
> +      return retval;
>     case RADEON_VRAM_USAGE:
>        amdgpu_query_heap_info(ws->dev, AMDGPU_GEM_DOMAIN_VRAM, 0, &heap);
>        return heap.heap_usage;
>     case RADEON_GTT_USAGE:
>        amdgpu_query_heap_info(ws->dev, AMDGPU_GEM_DOMAIN_GTT, 0, &heap);
>        return heap.heap_usage;
>     case RADEON_GPU_TEMPERATURE:
>     case RADEON_CURRENT_SCLK:
>     case RADEON_CURRENT_MCLK:
>        return 0;
> diff --git a/src/gallium/winsys/radeon/drm/radeon_drm_winsys.c b/src/gallium/winsys/radeon/drm/radeon_drm_winsys.c
> index b1cc3d5..d73b7f4 100644
> --- a/src/gallium/winsys/radeon/drm/radeon_drm_winsys.c
> +++ b/src/gallium/winsys/radeon/drm/radeon_drm_winsys.c
> @@ -617,20 +617,22 @@ static uint64_t radeon_query_value(struct radeon_winsys *rws,
>
>          radeon_get_drm_value(ws->fd, RADEON_INFO_TIMESTAMP, "timestamp",
>                               (uint32_t*)&retval);
>          return retval;
>      case RADEON_NUM_CS_FLUSHES:
>          return ws->num_cs_flushes;
>      case RADEON_NUM_BYTES_MOVED:
>          radeon_get_drm_value(ws->fd, RADEON_INFO_NUM_BYTES_MOVED,
>                               "num-bytes-moved", (uint32_t*)&retval);
>          return retval;
> +    case RADEON_NUM_EVICTIONS:
> +        return 0; /* unimplemented */
>      case RADEON_VRAM_USAGE:
>          radeon_get_drm_value(ws->fd, RADEON_INFO_VRAM_USAGE,
>                               "vram-usage", (uint32_t*)&retval);
>          return retval;
>      case RADEON_GTT_USAGE:
>          radeon_get_drm_value(ws->fd, RADEON_INFO_GTT_USAGE,
>                               "gtt-usage", (uint32_t*)&retval);
>          return retval;
>      case RADEON_GPU_TEMPERATURE:
>          radeon_get_drm_value(ws->fd, RADEON_INFO_CURRENT_GPU_TEMP,
> --
> 2.7.4
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev


More information about the mesa-dev mailing list