Add Idle view in Nanos6

This commit is contained in:
Rodrigo Arias 2023-02-28 10:08:30 +01:00 committed by Rodrigo Arias Mallo
parent f848ddb37f
commit a4ce0e2a1e
7 changed files with 115 additions and 3 deletions

42
cfg/cpu/nanos6/idle.cfg Normal file
View File

@ -0,0 +1,42 @@
#ParaverCFG
ConfigFile.Version: 3.4
ConfigFile.NumWindows: 1
################################################################################
< NEW DISPLAYING WINDOW CPU: Nanos6 idle state of the RUNNING thread >
################################################################################
window_name CPU: Nanos6 idle state of the RUNNING thread
window_type single
window_id 1
window_position_x 0
window_position_y 0
window_width 600
window_height 150
window_comm_lines_enabled false
window_flags_enabled false
window_noncolor_mode true
window_logical_filtered true
window_physical_filtered false
window_comm_fromto true
window_comm_tagsize true
window_comm_typeval true
window_units Microseconds
window_maximum_y 1000.0
window_minimum_y 1.0
window_compute_y_max true
window_level thread
window_scale_relative 1.000000000000
window_end_time_relative 1.000000000000
window_object appl { 1, { All } }
window_begin_time_relative 0.000000000000
window_open true
window_drawmode draw_randnotzero
window_drawmode_rows draw_randnotzero
window_pixel_size 1
window_labels_to_draw 1
window_selected_functions { 14, { {cpu, Active Thd}, {appl, Adding}, {task, Adding}, {thread, Last Evt Val}, {node, Adding}, {system, Adding}, {workload, Adding}, {from_obj, All}, {to_obj, All}, {tag_msg, All}, {size_msg, All}, {bw_msg, All}, {evt_type, =}, {evt_value, All} } }
window_compose_functions { 9, { {compose_cpu, As Is}, {compose_appl, As Is}, {compose_task, As Is}, {compose_thread, As Is}, {compose_node, As Is}, {compose_system, As Is}, {compose_workload, As Is}, {topcompose1, As Is}, {topcompose2, As Is} } }
window_filter_module evt_type 1 40
window_filter_module evt_type_label 1 "CPU: Nanos6 idle state of the RUNNING thread"

View File

@ -0,0 +1,42 @@
#ParaverCFG
ConfigFile.Version: 3.4
ConfigFile.NumWindows: 1
################################################################################
< NEW DISPLAYING WINDOW Thread: Nanos6 idle state >
################################################################################
window_name Thread: Nanos6 idle state
window_type single
window_id 1
window_position_x 0
window_position_y 0
window_width 600
window_height 150
window_comm_lines_enabled false
window_flags_enabled false
window_noncolor_mode true
window_logical_filtered true
window_physical_filtered false
window_comm_fromto true
window_comm_tagsize true
window_comm_typeval true
window_units Microseconds
window_maximum_y 1000.0
window_minimum_y 1.0
window_compute_y_max true
window_level thread
window_scale_relative 1.000000000000
window_end_time_relative 1.000000000000
window_object appl { 1, { All } }
window_begin_time_relative 0.000000000000
window_open true
window_drawmode draw_randnotzero
window_drawmode_rows draw_randnotzero
window_pixel_size 1
window_labels_to_draw 1
window_selected_functions { 14, { {cpu, Active Thd}, {appl, Adding}, {task, Adding}, {thread, Last Evt Val}, {node, Adding}, {system, Adding}, {workload, Adding}, {from_obj, All}, {to_obj, All}, {tag_msg, All}, {size_msg, All}, {bw_msg, All}, {evt_type, =}, {evt_value, All} } }
window_compose_functions { 9, { {compose_cpu, As Is}, {compose_appl, As Is}, {compose_task, As Is}, {compose_thread, As Is}, {compose_node, As Is}, {compose_system, As Is}, {compose_workload, As Is}, {topcompose1, As Is}, {topcompose2, As Is} } }
window_filter_module evt_type 1 40
window_filter_module evt_type_label 1 "Thread: Nanos6 idle state"

View File

@ -76,6 +76,13 @@ This view shows the type of each thread:
- External: used for external threads that attach to Nanos6 (currently
there are not in use).
## Idle view
This view shows the idle state of the worker thread. A worker becomes idle when
it has nothing to do. In particular, when attempting to get a task in the
DelegationLock, after the first iteration the worker is considered idle.
Similarly, when a worker serves tasks, all the time is not moving tasks from the
queues is considered idle too.
## Subsystem view

View File

