X-Git-Url: http://git.lttng.org/?a=blobdiff_plain;f=lttv%2Flttv%2Fsync%2Fevent_analysis_linreg.c;h=2ceecf3e13eed80a850664e92b06f92ed0d49827;hb=fafb0a2998296c564cbc26c2c0fa5142b181b332;hp=41a32aeb892e89f46fb659c0b7f13d5faeb946ac;hpb=08365995afd45ea5f6f62f5d8fbc90961de5eacf;p=lttv.git diff --git a/lttv/lttv/sync/event_analysis_linreg.c b/lttv/lttv/sync/event_analysis_linreg.c index 41a32aeb..2ceecf3e 100644 --- a/lttv/lttv/sync/event_analysis_linreg.c +++ b/lttv/lttv/sync/event_analysis_linreg.c @@ -32,20 +32,15 @@ #include "event_analysis_linreg.h" -#ifndef g_info -#define g_info(format...) g_log (G_LOG_DOMAIN, G_LOG_LEVEL_INFO, format) -#endif - - // Functions common to all analysis modules static void initAnalysisLinReg(SyncState* const syncState); static void destroyAnalysisLinReg(SyncState* const syncState); -static void analyzeExchangeLinReg(SyncState* const syncState, Packet* const packet); +static void analyzeExchangeLinReg(SyncState* const syncState, Exchange* const exchange); static GArray* finalizeAnalysisLinReg(SyncState* const syncState); static void printAnalysisStatsLinReg(SyncState* const syncState); -static void writeAnalysisGraphsPlotsLinReg(FILE* stream, SyncState* const - syncState, const unsigned int i, const unsigned int j); +static void writeAnalysisGraphsPlotsLinReg(SyncState* const syncState, const + unsigned int i, const unsigned int j); // Functions specific to this module static void registerAnalysisLinReg() __attribute__((constructor (102))); @@ -71,12 +66,12 @@ static AnalysisModule analysisModuleLinReg= { .name= "linreg", .initAnalysis= &initAnalysisLinReg, .destroyAnalysis= &destroyAnalysisLinReg, - .analyzePacket= NULL, .analyzeExchange= &analyzeExchangeLinReg, .finalizeAnalysis= &finalizeAnalysisLinReg, .printAnalysisStats= &printAnalysisStatsLinReg, - .writeAnalysisGraphsPlots= &writeAnalysisGraphsPlotsLinReg, - .writeAnalysisGraphsOptions= NULL, + .graphFunctions= { + .writeTraceTraceForePlots= &writeAnalysisGraphsPlotsLinReg, + } }; @@ -170,47 +165,38 @@ static void destroyAnalysisLinReg(SyncState* const syncState) /* * Perform analysis on a series of event pairs. * - * If one event pair is a packet, an exchange is composed of at least two - * packets, one in each direction. There should be a non-negative minimum - * "round trip time" (RTT) between the first and last event of the exchange. - * This RTT should be as small as possible so these packets should be closely - * related in time like a data packet and an acknowledgement packet. If the - * events analyzed are such that the minimum RTT can be zero, there's nothing - * gained in analyzing exchanges beyond what can already be figured out by - * analyzing packets. - * - * An exchange can also consist of more than two packets, in case one packet - * single handedly acknowledges many data packets. - * * Args: * syncState container for synchronization data - * packet structure containing the many events + * exchange structure containing the many events */ -static void analyzeExchangeLinReg(SyncState* const syncState, Packet* const packet) +static void analyzeExchangeLinReg(SyncState* const syncState, Exchange* const exchange) { unsigned int ni, nj; double dji, eji; double timoy; Fit* fit; - Packet* ackedPacket; + Message* ackedMessage; AnalysisDataLinReg* analysisData; g_debug("Synchronization calculation, "); g_debug("%d acked packets - using last one, ", - g_queue_get_length(packet->acks)); + g_queue_get_length(exchange->acks)); analysisData= (AnalysisDataLinReg*) syncState->analysisData; - ackedPacket= g_queue_peek_tail(packet->acks); + ackedMessage= g_queue_peek_tail(exchange->acks); // Calculate the intermediate values for the // least-squares analysis - dji= ((double) ackedPacket->inE->tsc - (double) ackedPacket->outE->tsc + - (double) packet->outE->tsc - (double) packet->inE->tsc) / 2; - eji= fabs((double) ackedPacket->inE->tsc - (double) ackedPacket->outE->tsc - - (double) packet->outE->tsc + (double) packet->inE->tsc) / 2; - timoy= ((double) ackedPacket->outE->tsc + (double) packet->inE->tsc) / 2; - ni= ackedPacket->outE->traceNum; - nj= ackedPacket->inE->traceNum; + dji= ((double) ackedMessage->inE->cpuTime - (double) ackedMessage->outE->cpuTime + + (double) exchange->message->outE->cpuTime - (double) + exchange->message->inE->cpuTime) / 2; + eji= fabs((double) ackedMessage->inE->cpuTime - (double) + ackedMessage->outE->cpuTime - (double) exchange->message->outE->cpuTime + + (double) exchange->message->inE->cpuTime) / 2; + timoy= ((double) ackedMessage->outE->cpuTime + (double) + exchange->message->inE->cpuTime) / 2; + ni= ackedMessage->outE->traceNum; + nj= ackedMessage->inE->traceNum; fit= &analysisData->fitArray[nj][ni]; fit->n++; @@ -753,13 +739,12 @@ static gint gcfGraphTraceCompare(gconstpointer a, gconstpointer b) * Write the analysis-specific graph lines in the gnuplot script. * * Args: - * stream: stream where to write the data * syncState: container for synchronization data * i: first trace number, on the x axis * j: second trace number, garanteed to be larger than i */ -void writeAnalysisGraphsPlotsLinReg(FILE* stream, SyncState* const syncState, - const unsigned int i, const unsigned int j) +void writeAnalysisGraphsPlotsLinReg(SyncState* const syncState, const unsigned + int i, const unsigned int j) { AnalysisDataLinReg* analysisData; Fit* fit; @@ -767,7 +752,7 @@ void writeAnalysisGraphsPlotsLinReg(FILE* stream, SyncState* const syncState, analysisData= (AnalysisDataLinReg*) syncState->analysisData; fit= &analysisData->fitArray[j][i]; - fprintf(stream, + fprintf(syncState->graphsStream, "\t%7g + %7g * x " "title \"Linreg conversion\" with lines " "linecolor rgb \"gray60\" linetype 1, \\\n",