WIP
This commit is contained in:
parent
c594c36387
commit
4e23d7d435
@ -38,7 +38,7 @@ 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 400
|
||||
window_filter_module evt_type 1 10
|
||||
window_filter_module evt_type_label 1 "Unknown"
|
||||
window_synchronize 1
|
||||
|
||||
@ -77,7 +77,7 @@ 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 200
|
||||
window_filter_module evt_type 1 20
|
||||
window_filter_module evt_type_label 1 "Unknown"
|
||||
window_synchronize 1
|
||||
|
||||
@ -116,7 +116,7 @@ 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 300
|
||||
window_filter_module evt_type 1 21
|
||||
window_filter_module evt_type_label 1 "Unknown"
|
||||
window_synchronize 1
|
||||
|
||||
|
283
cfg/all.cfg
Normal file
283
cfg/all.cfg
Normal file
@ -0,0 +1,283 @@
|
||||
#ParaverCFG
|
||||
ConfigFile.Version: 3.4
|
||||
ConfigFile.NumWindows: 7
|
||||
|
||||
|
||||
################################################################################
|
||||
< NEW DISPLAYING WINDOW Active PID >
|
||||
################################################################################
|
||||
window_name Active PID
|
||||
window_type single
|
||||
window_id 1
|
||||
window_position_x 0
|
||||
window_position_y 231
|
||||
window_width 956
|
||||
window_height 189
|
||||
window_comm_lines_enabled true
|
||||
window_flags_enabled true
|
||||
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 7088.000000000000
|
||||
window_minimum_y 1.000000000000
|
||||
window_compute_y_max false
|
||||
window_level thread
|
||||
window_scale_relative 1.000000000000
|
||||
window_end_time_relative 1.000000000000
|
||||
window_object appl { 1, { All } }
|
||||
window_object task { 0, 1, { All } }
|
||||
window_object thread { 0, 0, 19, { 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }
|
||||
window_begin_time_relative 0.000000000000
|
||||
window_open true
|
||||
window_drawmode draw_maximum
|
||||
window_drawmode_rows draw_maximum
|
||||
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 10
|
||||
window_filter_module evt_type_label 1 "Unknown"
|
||||
window_synchronize 1
|
||||
|
||||
################################################################################
|
||||
< NEW DISPLAYING WINDOW Active Task ID >
|
||||
################################################################################
|
||||
window_name Active Task ID
|
||||
window_type single
|
||||
window_id 2
|
||||
window_position_x 0
|
||||
window_position_y 442
|
||||
window_width 956
|
||||
window_height 190
|
||||
window_comm_lines_enabled true
|
||||
window_flags_enabled true
|
||||
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 21.000000000000
|
||||
window_minimum_y 2.000000000000
|
||||
window_compute_y_max false
|
||||
window_level thread
|
||||
window_scale_relative 1.000000000000
|
||||
window_end_time_relative 1.000000000000
|
||||
window_object appl { 1, { All } }
|
||||
window_object task { 0, 1, { All } }
|
||||
window_object thread { 0, 0, 19, { 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }
|
||||
window_begin_time_relative 0.000000000000
|
||||
window_open true
|
||||
window_drawmode draw_maximum
|
||||
window_drawmode_rows draw_maximum
|
||||
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 20
|
||||
window_filter_module evt_type_label 1 "Unknown"
|
||||
window_synchronize 1
|
||||
|
||||
################################################################################
|
||||
< NEW DISPLAYING WINDOW Active Task Type ID >
|
||||
################################################################################
|
||||
window_name Active Task Type ID
|
||||
window_type single
|
||||
window_id 3
|
||||
window_position_x 0
|
||||
window_position_y 654
|
||||
window_width 956
|
||||
window_height 190
|
||||
window_comm_lines_enabled true
|
||||
window_flags_enabled true
|
||||
window_noncolor_mode true
|
||||
window_color_mode window_in_null_gradient_mode
|
||||
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 21.000000000000
|
||||
window_minimum_y 2.000000000000
|
||||
window_compute_y_max false
|
||||
window_level thread
|
||||
window_scale_relative 1.000000000000
|
||||
window_end_time_relative 1.000000000000
|
||||
window_object appl { 1, { All } }
|
||||
window_object task { 0, 1, { All } }
|
||||
window_object thread { 0, 0, 19, { 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }
|
||||
window_begin_time_relative 0.000000000000
|
||||
window_open true
|
||||
window_drawmode draw_maximum
|
||||
window_drawmode_rows draw_maximum
|
||||
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 21
|
||||
window_filter_module evt_type_label 1 "Unknown"
|
||||
window_synchronize 1
|
||||
|
||||
################################################################################
|
||||
< NEW DISPLAYING WINDOW Number of threads running per CPU >
|
||||
################################################################################
|
||||
window_name Number of threads running per CPU
|
||||
window_type single
|
||||
window_id 4
|
||||
window_position_x 0
|
||||
window_position_y 866
|
||||
window_width 956
|
||||
window_height 190
|
||||
window_comm_lines_enabled true
|
||||
window_flags_enabled true
|
||||
window_noncolor_mode true
|
||||
window_color_mode window_in_null_gradient_mode
|
||||
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 5.000000000000
|
||||
window_minimum_y 1.000000000000
|
||||
window_compute_y_max false
|
||||
window_level thread
|
||||
window_scale_relative 1.000000000000
|
||||
window_end_time_relative 1.000000000000
|
||||
window_object appl { 1, { All } }
|
||||
window_object task { 0, 1, { All } }
|
||||
window_object thread { 0, 0, 19, { 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }
|
||||
window_begin_time_relative 0.000000000000
|
||||
window_open true
|
||||
window_drawmode draw_maximum
|
||||
window_drawmode_rows draw_maximum
|
||||
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 12
|
||||
window_filter_module evt_type_label 1 "Unknown"
|
||||
window_synchronize 1
|
||||
|
||||
################################################################################
|
||||
< NEW DISPLAYING WINDOW T:Thread State >
|
||||
################################################################################
|
||||
window_name T:Thread State
|
||||
window_type single
|
||||
window_id 5
|
||||
window_position_x 960
|
||||
window_position_y 559
|
||||
window_width 956
|
||||
window_height 497
|
||||
window_comm_lines_enabled true
|
||||
window_flags_enabled true
|
||||
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 5.000000000000
|
||||
window_minimum_y 1.000000000000
|
||||
window_compute_y_max false
|
||||
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_maximum
|
||||
window_drawmode_rows draw_maximum
|
||||
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 60
|
||||
window_filter_module evt_type_label 1 "Unknown"
|
||||
window_synchronize 1
|
||||
|
||||
################################################################################
|
||||
< NEW DISPLAYING WINDOW T:Active TID >
|
||||
################################################################################
|
||||
window_name T:Active TID
|
||||
window_type single
|
||||
window_id 6
|
||||
window_position_x 960
|
||||
window_position_y 40
|
||||
window_width 956
|
||||
window_height 497
|
||||
window_comm_lines_enabled true
|
||||
window_flags_enabled true
|
||||
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 7103.000000000000
|
||||
window_minimum_y 7086.000000000000
|
||||
window_compute_y_max false
|
||||
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_maximum
|
||||
window_drawmode_rows draw_maximum
|
||||
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 61
|
||||
window_filter_module evt_type_label 1 "Unknown"
|
||||
window_synchronize 1
|
||||
|
||||
################################################################################
|
||||
< NEW DISPLAYING WINDOW C:Thread TID >
|
||||
################################################################################
|
||||
window_name C:Thread TID
|
||||
window_type single
|
||||
window_id 7
|
||||
window_position_x 0
|
||||
window_position_y 20
|
||||
window_width 956
|
||||
window_height 189
|
||||
window_comm_lines_enabled true
|
||||
window_flags_enabled true
|
||||
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 7102.000000000000
|
||||
window_minimum_y 1.000000000000
|
||||
window_compute_y_max false
|
||||
window_level thread
|
||||
window_scale_relative 1.000000000000
|
||||
window_end_time_relative 1.000000000000
|
||||
window_object appl { 1, { All } }
|
||||
window_object task { 0, 1, { All } }
|
||||
window_object thread { 0, 0, 19, { 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }
|
||||
window_begin_time_relative 0.000000000000
|
||||
window_open true
|
||||
window_drawmode draw_maximum
|
||||
window_drawmode_rows draw_maximum
|
||||
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 11
|
||||
window_filter_module evt_type_label 1 "Unknown"
|
||||
window_synchronize 1
|
||||
|
8
emu.c
8
emu.c
@ -237,14 +237,6 @@ emu_get_thread(struct ovni_emu *emu, int tid)
|
||||
return thread;
|
||||
}
|
||||
|
||||
void
|
||||
emu_emit_prv(struct ovni_emu *emu, int type, int val)
|
||||
{
|
||||
printf("2:0:1:1:%d:%ld:%d:%d\n",
|
||||
emu->cur_thread->cpu->cpu_id + 2,
|
||||
emu->delta_time,
|
||||
type, val);
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
|
15
emu.h
15
emu.h
@ -33,6 +33,7 @@ enum nosv_task_state {
|
||||
};
|
||||
|
||||
struct ovni_ethread;
|
||||
struct ovni_eproc;
|
||||
|
||||
struct nosv_task {
|
||||
int id;
|
||||
@ -53,6 +54,12 @@ struct ovni_ethread {
|
||||
/* Emulated thread tid */
|
||||
pid_t tid;
|
||||
|
||||
int index;
|
||||
int gindex;
|
||||
|
||||
/* The process associated with this thread */
|
||||
struct ovni_eproc *proc;
|
||||
|
||||
/* Stream fd */
|
||||
int stream_fd;
|
||||
|
||||
@ -74,6 +81,8 @@ struct ovni_ethread {
|
||||
/* State of each emulated process */
|
||||
struct ovni_eproc {
|
||||
int pid;
|
||||
int index;
|
||||
int gindex;
|
||||
|
||||
/* Path of the process tracedir */
|
||||
char dir[PATH_MAX];
|
||||
@ -140,7 +149,7 @@ struct ovni_cpu {
|
||||
int index;
|
||||
|
||||
enum ovni_cpu_state state;
|
||||
enum ovni_cpu_type type;
|
||||
//enum ovni_cpu_type type;
|
||||
|
||||
size_t last_nthreads;
|
||||
|
||||
@ -171,6 +180,10 @@ struct ovni_emu {
|
||||
uint64_t lastclock;
|
||||
int64_t delta_time;
|
||||
|
||||
/* Total counters */
|
||||
int total_thread;
|
||||
int total_proc;
|
||||
|
||||
struct nosv_task *cur_task;
|
||||
};
|
||||
|
||||
|
57
emu_nosv.c
57
emu_nosv.c
@ -1,8 +1,10 @@
|
||||
#include <assert.h>
|
||||
#include "uthash.h"
|
||||
|
||||
#include "ovni.h"
|
||||
#include "ovni_trace.h"
|
||||
#include "emu.h"
|
||||
#include "uthash.h"
|
||||
#include <assert.h>
|
||||
#include "prv.h"
|
||||
|
||||
enum nosv_prv_type {
|
||||
PRV_TYPE_PROCID
|
||||
@ -235,50 +237,37 @@ hook_pre_nosv(struct ovni_emu *emu)
|
||||
/* --------------------------- emit ------------------------------- */
|
||||
|
||||
static void
|
||||
emit_task_create(struct ovni_emu *emu)
|
||||
emit_task_running(struct ovni_emu *emu, struct nosv_task *task)
|
||||
{
|
||||
//emu_emit_prv(emu, 200, emu->cur_task->id);
|
||||
prv_ev_autocpu(emu, PTC_TASK_ID, task->id + 1);
|
||||
prv_ev_autocpu(emu, PTC_TASK_TYPE_ID, task->type_id + 1);
|
||||
}
|
||||
|
||||
static void
|
||||
emit_task_execute(struct ovni_emu *emu)
|
||||
emit_task_not_running(struct ovni_emu *emu, struct nosv_task *task)
|
||||
{
|
||||
emu_emit_prv(emu, 200, emu->cur_task->id + 1);
|
||||
emu_emit_prv(emu, 300, emu->cur_task->type_id + 1);
|
||||
emu_emit_prv(emu, 300, emu->cur_task->type_id + 1);
|
||||
}
|
||||
|
||||
static void
|
||||
emit_task_pause(struct ovni_emu *emu)
|
||||
{
|
||||
emu_emit_prv(emu, 200, 0);
|
||||
emu_emit_prv(emu, 300, 0);
|
||||
}
|
||||
|
||||
static void
|
||||
emit_task_resume(struct ovni_emu *emu)
|
||||
{
|
||||
emu_emit_prv(emu, 200, emu->cur_task->id + 1);
|
||||
emu_emit_prv(emu, 300, emu->cur_task->type_id + 1);
|
||||
}
|
||||
|
||||
static void
|
||||
emit_task_end(struct ovni_emu *emu)
|
||||
{
|
||||
emu_emit_prv(emu, 200, 0);
|
||||
emu_emit_prv(emu, 300, 0);
|
||||
prv_ev_autocpu(emu, PTC_TASK_ID, 0);
|
||||
prv_ev_autocpu(emu, PTC_TASK_TYPE_ID, 0);
|
||||
}
|
||||
|
||||
static void
|
||||
emit_task(struct ovni_emu *emu)
|
||||
{
|
||||
struct nosv_task *task;
|
||||
|
||||
task = emu->cur_task;
|
||||
|
||||
switch(emu->cur_ev->header.value)
|
||||
{
|
||||
case 'c': emit_task_create(emu); break;
|
||||
case 'x': emit_task_execute(emu); break;
|
||||
case 'p': emit_task_pause(emu); break;
|
||||
case 'r': emit_task_resume(emu); break;
|
||||
case 'e': emit_task_end(emu); break;
|
||||
case 'x':
|
||||
case 'r':
|
||||
emit_task_running(emu, task);
|
||||
break;
|
||||
case 'p':
|
||||
case 'e':
|
||||
emit_task_not_running(emu, task);
|
||||
break;
|
||||
case 'c':
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
62
emu_ovni.c
62
emu_ovni.c
@ -1,5 +1,6 @@
|
||||
#include "ovni.h"
|
||||
#include "emu.h"
|
||||
#include "prv.h"
|
||||
|
||||
#include <assert.h>
|
||||
|
||||
@ -325,43 +326,60 @@ hook_pre_ovni(struct ovni_emu *emu)
|
||||
//print_threads_state(emu);
|
||||
}
|
||||
|
||||
static void
|
||||
emit_thread_state(struct ovni_emu *emu)
|
||||
{
|
||||
int row, st, tid;
|
||||
|
||||
st = emu->cur_thread->state;
|
||||
row = emu->cur_thread->gindex + 1;
|
||||
tid = emu->cur_thread->tid;
|
||||
|
||||
prv_ev_row(emu, row, PTT_THREAD_STATE, st);
|
||||
|
||||
if(st == TH_ST_RUNNING)
|
||||
prv_ev_row(emu, row, PTT_THREAD_TID, tid);
|
||||
else
|
||||
prv_ev_row(emu, row, PTT_THREAD_TID, 0);
|
||||
}
|
||||
|
||||
static void
|
||||
emit_thread_count(struct ovni_emu *emu)
|
||||
{
|
||||
int i, n, cpu = -1;
|
||||
int64_t delta_time;
|
||||
static int64_t t0 = -1;
|
||||
|
||||
if(t0 < 0)
|
||||
t0 = ovni_ev_get_clock(emu->cur_ev);
|
||||
|
||||
delta_time = ovni_ev_get_clock(emu->cur_ev) - t0;
|
||||
int i, n, row, pid, tid;
|
||||
|
||||
/* Check every CPU looking for a change in nthreads */
|
||||
for(i=0; i<emu->ncpus; i++)
|
||||
{
|
||||
if(emu->cpu[i].last_nthreads != emu->cpu[i].nthreads)
|
||||
{
|
||||
cpu = i + 1;
|
||||
/* Start at 1 */
|
||||
row = i + 1;
|
||||
n = emu->cpu[i].nthreads;
|
||||
goto emit;
|
||||
prv_ev_row(emu, row, PTC_NTHREADS, n);
|
||||
|
||||
pid = n == 1 ? emu->cpu[i].thread[0]->proc->pid : 1;
|
||||
prv_ev_row(emu, row, PTC_PROC_PID, pid);
|
||||
|
||||
tid = n == 1 ? emu->cpu[i].thread[0]->tid : 1;
|
||||
prv_ev_row(emu, row, PTC_THREAD_TID, tid);
|
||||
}
|
||||
}
|
||||
|
||||
/* Same with the virtual CPU */
|
||||
if(emu->vcpu.last_nthreads != emu->vcpu.nthreads)
|
||||
{
|
||||
cpu = 0;
|
||||
/* Place the virtual CPU after the physical CPUs */
|
||||
row = emu->ncpus + 1;
|
||||
n = emu->vcpu.nthreads;
|
||||
goto emit;
|
||||
prv_ev_row(emu, row, PTC_NTHREADS, n);
|
||||
|
||||
pid = n == 1 ? emu->vcpu.thread[0]->proc->pid : 1;
|
||||
prv_ev_row(emu, row, PTC_PROC_PID, pid);
|
||||
|
||||
tid = n == 1 ? emu->vcpu.thread[0]->tid : 1;
|
||||
prv_ev_row(emu, row, PTC_THREAD_TID, tid);
|
||||
}
|
||||
|
||||
return;
|
||||
|
||||
emit:
|
||||
|
||||
printf("2:0:1:1:%d:%ld:100:%d\n",
|
||||
cpu+1, delta_time, n);
|
||||
}
|
||||
|
||||
static void
|
||||
@ -370,7 +388,7 @@ emit_current_pid(struct ovni_emu *emu)
|
||||
if(emu->cur_thread->cpu == NULL)
|
||||
return;
|
||||
|
||||
emu_emit_prv(emu, 400, emu->cur_proc->pid);
|
||||
prv_ev_autocpu(emu, PTC_PROC_PID, emu->cur_proc->pid);
|
||||
}
|
||||
|
||||
void
|
||||
@ -379,10 +397,12 @@ hook_emit_ovni(struct ovni_emu *emu)
|
||||
switch(emu->cur_ev->header.class)
|
||||
{
|
||||
case 'H':
|
||||
emit_thread_state(emu);
|
||||
/* falltrough */
|
||||
case 'A':
|
||||
case 'C':
|
||||
emit_thread_count(emu);
|
||||
emit_current_pid(emu);
|
||||
//emit_current_pid(emu);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
28
ovni.c
28
ovni.c
@ -470,9 +470,15 @@ find_dir_prefix(struct dirent *dirent, const char *prefix, int *num)
|
||||
}
|
||||
|
||||
static int
|
||||
load_thread(struct ovni_ethread *thread, int tid, char *filepath)
|
||||
load_thread(struct ovni_ethread *thread, struct ovni_eproc *proc, int index, int tid, char *filepath)
|
||||
{
|
||||
static int total_threads = 0;
|
||||
|
||||
thread->tid = tid;
|
||||
thread->index = index;
|
||||
thread->gindex = total_threads++;
|
||||
thread->state = TH_ST_UNKNOWN;
|
||||
thread->proc = proc;
|
||||
thread->stream_fd = open(filepath, O_RDONLY);
|
||||
|
||||
if(thread->stream_fd == -1)
|
||||
@ -480,14 +486,14 @@ load_thread(struct ovni_ethread *thread, int tid, char *filepath)
|
||||
perror("open");
|
||||
return -1;
|
||||
}
|
||||
|
||||
thread->state = TH_ST_UNKNOWN;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
load_proc(struct ovni_eproc *proc, int pid, char *procdir)
|
||||
load_proc(struct ovni_eproc *proc, int index, int pid, char *procdir)
|
||||
{
|
||||
static int total_procs = 0;
|
||||
|
||||
struct dirent *dirent;
|
||||
DIR *dir;
|
||||
char path[PATH_MAX];
|
||||
@ -495,6 +501,8 @@ load_proc(struct ovni_eproc *proc, int pid, char *procdir)
|
||||
int tid;
|
||||
|
||||
proc->pid = pid;
|
||||
proc->index = index;
|
||||
proc->gindex = total_procs++;
|
||||
|
||||
if((dir = opendir(procdir)) == NULL)
|
||||
{
|
||||
@ -520,10 +528,12 @@ load_proc(struct ovni_eproc *proc, int pid, char *procdir)
|
||||
abort();
|
||||
}
|
||||
|
||||
thread = &proc->thread[proc->nthreads++];
|
||||
thread = &proc->thread[proc->nthreads];
|
||||
|
||||
if(load_thread(thread, tid, path) != 0)
|
||||
if(load_thread(thread, proc, proc->nthreads, tid, path) != 0)
|
||||
return -1;
|
||||
|
||||
proc->nthreads++;
|
||||
}
|
||||
|
||||
closedir(dir);
|
||||
@ -566,10 +576,12 @@ load_loom(struct ovni_loom *loom, int loomid, char *loomdir)
|
||||
abort();
|
||||
}
|
||||
|
||||
proc = &loom->proc[loom->nprocs++];
|
||||
proc = &loom->proc[loom->nprocs];
|
||||
|
||||
if(load_proc(proc, pid, path) != 0)
|
||||
if(load_proc(proc, loom->nprocs, pid, path) != 0)
|
||||
return -1;
|
||||
|
||||
loom->nprocs++;
|
||||
}
|
||||
|
||||
closedir(dir);
|
||||
|
4
ovni.h
4
ovni.h
@ -13,8 +13,8 @@
|
||||
#define OVNI_MAX_LOOM 4
|
||||
#define OVNI_TRACEDIR "ovni"
|
||||
|
||||
/* Reserved buffer for event allocation */
|
||||
#define OVNI_MAX_EV_BUF (16 * 1024LL * 1024LL * 1024LL)
|
||||
/* Reserved buffer for event allocation per thread */
|
||||
#define OVNI_MAX_EV_BUF (2 * 1024LL * 1024LL) /* 2 MiB */
|
||||
|
||||
/* ----------------------- common ------------------------ */
|
||||
|
||||
|
32
prv.c
Normal file
32
prv.c
Normal file
@ -0,0 +1,32 @@
|
||||
#include <stdio.h>
|
||||
#include <assert.h>
|
||||
|
||||
#include "ovni.h"
|
||||
#include "emu.h"
|
||||
|
||||
void
|
||||
prv_ev_row(struct ovni_emu *emu, int row, int type, int val)
|
||||
{
|
||||
printf("2:0:1:1:%d:%ld:%d:%d\n",
|
||||
row, emu->delta_time, type, val);
|
||||
}
|
||||
|
||||
void
|
||||
prv_ev_autocpu(struct ovni_emu *emu, int type, int val)
|
||||
{
|
||||
int row;
|
||||
struct ovni_cpu *cpu;
|
||||
|
||||
assert(emu->cur_thread);
|
||||
|
||||
cpu = emu->cur_thread->cpu;
|
||||
|
||||
assert(cpu);
|
||||
assert(cpu->index >= 0);
|
||||
assert(cpu->cpu_id >= 0);
|
||||
|
||||
/* Begin at 1 */
|
||||
row = cpu->index + 1;
|
||||
|
||||
prv_ev_row(emu, row, type, val);
|
||||
}
|
24
prv.h
Normal file
24
prv.h
Normal file
@ -0,0 +1,24 @@
|
||||
#ifndef OVNI_PRV_H
|
||||
#define OVNI_PRV_H
|
||||
|
||||
/* All PRV event types */
|
||||
enum prv_type {
|
||||
/* Rows are CPUs */
|
||||
PTC_PROC_PID = 10,
|
||||
PTC_THREAD_TID = 11,
|
||||
PTC_NTHREADS = 12,
|
||||
PTC_TASK_ID = 20,
|
||||
PTC_TASK_TYPE_ID = 21,
|
||||
|
||||
/* Rows are threads */
|
||||
PTT_THREAD_STATE = 60,
|
||||
PTT_THREAD_TID = 61,
|
||||
};
|
||||
|
||||
void
|
||||
prv_ev_autocpu(struct ovni_emu *emu, int type, int val);
|
||||
|
||||
void
|
||||
prv_ev_row(struct ovni_emu *emu, int row, int type, int val);
|
||||
|
||||
#endif /* OVNI_PRV_H */
|
Loading…
Reference in New Issue
Block a user