85445905b5703e3c82ee26bd95c2f8bad391e4ec
[IRC.git] / Robust / src / Runtime / DSTM / interface / signal.c
1 #include "dstm.h"
2 #include "addPrefetchEnhance.h"
3 #include <signal.h>
4 #include <fcntl.h>
5
6 extern int numTransAbort;
7 extern int numTransCommit;
8 extern int nchashSearch;
9 extern int nmhashSearch;
10 extern int nprehashSearch;
11 extern int nRemoteSend;
12 extern int nSoftAbort;
13 extern int bytesSent;
14 extern int bytesRecv;
15 extern int totalObjSize;
16 extern unsigned int myIpAddr;
17 extern int getResponse;
18 extern int sendRemoteReq;
19
20 void handle();
21 extern pfcstats_t *evalPrefetch;
22
23 /*
24 void transStatsHandler(int sig, siginfo_t* info, void *context) {
25 #ifdef TRANSSTATS
26   FILE *fp;
27   if ((fp = fopen("/tmp/client_stats.txt", "a+")) == NULL) {
28     exit(-1);
29   }
30   fprintf(fp, "******  Transaction Stats   ******\n");
31   fprintf(fp, "myIpAddr = %x\n", myIpAddr);
32   fprintf(fp, "numTransAbort = %d\n", numTransAbort);
33   fprintf(fp, "numTransCommit = %d\n", numTransCommit);
34   fprintf(fp, "nchashSearch = %d\n", nchashSearch);
35   fprintf(fp, "nmhashSearch = %d\n", nmhashSearch);
36   fprintf(fp, "nprehashSearch = %d\n", nprehashSearch);
37   fprintf(fp, "nRemoteReadSend = %d\n", nRemoteSend);
38   fprintf(fp, "nSoftAbort = %d\n", nSoftAbort);
39   fprintf(fp, "bytesSent = %d\n", bytesSent);
40   fprintf(fp, "bytesRecv = %d\n", bytesRecv);
41   fprintf(fp, "totalObjSize= %d\n", totalObjSize);
42   fprintf(fp, "**********************************\n");
43   fflush(fp);
44   fclose(fp);
45   exit(0);
46 #endif
47 }
48 */
49
50 void transStatsHandler(int sig, siginfo_t* info, void *context) {
51 #ifdef TRANSSTATS
52   printf("******  Transaction Stats   ******\n");
53   printf("myIpAddr = %x\n", myIpAddr);
54   printf("numTransCommit = %d\n", numTransCommit);
55   printf("numTransAbort = %d\n", numTransAbort);
56   printf("nchashSearch = %d\n", nchashSearch);
57   printf("nmhashSearch = %d\n", nmhashSearch);
58   printf("nprehashSearch = %d\n", nprehashSearch);
59   printf("nRemoteReadSend = %d\n", nRemoteSend);
60   printf("nSoftAbort = %d\n", nSoftAbort);
61   printf("bytesSent = %d\n", bytesSent);
62   printf("bytesRecv = %d\n", bytesRecv);
63   printf("totalObjSize= %d\n", totalObjSize);
64   printf("sendRemoteReq= %d\n", sendRemoteReq);
65   printf("getResponse= %d\n", getResponse);
66   printf("**********************************\n");
67   exit(0);
68 #endif
69 }
70
71 void handle() {
72 #ifdef TRANSSTATS
73   struct sigaction siga;
74   siga.sa_handler = NULL;
75   siga.sa_flags = SA_SIGINFO;
76   siga.sa_flags = 0;
77   siga.sa_sigaction = &transStatsHandler;
78   sigemptyset(&siga.sa_mask);
79   sigaction(SIGUSR1, &siga, 0);
80 #endif
81 }
82 /*
83
84    double getMax(double *array, int size) {
85    int i;
86    double max = array[0];
87    for(i = 0; i < size; i++) { // for 2 MCS
88     if(max <= array[i])
89       max = array[i];
90    }
91    return max;
92    }
93
94    double getMin(double *array, int size) {
95    int i;
96    double min = array[0];
97    for(i = 0; i < size; i++) { //for 2 MCs
98     if(min > array[i])
99       min = array[i];
100    }
101    return min;
102    }
103
104    int getthreadid() {
105    int val;
106    if(((128<<24)|(195<<16)|(175<<8)|84) == myIpAddr)
107     val = 0;
108    else if(((128<<24)|(195<<16)|(175<<8)|86) == myIpAddr)
109     val = 1;
110    else if(((128<<24)|(195<<16)|(175<<8)|87) == myIpAddr)
111     val = 2;
112    else if(((128<<24)|(195<<16)|(175<<8)|88) == myIpAddr)
113     val = 3;
114    else
115     val = 4;
116    printf("threadid/mid = %d\n", val);
117    return val;
118    }
119
120    double getfast(int siteid, int threadid) {
121    int i, j, k;
122    double fast = 0.0;
123    //for(i = 0; i < 2; i++) { // for 2 MC
124    for(i = 0; i < 5; i++) { // for 5 MC
125     if(i == threadid)
126       continue;
127     for(k= 0; k<countstats[i]; k++) {
128       if(fast < threadstats[i][siteid][k])
129         fast = threadstats[i][siteid][k];
130     }
131    }
132    return fast;
133    }
134
135    void sortascending() {
136    int i;
137    for(i = 0 ; i < 5; i++) {
138
139    }
140    }
141
142    void bubblesort() {
143    const int size = 5; // 5MCS
144    int siteid;
145    for(siteid = 0; siteid < 15; siteid++) {
146     int k;
147     for(k=0; k<counttransCommit; k++) {
148       int i;
149       for(i=0; i < size-1; i++) {
150         int j;
151         for(j=0; j < size-1-i; j++) {
152           if(threadstats[j][siteid][k] > threadstats[j+1][siteid][k]) {
153             double temp;
154             temp = threadstats[j+1][siteid][k];
155             threadstats[j+1][siteid][k] = threadstats[j][siteid][k];
156             threadstats[j][siteid][k] = temp;
157           }
158         }
159       } //end of sorting
160     } // end for each transaction
161    } // end for each siteid
162    }
163
164    double avgofthreads(int siteid, int threadid) {
165    double total = 0.0;
166    int k;
167    for(k = 0; k<counttransCommit; k++) {
168     total += threadstats[threadid][siteid][k];
169    }
170    double avg = 0.0;
171    avg = total/counttransCommit;
172    return avg;
173    }
174
175    double avgfast(int siteid, int threadid) {
176    int i, j, k;
177    double fast;
178    for(k = 0; k<counttransCommit; k++) {
179     fast = 0.0;
180     for(i = 0; i <5; i++) { //for 5 mC
181       if(i == threadid)
182         continue;
183       if(fast < threadstats[i][siteid][k]) {
184         fast = threadstats[i][siteid][k];
185       }
186     }
187     avgfasttime[k] = fast;
188    }
189    double total= 0.0;
190    for(k = 0; k<counttransCommit; k++) {
191     total += avgfasttime[k];
192    }
193    return (total/counttransCommit);
194    }
195
196    double avgslow(int siteid, int threadid) {
197    int i, j, k;
198    double slow;
199    for(k = 0; k<counttransCommit; k++) {
200     slow = 1.0;
201     for(i = 0; i < 2; i++) { //for 2 mC
202       if(i == threadid)
203         continue;
204       if(slow > threadstats[i][siteid][k]) {
205         slow = threadstats[i][siteid][k];
206       }
207     }
208     avgslowtime[k] =  slow;
209    }
210    double total= 0.0;
211    for(k = 0; k<counttransCommit; k++) {
212     total += avgslowtime[k];
213    }
214    return (total/counttransCommit);
215    }
216
217    double getslowest(int siteid, int threadid) {
218    int i, j, k;
219    double slow = 1.0;
220    //for(i = 0; i < 2; i++) { // for 2 MC
221    for(i = 0; i < 5; i++) { // for 5 MC
222     if(i == threadid)
223       continue;
224     for(k= 0; k<countstats[i]; k++) {
225       if(slow > threadstats[i][siteid][k]) {
226         slow = threadstats[i][siteid][k];
227       }
228     }
229    }
230    return slow;
231    }
232
233    double getavg(int siteid, int threadid) {
234    double total=0.0;
235    int i, j, k;
236    int totalcount = 0;
237    //for(i = 0; i < 2; i++) { //for 2 MC
238    for(i = 0; i < 5; i++) { //for 5 MC
239     if(i == threadid)
240       continue;
241     for(k= 0; k<countstats[i]; k++) {
242       total += threadstats[i][siteid][k];
243     }
244     totalcount +=countstats[i];
245    }
246    double avg = total/totalcount;
247    return avg;
248    }
249
250    double getavgperthd(int siteid, int threadid) {
251    double total=0.0;
252    int i, j, k;
253    for(k= 0; k<countstats[threadid]; k++) {
254     total += threadstats[threadid][siteid][k];
255    }
256    double avg = total/countstats[threadid];
257    return avg;
258    }
259  */