Skip to content

Commit f552572

Browse files
committed
Merge effective load within GPU percentage meter
1 parent c21bbd4 commit f552572

File tree

2 files changed

+28
-23
lines changed

2 files changed

+28
-23
lines changed

include/nvtop/interface_internal_common.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,6 @@ struct device_window {
6969
WINDOW *shader_cores;
7070
WINDOW *l2_cache_size;
7171
WINDOW *exec_engines;
72-
WINDOW *effective_load;
7372
bool enc_was_visible;
7473
bool dec_was_visible;
7574
nvtop_time last_decode_seen;
@@ -149,7 +148,6 @@ enum device_field {
149148
device_shadercores,
150149
device_l2features,
151150
device_execengines,
152-
device_effective_load,
153151
device_field_count,
154152
};
155153

src/interface.c

Lines changed: 28 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@
4545
static unsigned int sizeof_device_field[device_field_count] = {
4646
[device_name] = 11, [device_fan_speed] = 11, [device_temperature] = 10, [device_power] = 15,
4747
[device_clock] = 11, [device_mem_clock] = 12, [device_pcie] = 46, [device_shadercores] = 7,
48-
[device_l2features] = 11, [device_execengines] = 11, [device_effective_load] = 12,
48+
[device_l2features] = 11, [device_execengines] = 11,
4949
};
5050

5151
static unsigned int sizeof_process_field[process_field_count] = {
@@ -94,13 +94,6 @@ static void alloc_device_window(unsigned int start_row, unsigned int start_col,
9494
sizeof_device_field[device_temperature] + sizeof_device_field[device_fan_speed]);
9595
if (dwin->power_info == NULL)
9696
goto alloc_error;
97-
dwin->effective_load =
98-
newwin(1, sizeof_device_field[device_effective_load], start_row + 1,
99-
start_col + spacer * 5 + sizeof_device_field[device_clock] + sizeof_device_field[device_mem_clock] +
100-
sizeof_device_field[device_temperature] + sizeof_device_field[device_fan_speed] +
101-
sizeof_device_field[device_power]);
102-
if (dwin->effective_load == NULL)
103-
goto alloc_error;
10497

10598
// Line 3 = GPU used | MEM used | Encoder | Decoder
10699

@@ -206,7 +199,6 @@ static void free_device_windows(struct device_window *dwin) {
206199
delwin(dwin->gpu_clock_info);
207200
delwin(dwin->mem_clock_info);
208201
delwin(dwin->power_info);
209-
delwin(dwin->effective_load);
210202
delwin(dwin->temperature);
211203
delwin(dwin->fan_speed);
212204
delwin(dwin->pcie_info);
@@ -353,7 +345,7 @@ static unsigned device_length(void) {
353345
return max(sizeof_device_field[device_name] + sizeof_device_field[device_pcie] + 1,
354346
sizeof_device_field[device_clock] + sizeof_device_field[device_mem_clock] +
355347
sizeof_device_field[device_temperature] + sizeof_device_field[device_fan_speed] +
356-
sizeof_device_field[device_power] + sizeof_device_field[device_effective_load] + 5);
348+
sizeof_device_field[device_power] + 5);
357349
}
358350

359351
static pid_t nvtop_pid;
@@ -501,6 +493,23 @@ static void draw_percentage_meter(WINDOW *win, const char *prelude, unsigned int
501493
wnoutrefresh(win);
502494
}
503495

496+
// Draw percentage with a yellow highlight percentage (yellow percentage <= new_percentage)
497+
static void draw_percentage_meter_with_yellow_highlight(WINDOW *win, const char *prelude, unsigned int new_percentage,
498+
unsigned int yellow_percentage,
499+
const char inside_braces_right[1024]) {
500+
draw_percentage_meter(win, prelude, new_percentage, inside_braces_right);
501+
if (yellow_percentage > new_percentage)
502+
yellow_percentage = new_percentage;
503+
int rows, cols;
504+
getmaxyx(win, rows, cols);
505+
(void)rows;
506+
size_t size_prelude = strlen(prelude);
507+
int between_sbraces = cols - size_prelude - 2;
508+
float usage = round((float)between_sbraces * yellow_percentage / 100.f);
509+
mvwchgat(win, 0, size_prelude + 1, (int)usage, 0, yellow_color, NULL);
510+
wnoutrefresh(win);
511+
}
512+
504513
static const char *memory_prefix[] = {" B", "Ki", "Mi", "Gi", "Ti", "Pi"};
505514

506515
static void draw_temp_color(WINDOW *win, unsigned int temp, unsigned int temp_slowdown, bool celsius) {
@@ -693,8 +702,15 @@ static void draw_devices(struct list_head *devices, struct nvtop_interface *inte
693702
draw_percentage_meter(decode_win, "DEC", rate, buff);
694703
}
695704
if (GPUINFO_DYNAMIC_FIELD_VALID(&device->dynamic_info, gpu_util_rate)) {
696-
snprintf(buff, 1024, "%u%%", device->dynamic_info.gpu_util_rate);
697-
draw_percentage_meter(gpu_util_win, "GPU", device->dynamic_info.gpu_util_rate, buff);
705+
if (GPUINFO_DYNAMIC_FIELD_VALID(&device->dynamic_info, effective_load_rate)) {
706+
snprintf(buff, 1024, "%u%%(eff %u%%)", device->dynamic_info.gpu_util_rate,
707+
device->dynamic_info.effective_load_rate);
708+
draw_percentage_meter_with_yellow_highlight(gpu_util_win, "GPU", device->dynamic_info.gpu_util_rate,
709+
device->dynamic_info.effective_load_rate, buff);
710+
} else {
711+
snprintf(buff, 1024, "%u%%", device->dynamic_info.gpu_util_rate);
712+
draw_percentage_meter(gpu_util_win, "GPU", device->dynamic_info.gpu_util_rate, buff);
713+
}
698714
} else {
699715
snprintf(buff, 1024, "N/A");
700716
draw_percentage_meter(gpu_util_win, "GPU", 0, buff);
@@ -797,15 +813,6 @@ static void draw_devices(struct list_head *devices, struct nvtop_interface *inte
797813
mvwchgat(dev->power_info, 0, 0, 3, 0, cyan_color, NULL);
798814
wnoutrefresh(dev->power_info);
799815

800-
// EFFECTIVE LOAD
801-
werase(dev->effective_load);
802-
if (GPUINFO_DYNAMIC_FIELD_VALID(&device->dynamic_info, effective_load_rate))
803-
mvwprintw(dev->effective_load, 0, 0, "Eff. %3u%%", device->dynamic_info.effective_load_rate);
804-
else
805-
mvwprintw(dev->effective_load, 0, 0, "Eff. N/A%%");
806-
mvwchgat(dev->effective_load, 0, 0, 4, 0, cyan_color, NULL);
807-
wnoutrefresh(dev->effective_load);
808-
809816
// PICe throughput
810817
werase(dev->pcie_info);
811818
if (device->static_info.integrated_graphics) {

0 commit comments

Comments
 (0)