[Mesa-dev] [PATCH] gallium/radeon: add HUD queries for GPU temperature and clocks

Samuel Pitoiset samuel.pitoiset at gmail.com
Tue Feb 14 10:21:48 UTC 2017



On 02/14/2017 09:23 AM, Nicolai Hähnle wrote:
> On 13.02.2017 23:08, Samuel Pitoiset wrote:
>> Only the Radeon kernel driver exposed the GPU temperature and
>> the shader/memory clocks, this implements the same functionality
>> for the AMDGPU kernel driver.
>>
>> These queries will return 0 if the DRM version is less than 3.10,
>> I don't explicitely check the version here because the query
>> codepath is already a bit messy.
>>
>> Signed-off-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
>> ---
>>  src/gallium/drivers/radeon/r600_query.c       | 12 ++++++------
>>  src/gallium/winsys/amdgpu/drm/amdgpu_winsys.c | 19 ++++++++++++++++++-
>>  2 files changed, 24 insertions(+), 7 deletions(-)
>>
>> diff --git a/src/gallium/drivers/radeon/r600_query.c
>> b/src/gallium/drivers/radeon/r600_query.c
>> index 05741d33c9..4959621e11 100644
>> --- a/src/gallium/drivers/radeon/r600_query.c
>> +++ b/src/gallium/drivers/radeon/r600_query.c
>> @@ -1768,6 +1768,10 @@ static struct pipe_driver_query_info
>> r600_driver_query_list[] = {
>>      XG(GPIN, "GPIN_003",        GPIN_NUM_SPI,        UINT, AVERAGE),
>>      XG(GPIN, "GPIN_004",        GPIN_NUM_SE,        UINT, AVERAGE),
>>
>> +    X("temperature",        GPU_TEMPERATURE,    UINT64, AVERAGE),
>> +    X("shader-clock",        CURRENT_GPU_SCLK,    HZ, AVERAGE),
>> +    X("memory-clock",        CURRENT_GPU_MCLK,    HZ, AVERAGE),
>> +
>>      /* The following queries must be at the end of the list because
>> their
>>       * availability is adjusted dynamically based on the DRM version. */
>>      X("GPU-load",            GPU_LOAD,        UINT64, AVERAGE),
>> @@ -1792,10 +1796,6 @@ static struct pipe_driver_query_info
>> r600_driver_query_list[] = {
>>      X("GPU-dma-busy",        GPU_DMA_BUSY,        UINT64, AVERAGE),
>>      X("GPU-scratch-ram-busy",    GPU_SCRATCH_RAM_BUSY,    UINT64,
>> AVERAGE),
>>      X("GPU-ce-busy",        GPU_CE_BUSY,        UINT64, AVERAGE),
>> -
>> -    X("temperature",        GPU_TEMPERATURE,    UINT64, AVERAGE),
>> -    X("shader-clock",        CURRENT_GPU_SCLK,    HZ, AVERAGE),
>> -    X("memory-clock",        CURRENT_GPU_MCLK,    HZ, AVERAGE),
>>  };
>>
>>  #undef X
>> @@ -1808,9 +1808,9 @@ static unsigned r600_get_num_queries(struct
>> r600_common_screen *rscreen)
>>          return ARRAY_SIZE(r600_driver_query_list);
>>      else if (rscreen->info.drm_major == 3) {
>>          if (rscreen->chip_class >= VI)
>> -            return ARRAY_SIZE(r600_driver_query_list) - 3;
>> +            return ARRAY_SIZE(r600_driver_query_list);
>>          else
>> -            return ARRAY_SIZE(r600_driver_query_list) - 10;
>> +            return ARRAY_SIZE(r600_driver_query_list) - 7;
>>      }
>>      else
>>          return ARRAY_SIZE(r600_driver_query_list) - 25;
>> diff --git a/src/gallium/winsys/amdgpu/drm/amdgpu_winsys.c
>> b/src/gallium/winsys/amdgpu/drm/amdgpu_winsys.c
>> index c3dfda53f0..d99df9e941 100644
>> --- a/src/gallium/winsys/amdgpu/drm/amdgpu_winsys.c
>> +++ b/src/gallium/winsys/amdgpu/drm/amdgpu_winsys.c
>> @@ -63,6 +63,18 @@
>>  #define AMDGPU_INFO_NUM_EVICTIONS        0x18
>>  #endif
>>
>> +#ifndef AMDGPU_INFO_CURRENT_GPU_SCLK
>> +#define AMDGPU_INFO_CURRENT_GPU_SCLK   0x1c
>> +#endif
>> +
>> +#ifndef AMDGPU_INFO_CURRENT_GPU_MCLK
>> +#define AMDGPU_INFO_CURRENT_GPU_MCLK   0x1d
>> +#endif
>> +
>> +#ifndef AMDGPU_INFO_CURRENT_GPU_TEMP
>> +#define AMDGPU_INFO_CURRENT_GPU_TEMP   0x1e
>> +#endif
>> +
>>  static struct util_hash_table *dev_tab = NULL;
>>  pipe_static_mutex(dev_tab_mutex);
>>
>> @@ -459,9 +471,14 @@ static uint64_t amdgpu_query_value(struct
>> radeon_winsys *rws,
>>        amdgpu_query_heap_info(ws->dev, AMDGPU_GEM_DOMAIN_GTT, 0, &heap);
>>        return heap.heap_usage;
>>     case RADEON_GPU_TEMPERATURE:
>> +      amdgpu_query_info(ws->dev, AMDGPU_INFO_CURRENT_GPU_TEMP, 4,
>> &retval);
>> +      return retval;
>>     case RADEON_CURRENT_SCLK:
>> +      amdgpu_query_info(ws->dev, AMDGPU_INFO_CURRENT_GPU_SCLK, 4,
>> &retval);
>> +      return retval;
>>     case RADEON_CURRENT_MCLK:
>> -      return 0;
>> +      amdgpu_query_info(ws->dev, AMDGPU_INFO_CURRENT_GPU_MCLK, 4,
>> &retval);
>> +      return retval;
>
> I think these should be guarded with a DRM (kernel) version check. Also,
> what Emil said.

This patch should be ignored. The kernel interface has been updated 
in-between. I have patches locally which bumps libdrm version for AMDGPU 
and don't use that.

>
> Thanks,
> Nicolai
>
>>     case RADEON_GPU_RESET_COUNTER:
>>        assert(0);
>>        return 0;
>>
>


More information about the mesa-dev mailing list