@ -24,6 +24,7 @@ enum emu_prv_types {
PRV_NANOS6_SUBSYSTEM = 37,
PRV_NANOS6_RANK = 38,
PRV_NANOS6_THREAD = 39,
PRV_NANOS6_IDLE = 40,
PRV_KERNEL_CS = 45,
PRV_RESERVED = 100,
};

View File

@ -36,6 +36,8 @@ static const int ss_table[256][256][3] = {
['r'] = { CHSS, PUSH, ST_RESUME },
['R'] = { CHSS, POP, ST_RESUME },
['*'] = { CHSS, IGN, -1 },
['i'] = { CH_IDLE, PUSH, ST_WORKER_IDLE },
['I'] = { CH_IDLE, POP, ST_WORKER_IDLE },
},
['P'] = { /* TODO: Ignore progress events for now */
['r'] = { CHSS, IGN, -1 },

View File

@ -17,6 +17,7 @@ enum nanos6_chan {
CH_SUBSYSTEM,
CH_RANK,
CH_THREAD,
CH_IDLE,
CH_MAX,
};
@ -60,6 +61,10 @@ enum nanos6_thread_type {
ST_TH_EXTERNAL = 4,
};
enum nanos6_worker_idle {
ST_WORKER_IDLE = 1,
};
struct nanos6_thread {
struct model_thread m;
struct task_stack task_stack;

View File

@ -47,11 +47,13 @@ static const char *chan_name[CH_MAX] = {
[CH_SUBSYSTEM] = "subsystem",
[CH_RANK] = "rank",
[CH_THREAD] = "thread_type",
[CH_IDLE] = "idle",
};
static const int chan_stack[CH_MAX] = {
[CH_SUBSYSTEM] = 1,
[CH_THREAD] = 1,
[CH_IDLE] = 1,
};
static const int chan_dup[CH_MAX] = {
@ -68,6 +70,7 @@ static const int pvt_type[] = {
[CH_SUBSYSTEM] = PRV_NANOS6_SUBSYSTEM,
[CH_RANK] = PRV_NANOS6_RANK,
[CH_THREAD] = PRV_NANOS6_THREAD,
[CH_IDLE] = PRV_NANOS6_IDLE,
};
static const char *pcf_prefix[CH_MAX] = {
@ -76,6 +79,7 @@ static const char *pcf_prefix[CH_MAX] = {
[CH_SUBSYSTEM] = "Nanos6 subsystem",
[CH_RANK] = "Nanos6 task MPI rank",
[CH_THREAD] = "Nanos6 thread type",
[CH_IDLE] = "Nanos6 idle state",
};
static const struct pcf_value_label nanos6_ss_values[] = {
@ -119,9 +123,15 @@ static const struct pcf_value_label nanos6_thread_type[] = {
{ -1, NULL },
};
static const struct pcf_value_label *pcf_labels[CH_MAX] = {
[CH_SUBSYSTEM] = nanos6_ss_values,
[CH_THREAD] = nanos6_thread_type,
static const struct pcf_value_label nanos6_worker_idle[] = {
{ ST_WORKER_IDLE, "Idle" },
{ -1, NULL },
};
static const struct pcf_value_label (*pcf_labels[CH_MAX])[] = {
[CH_SUBSYSTEM] = &nanos6_ss_values,
[CH_THREAD] = &nanos6_thread_type,
[CH_IDLE] = &nanos6_worker_idle,
};
static const long prv_flags[CH_MAX] = {
@ -130,6 +140,7 @@ static const long prv_flags[CH_MAX] = {
[CH_SUBSYSTEM] = PRV_SKIPDUP,
[CH_RANK] = PRV_EMITDUP, /* Switch to task of same rank */
[CH_THREAD] = PRV_SKIPDUP,
[CH_IDLE] = PRV_SKIPDUP,
};
static const struct model_pvt_spec pvt_spec = {
@ -147,6 +158,7 @@ static const int th_track[CH_MAX] = {
[CH_SUBSYSTEM] = TRACK_TH_ACT,
[CH_RANK] = TRACK_TH_RUN,
[CH_THREAD] = TRACK_TH_ANY,
[CH_IDLE] = TRACK_TH_ANY,
};
static const int cpu_track[CH_MAX] = {
@ -155,6 +167,7 @@ static const int cpu_track[CH_MAX] = {
[CH_SUBSYSTEM] = TRACK_TH_RUN,
[CH_RANK] = TRACK_TH_RUN,
[CH_THREAD] = TRACK_TH_RUN,
[CH_IDLE] = TRACK_TH_RUN,
};
/* ----------------- chan_spec ------------------ */