annotate probes.h @ 168:d7c0c0a8187a

Merged default branch
author Merten Sach <msach@mailbox.tu-berlin.de>
date Wed, 02 Nov 2011 14:59:29 +0100
parents 521c75d64cef a49f02980151
children c1784868dcea
rev   line source
Me@65 1 /*
Me@65 2 * Copyright 2009 OpenSourceStewardshipFoundation.org
Me@65 3 * Licensed under GNU General Public License version 2
Me@65 4 *
Me@65 5 * Author: seanhalle@yahoo.com
Me@65 6 *
Me@65 7 */
Me@65 8
Me@65 9 #ifndef _PROBES_H
Me@65 10 #define _PROBES_H
msach@76 11 #define _GNU_SOURCE
Me@65 12
Me@65 13 #include "VMS_primitive_data_types.h"
Me@65 14
Me@65 15 #include <sys/time.h>
Me@65 16
Me@65 17
Me@65 18 //when STATS__TURN_ON_PROBES is defined allows using probes to measure
Me@65 19 // time intervals. The probes are macros that only compile to something
Me@65 20 // when STATS__TURN_ON_PROBES is defined. The probes are saved in the
Me@65 21 // master env -- but only when this is defined.
Me@65 22 //The TSC probes use RDTSC instr, can be unreliable, Dbl uses gettimeofday
Me@65 23 #define STATS__TURN_ON_PROBES
Me@65 24 //#define STATS__USE_TSC_PROBES
Me@65 25 #define STATS__USE_DBL_PROBES
Me@65 26
Me@65 27 //typedef struct _IntervalProbe IntervalProbe; //in VMS.h
Me@65 28
Me@65 29 struct _IntervalProbe
Me@65 30 {
Me@65 31 char *nameStr;
Me@65 32 int32 probeID;
Me@65 33
Me@65 34 int32 schedChoiceWasRecorded;
Me@65 35 int32 coreNum;
Me@65 36 int32 procrID;
Me@65 37 float64 procrCreateSecs;
Me@65 38
Me@65 39 #ifdef STATS__USE_TSC_PROBES
Me@65 40 TSCount startStamp;
Me@65 41 TSCount endStamp;
Me@65 42 #else
Me@65 43 struct timeval startStamp;
Me@65 44 struct timeval endStamp;
Me@65 45 #endif
Me@65 46 float64 startSecs;
Me@65 47 float64 endSecs;
Me@65 48 float64 interval;
Me@65 49 DblHist *hist;//if NULL, then is single interval probe
Me@65 50 };
Me@65 51
Me@65 52
Me@65 53 //============================= Statistics ==================================
Me@65 54
Me@65 55 //Frequency of TS counts
Me@65 56 //TODO: change freq for each machine
Me@65 57 #define TSCOUNT_FREQ 3180000000
Me@65 58
Me@65 59 inline TSCount getTSCount();
Me@65 60
Me@65 61
Me@65 62 //======================== Probes =============================
Me@65 63 //
Me@65 64 // Use macros to allow turning probes off with a #define switch
Me@65 65 #ifdef STATS__ENABLE_PROBES
Me@65 66 int32
Me@65 67 VMS_impl__record_time_point_into_new_probe( char *nameStr,VirtProcr *animPr);
Me@65 68 #define VMS__record_time_point_into_new_probe( nameStr, animPr ) \
Me@65 69 VMS_impl__record_time_point_in_new_probe( nameStr, animPr )
Me@65 70
Me@65 71 int32
Me@65 72 VMS_ext_impl__record_time_point_into_new_probe( char *nameStr );
Me@65 73 #define VMS_ext__record_time_point_into_new_probe( nameStr ) \
Me@65 74 VMS_ext_impl__record_time_point_into_new_probe( nameStr )
Me@65 75
Me@65 76
Me@65 77 int32
Me@65 78 VMS_impl__create_single_interval_probe( char *nameStr, VirtProcr *animPr );
Me@65 79 #define VMS__create_single_interval_probe( nameStr, animPr ) \
Me@65 80 VMS_impl__create_single_interval_probe( nameStr, animPr )
Me@65 81
Me@65 82
Me@65 83 int32
Me@65 84 VMS_impl__create_histogram_probe( int32 numBins, float64 startValue,
Me@65 85 float64 binWidth, char *nameStr, VirtProcr *animPr );
Me@65 86 #define VMS__create_histogram_probe( numBins, startValue, \
Me@65 87 binWidth, nameStr, animPr ) \
Me@65 88 VMS_impl__create_histogram_probe( numBins, startValue, \
Me@65 89 binWidth, nameStr, animPr )
Me@65 90 void
Me@65 91 VMS_impl__free_probe( IntervalProbe *probe );
Me@65 92 #define VMS__free_probe( probe ) \
Me@65 93 VMS_impl__free_probe( probe )
Me@65 94
Me@65 95 void
Me@65 96 VMS_impl__index_probe_by_its_name( int32 probeID, VirtProcr *animPr );
Me@65 97 #define VMS__index_probe_by_its_name( probeID, animPr ) \
Me@65 98 VMS_impl__index_probe_by_its_name( probeID, animPr )
Me@65 99
Me@65 100 IntervalProbe *
Me@65 101 VMS_impl__get_probe_by_name( char *probeName, VirtProcr *animPr );
Me@65 102 #define VMS__get_probe_by_name( probeID, animPr ) \
Me@65 103 VMS_impl__get_probe_by_name( probeName, animPr )
Me@65 104
Me@65 105 void
Me@65 106 VMS_impl__record_sched_choice_into_probe( int32 probeID, VirtProcr *animPr );
Me@65 107 #define VMS__record_sched_choice_into_probe( probeID, animPr ) \
Me@65 108 VMS_impl__record_sched_choice_into_probe( probeID, animPr )
Me@65 109
Me@65 110 void
Me@65 111 VMS_impl__record_interval_start_in_probe( int32 probeID );
Me@65 112 #define VMS__record_interval_start_in_probe( probeID ) \
Me@65 113 VMS_impl__record_interval_start_in_probe( probeID )
Me@65 114
Me@65 115 void
Me@65 116 VMS_impl__record_interval_end_in_probe( int32 probeID );
Me@65 117 #define VMS__record_interval_end_in_probe( probeID ) \
Me@65 118 VMS_impl__record_interval_end_in_probe( probeID )
Me@65 119
Me@65 120 void
Me@65 121 VMS_impl__print_stats_of_probe( int32 probeID );
Me@65 122 #define VMS__print_stats_of_probe( probeID ) \
Me@65 123 VMS_impl__print_stats_of_probe( probeID )
Me@65 124
Me@65 125 void
Me@65 126 VMS_impl__print_stats_of_all_probes();
msach@78 127 #define VMS__print_stats_of_all_probes() \
msach@78 128 VMS_impl__print_stats_of_all_probes()
Me@65 129
Me@65 130
Me@65 131 #else
Me@65 132 int32
Me@65 133 VMS_impl__record_time_point_into_new_probe( char *nameStr,VirtProcr *animPr);
Me@65 134 #define VMS__record_time_point_into_new_probe( nameStr, animPr ) \
Me@65 135 0 /* do nothing */
Me@65 136
Me@65 137 int32
Me@65 138 VMS_ext_impl__record_time_point_into_new_probe( char *nameStr );
Me@65 139 #define VMS_ext__record_time_point_into_new_probe( nameStr ) \
Me@65 140 0 /* do nothing */
Me@65 141
Me@65 142
Me@65 143 int32
Me@65 144 VMS_impl__create_single_interval_probe( char *nameStr, VirtProcr *animPr );
Me@65 145 #define VMS__create_single_interval_probe( nameStr, animPr ) \
Me@65 146 0 /* do nothing */
Me@65 147
Me@65 148
Me@65 149 int32
Me@65 150 VMS_impl__create_histogram_probe( int32 numBins, float64 startValue,
Me@65 151 float64 binWidth, char *nameStr, VirtProcr *animPr );
Me@65 152 #define VMS__create_histogram_probe( numBins, startValue, \
Me@65 153 binWidth, nameStr, animPr ) \
Me@65 154 0 /* do nothing */
Me@65 155
Me@65 156 void
Me@65 157 VMS_impl__index_probe_by_its_name( int32 probeID, VirtProcr *animPr );
Me@65 158 #define VMS__index_probe_by_its_name( probeID, animPr ) \
Me@65 159 /* do nothing */
Me@65 160
Me@65 161 IntervalProbe *
Me@65 162 VMS_impl__get_probe_by_name( char *probeName, VirtProcr *animPr );
Me@65 163 #define VMS__get_probe_by_name( probeID, animPr ) \
Me@65 164 NULL /* do nothing */
Me@65 165
Me@65 166 void
Me@65 167 VMS_impl__record_sched_choice_into_probe( int32 probeID, VirtProcr *animPr );
Me@65 168 #define VMS__record_sched_choice_into_probe( probeID, animPr ) \
Me@65 169 /* do nothing */
Me@65 170
Me@65 171 void
Me@65 172 VMS_impl__record_interval_start_in_probe( int32 probeID );
Me@65 173 #define VMS__record_interval_start_in_probe( probeID ) \
Me@65 174 /* do nothing */
Me@65 175
Me@65 176 void
Me@65 177 VMS_impl__record_interval_end_in_probe( int32 probeID );
Me@65 178 #define VMS__record_interval_end_in_probe( probeID ) \
Me@65 179 /* do nothing */
Me@65 180
Me@65 181 inline void doNothing();
Me@65 182 void
Me@65 183 VMS_impl__print_stats_of_probe( int32 probeID );
Me@65 184 #define VMS__print_stats_of_probe( probeID ) \
Me@65 185 doNothing/* do nothing */
Me@65 186
Me@65 187 void
Me@65 188 VMS_impl__print_stats_of_all_probes();
Me@65 189 #define VMS__print_stats_of_all_probes \
Me@65 190 doNothing/* do nothing */
Me@65 191
Me@65 192 #endif /* defined STATS__ENABLE_PROBES */
Me@65 193
Me@65 194 #endif /* _PROBES_H */
Me@65 195