Skip to content

Commit a48ce79

Browse files
authored
Merge pull request #387 from larunbe/utilisation-rate-use-engine-count
Use fdinfo's engine count when refreshing utilisation rate
2 parents 1589b63 + 54e301a commit a48ce79

File tree

3 files changed

+14
-3
lines changed

3 files changed

+14
-3
lines changed

include/nvtop/extract_gpuinfo_common.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ enum gpuinfo_static_info_valid {
6060
gpuinfo_n_shared_cores_valid,
6161
gpuinfo_l2cache_size_valid,
6262
gpuinfo_n_exec_engines_valid,
63+
gpuinfo_engine_count_valid,
6364
gpuinfo_static_info_count,
6465
};
6566

@@ -74,6 +75,7 @@ struct gpuinfo_static_info {
7475
unsigned n_shared_cores;
7576
unsigned l2cache_size;
7677
unsigned n_exec_engines;
78+
unsigned engine_count;
7779
bool integrated_graphics;
7880
bool encode_decode_shared;
7981
unsigned char valid[(gpuinfo_static_info_count + CHAR_BIT - 1) / CHAR_BIT];

src/extract_gpuinfo.c

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -340,6 +340,7 @@ void gpuinfo_refresh_utilisation_rate(struct gpu_info *gpu_info) {
340340
unsigned int utilisation_rate;
341341
uint64_t max_freq_hz;
342342
double avg_delta_secs;
343+
unsigned int ec;
343344

344345
for (unsigned processIdx = 0; processIdx < gpu_info->processes_count; ++processIdx) {
345346
struct gpu_process *process_info = &gpu_info->processes[processIdx];
@@ -351,9 +352,14 @@ void gpuinfo_refresh_utilisation_rate(struct gpu_info *gpu_info) {
351352
if (!gfx_total_process_cycles)
352353
return;
353354

355+
if (IS_VALID(gpuinfo_engine_count_valid, gpu_info->static_info.valid))
356+
ec = gpu_info->static_info.engine_count;
357+
else
358+
ec = 1;
359+
354360
avg_delta_secs = ((double)total_delta / gpu_info->processes_count) / 1000000000.0;
355361
max_freq_hz = gpu_info->dynamic_info.gpu_clock_speed_max * 1000000;
356-
utilisation_rate = (unsigned int)((((double)gfx_total_process_cycles) / (((double)max_freq_hz) * avg_delta_secs * 2)) * 100);
362+
utilisation_rate = (unsigned int)((((double)gfx_total_process_cycles) / (((double)max_freq_hz) * avg_delta_secs * ec)) * 100);
357363
utilisation_rate = utilisation_rate > 100 ? 100 : utilisation_rate;
358364

359365
SET_GPUINFO_DYNAMIC(&gpu_info->dynamic_info, gpu_util_rate, utilisation_rate);

src/extract_gpuinfo_mali_common.c

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -456,6 +456,7 @@ bool mali_common_parse_drm_fdinfo(struct gpu_info *info, FILE *fdinfo_file,
456456
check_fdinfo_keys match_keys,
457457
struct fdinfo_data *fid)
458458
{
459+
struct gpuinfo_static_info *static_info = &info->static_info;
459460
static char *line = NULL;
460461
static size_t line_buf_size = 0;
461462
uint64_t total_time = 0;
@@ -529,8 +530,10 @@ bool mali_common_parse_drm_fdinfo(struct gpu_info *info, FILE *fdinfo_file,
529530
}
530531
}
531532

532-
if (fid->engine_count)
533-
SET_GPUINFO_PROCESS(process_info, gfx_engine_used, total_time);
533+
if (fid->engine_count) {
534+
SET_GPUINFO_PROCESS(process_info, gfx_engine_used, total_time);
535+
SET_GPUINFO_STATIC(static_info, engine_count, fid->engine_count);
536+
}
534537

535538
if (!client_id_set)
536539
return false;

0 commit comments

Comments
 (0)