summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMaxime Schmitt <maxime.schmitt91@gmail.com>2024-02-25 15:01:30 +0100
committerMaxime Schmitt <maxime.schmitt91@gmail.com>2024-02-25 21:29:01 +0100
commit4989f313284fbbe6e470c5bfb142acca770176b0 (patch)
tree556269f7d4ee34c60350a6e57bb4f9baa793344c
parentf86b74b3aac4e1b8c3d0ab856327f5b59e6d8f5a (diff)
Video encode/decode shared by static instance
Fixes #232
-rw-r--r--include/nvtop/extract_gpuinfo_common.h4
-rw-r--r--src/extract_gpuinfo_amdgpu.c3
-rw-r--r--src/extract_gpuinfo_apple.m1
-rw-r--r--src/extract_gpuinfo_ascend.c2
-rw-r--r--src/extract_gpuinfo_intel.c2
-rw-r--r--src/extract_gpuinfo_mali_common.c1
-rw-r--r--src/extract_gpuinfo_msm.c2
-rw-r--r--src/extract_gpuinfo_nvidia.c4
-rw-r--r--src/extract_gpuinfo_panfrost.c1
-rw-r--r--src/extract_gpuinfo_panthor.c1
-rw-r--r--src/interface.c20
11 files changed, 26 insertions, 15 deletions
diff --git a/include/nvtop/extract_gpuinfo_common.h b/include/nvtop/extract_gpuinfo_common.h
index 9b89d9c..917f33d 100644
--- a/include/nvtop/extract_gpuinfo_common.h
+++ b/include/nvtop/extract_gpuinfo_common.h
@@ -76,6 +76,7 @@ struct gpuinfo_static_info {
unsigned l2cache_size;
unsigned n_exec_engines;
bool integrated_graphics;
+ bool encode_decode_shared;
unsigned char valid[(gpuinfo_static_info_count + CHAR_BIT - 1) / CHAR_BIT];
};
@@ -102,6 +103,7 @@ enum gpuinfo_dynamic_info_valid {
gpuinfo_gpu_temp_valid,
gpuinfo_power_draw_valid,
gpuinfo_power_draw_max_valid,
+ gpuinfo_multi_instance_mode_valid,
gpuinfo_dynamic_info_count,
};
@@ -125,7 +127,7 @@ struct gpuinfo_dynamic_info {
unsigned int gpu_temp; // GPU temperature °celsius
unsigned int power_draw; // Power usage in milliwatts
unsigned int power_draw_max; // Max power usage in milliwatts
- bool encode_decode_shared; // True if encode and decode is shared (Intel)
+ bool multi_instance_mode; // True if the GPU is in multi-instance mode
unsigned char valid[(gpuinfo_dynamic_info_count + CHAR_BIT - 1) / CHAR_BIT];
};
diff --git a/src/extract_gpuinfo_amdgpu.c b/src/extract_gpuinfo_amdgpu.c
index 93095b9..41d447b 100644
--- a/src/extract_gpuinfo_amdgpu.c
+++ b/src/extract_gpuinfo_amdgpu.c
@@ -513,6 +513,7 @@ static void gpuinfo_amdgpu_populate_static_info(struct gpu_info *_gpu_info) {
const char *name = NULL;
static_info->integrated_graphics = false;
+ static_info->encode_decode_shared = false;
RESET_ALL(static_info->valid);
if (libdrm_amdgpu_handle && _amdgpu_get_marketing_name)
@@ -585,6 +586,7 @@ static void gpuinfo_amdgpu_populate_static_info(struct gpu_info *_gpu_info) {
#ifdef AMDGPU_FAMILY_NV
case AMDGPU_FAMILY_NV:
strncpy(dst, " (Navi10)", remaining_len);
+ static_info->encode_decode_shared = true;
break;
#endif
#ifdef AMDGPU_FAMILY_VGH
@@ -646,7 +648,6 @@ static void gpuinfo_amdgpu_refresh_dynamic_info(struct gpu_info *_gpu_info) {
uint32_t out32;
RESET_ALL(dynamic_info->valid);
- dynamic_info->encode_decode_shared = false;
if (libdrm_amdgpu_handle && _amdgpu_query_gpu_info)
info_query_success = !_amdgpu_query_gpu_info(gpu_info->amdgpu_device, &info);
diff --git a/src/extract_gpuinfo_apple.m b/src/extract_gpuinfo_apple.m
index 84d8f32..8e14f7a 100644
--- a/src/extract_gpuinfo_apple.m
+++ b/src/extract_gpuinfo_apple.m
@@ -115,6 +115,7 @@ static void gpuinfo_apple_populate_static_info(struct gpu_info *_gpu_info) {
SET_VALID(gpuinfo_device_name_valid, static_info->valid);
static_info->integrated_graphics = [gpu_info->device location] == MTLDeviceLocationBuiltIn;
+ static_info->encode_decode_shared = true;
}
static void gpuinfo_apple_refresh_dynamic_info(struct gpu_info *_gpu_info) {
diff --git a/src/extract_gpuinfo_ascend.c b/src/extract_gpuinfo_ascend.c
index 58a529c..be8dc99 100644
--- a/src/extract_gpuinfo_ascend.c
+++ b/src/extract_gpuinfo_ascend.c
@@ -147,6 +147,7 @@ static void gpuinfo_ascend_populate_static_info(struct gpu_info *_gpu_info) {
struct gpu_info_ascend *gpu_info = container_of(_gpu_info, struct gpu_info_ascend, base);
struct gpuinfo_static_info *static_info = &gpu_info->base.static_info;
static_info->integrated_graphics = false;
+ static_info->encode_decode_shared = true;
RESET_ALL(static_info->valid);
int card_id, device_id;
@@ -168,7 +169,6 @@ static void gpuinfo_ascend_refresh_dynamic_info(struct gpu_info *_gpu_info) {
struct gpu_info_ascend *gpu_info = container_of(_gpu_info, struct gpu_info_ascend, base);
struct gpuinfo_dynamic_info *dynamic_info = &gpu_info->base.dynamic_info;
RESET_ALL(dynamic_info->valid);
- dynamic_info->encode_decode_shared = false;
int card_id, device_id;
_decode_card_device_id_from_pdev(_gpu_info->pdev, &card_id, &device_id);
diff --git a/src/extract_gpuinfo_intel.c b/src/extract_gpuinfo_intel.c
index f4dabc0..a120d9c 100644
--- a/src/extract_gpuinfo_intel.c
+++ b/src/extract_gpuinfo_intel.c
@@ -315,6 +315,7 @@ void gpuinfo_intel_populate_static_info(struct gpu_info *_gpu_info) {
const char *dev_name;
static_info->integrated_graphics = false;
+ static_info->encode_decode_shared = true;
RESET_ALL(static_info->valid);
if (nvtop_device_get_property_value(gpu_info->driver_device, "ID_MODEL_FROM_DATABASE", &dev_name) >= 0) {
@@ -348,7 +349,6 @@ void gpuinfo_intel_refresh_dynamic_info(struct gpu_info *_gpu_info) {
struct gpuinfo_dynamic_info *dynamic_info = &gpu_info->base.dynamic_info;
RESET_ALL(dynamic_info->valid);
- dynamic_info->encode_decode_shared = true;
nvtop_device *card_dev_copy;
const char *syspath;
diff --git a/src/extract_gpuinfo_mali_common.c b/src/extract_gpuinfo_mali_common.c
index 9521ad7..a1c5600 100644
--- a/src/extract_gpuinfo_mali_common.c
+++ b/src/extract_gpuinfo_mali_common.c
@@ -318,7 +318,6 @@ void mali_common_refresh_dynamic_info(struct gpuinfo_dynamic_info *dynamic_info,
const char *meminfo_available)
{
RESET_ALL(dynamic_info->valid);
- dynamic_info->encode_decode_shared = true;
rewind(state->meminfo_file);
fflush(state->meminfo_file);
diff --git a/src/extract_gpuinfo_msm.c b/src/extract_gpuinfo_msm.c
index 6b3bc97..f05b7fe 100644
--- a/src/extract_gpuinfo_msm.c
+++ b/src/extract_gpuinfo_msm.c
@@ -466,6 +466,7 @@ void gpuinfo_msm_populate_static_info(struct gpu_info *_gpu_info) {
struct gpuinfo_static_info *static_info = &gpu_info->base.static_info;
static_info->integrated_graphics = true;
+ static_info->encode_decode_shared = true;
RESET_ALL(static_info->valid);
uint64_t gpuid;
@@ -496,7 +497,6 @@ void gpuinfo_msm_refresh_dynamic_info(struct gpu_info *_gpu_info) {
struct gpuinfo_dynamic_info *dynamic_info = &gpu_info->base.dynamic_info;
RESET_ALL(dynamic_info->valid);
- dynamic_info->encode_decode_shared = true;
// GPU clock
uint64_t clock_val;
diff --git a/src/extract_gpuinfo_nvidia.c b/src/extract_gpuinfo_nvidia.c
index f0356ed..4bf7bae 100644
--- a/src/extract_gpuinfo_nvidia.c
+++ b/src/extract_gpuinfo_nvidia.c
@@ -1,6 +1,6 @@
/*
*
- * Copyright (C) 2021 Maxime Schmitt <maxime.schmitt91@gmail.com>
+ * Copyright (C) 2021-2024 Maxime Schmitt <maxime.schmitt91@gmail.com>
*
* This file is part of Nvtop.
*
@@ -420,6 +420,7 @@ static void gpuinfo_nvidia_populate_static_info(struct gpu_info *_gpu_info) {
nvmlDevice_t device = gpu_info->gpuhandle;
static_info->integrated_graphics = false;
+ static_info->encode_decode_shared = false;
RESET_ALL(static_info->valid);
last_nvml_return_status = nvmlDeviceGetName(device, static_info->device_name, MAX_DEVICE_NAME);
@@ -457,7 +458,6 @@ static void gpuinfo_nvidia_refresh_dynamic_info(struct gpu_info *_gpu_info) {
nvmlClockType_t getMaxClockFrom = NVML_CLOCK_GRAPHICS;
RESET_ALL(dynamic_info->valid);
- dynamic_info->encode_decode_shared = false;
// GPU current speed
// Maximum between SM and Graphical
diff --git a/src/extract_gpuinfo_panfrost.c b/src/extract_gpuinfo_panfrost.c
index 46016c7..f99c7be 100644
--- a/src/extract_gpuinfo_panfrost.c
+++ b/src/extract_gpuinfo_panfrost.c
@@ -210,6 +210,7 @@ void gpuinfo_panfrost_populate_static_info(struct gpu_info *_gpu_info) {
struct gpuinfo_static_info *static_info = &gpu_info->base.static_info;
static_info->integrated_graphics = true;
+ static_info->encode_decode_shared = true;
RESET_ALL(static_info->valid);
uint64_t gpuid;
diff --git a/src/extract_gpuinfo_panthor.c b/src/extract_gpuinfo_panthor.c
index 18abf99..0eba82b 100644
--- a/src/extract_gpuinfo_panthor.c
+++ b/src/extract_gpuinfo_panthor.c
@@ -122,6 +122,7 @@ void gpuinfo_panthor_populate_static_info(struct gpu_info *_gpu_info) {
}
static_info->integrated_graphics = true;
+ static_info->encode_decode_shared = true;
RESET_ALL(static_info->valid);
struct drm_panthor_gpu_info gpu_dev_info = {0};
diff --git a/src/interface.c b/src/interface.c
index a10114b..e7fae07 100644
--- a/src/interface.c
+++ b/src/interface.c
@@ -641,7 +641,7 @@ static void draw_devices(struct list_head *devices, struct nvtop_interface *inte
encode_decode_show_select(dev, GPUINFO_DYNAMIC_FIELD_VALID(&device->dynamic_info, encoder_rate),
GPUINFO_DYNAMIC_FIELD_VALID(&device->dynamic_info, decoder_rate),
device->dynamic_info.encoder_rate, device->dynamic_info.decoder_rate,
- interface->options.encode_decode_hiding_timer, device->dynamic_info.encode_decode_shared,
+ interface->options.encode_decode_hiding_timer, device->static_info.encode_decode_shared,
&display_encode, &display_decode);
WINDOW *gpu_util_win;
@@ -673,7 +673,7 @@ static void draw_devices(struct list_head *devices, struct nvtop_interface *inte
unsigned rate =
GPUINFO_DYNAMIC_FIELD_VALID(&device->dynamic_info, decoder_rate) ? device->dynamic_info.decoder_rate : 0;
snprintf(buff, 1024, "%u%%", rate);
- if (device->dynamic_info.encode_decode_shared)
+ if (device->static_info.encode_decode_shared)
draw_percentage_meter(decode_win, "ENC/DEC", rate, buff);
else
draw_percentage_meter(decode_win, "DEC", rate, buff);
@@ -727,7 +727,7 @@ static void draw_devices(struct list_head *devices, struct nvtop_interface *inte
mvwprintw(dev->fan_speed, 0, 0, "CPU-FAN ");
mvwchgat(dev->fan_speed, 0, 3, 5, 0, cyan_color, NULL);
} else
- mvwprintw(dev->fan_speed, 0, 0, "FAN N/A%%");
+ mvwprintw(dev->fan_speed, 0, 0, "FAN N/A ");
mvwchgat(dev->fan_speed, 0, 0, 3, 0, cyan_color, NULL);
wnoutrefresh(dev->fan_speed);
@@ -1246,24 +1246,30 @@ static void print_processes_on_screen(all_processes all_procs, struct process_wi
unsigned gpu_usage = 0;
if (GPUINFO_PROCESS_FIELD_VALID(processes[i].process, gpu_usage)) {
gpu_usage = processes[i].process->gpu_usage;
+ printed += snprintf(&process_print_buffer[printed], process_buffer_line_size - printed, "%3u%% ", gpu_usage);
+ } else {
+ printed += snprintf(&process_print_buffer[printed], process_buffer_line_size - printed, "N/A ");
}
- printed += snprintf(&process_print_buffer[printed], process_buffer_line_size - printed, "%3u%% ", gpu_usage);
}
if (process_is_field_displayed(process_enc_rate, fields_to_display)) {
unsigned encoder_rate = 0;
if (GPUINFO_PROCESS_FIELD_VALID(processes[i].process, encode_usage)) {
encoder_rate = processes[i].process->encode_usage;
+ printed += snprintf(&process_print_buffer[printed], process_buffer_line_size - printed, "%3u%% ", encoder_rate);
+ } else {
+ printed += snprintf(&process_print_buffer[printed], process_buffer_line_size - printed, "N/A ");
}
- printed += snprintf(&process_print_buffer[printed], process_buffer_line_size - printed, "%3u%% ", encoder_rate);
}
if (process_is_field_displayed(process_dec_rate, fields_to_display)) {
unsigned decode_rate = 0;
if (GPUINFO_PROCESS_FIELD_VALID(processes[i].process, decode_usage)) {
decode_rate = processes[i].process->decode_usage;
+ printed += snprintf(&process_print_buffer[printed], process_buffer_line_size - printed, "%3u%% ", decode_rate);
+ } else {
+ printed += snprintf(&process_print_buffer[printed], process_buffer_line_size - printed, "N/A ");
}
- printed += snprintf(&process_print_buffer[printed], process_buffer_line_size - printed, "%3u%% ", decode_rate);
}
if (process_is_field_displayed(process_memory, fields_to_display)) {
@@ -1277,7 +1283,7 @@ static void print_processes_on_screen(all_processes all_procs, struct process_wi
(unsigned)(processes[i].process->gpu_memory_usage / 1048576));
}
} else {
- memory[0] = '\0';
+ snprintf(memory, sizeof_process_field[process_memory], "%s", "N/A");
}
printed += snprintf(&process_print_buffer[printed], process_buffer_line_size - printed, "%*s ",
sizeof_process_field[process_memory], memory);