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…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Rodrigo
						Rodrigo