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