Changeset: f9b8f6a71648 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=f9b8f6a71648
Modified Files:
monetdb5/extras/crackers/crackers_holistic.c
monetdb5/extras/crackers/crackers_select_ops.mx
monetdb5/extras/crackers/crackers_selectholpl_ops.mx
monetdb5/mal/mal_profiler.c
monetdb5/mal/mal_profiler.h
Branch: holindex
Log Message:
Add thread that ONLY checks the CPU load.
diffs (270 lines):
diff --git a/monetdb5/extras/crackers/crackers_holistic.c
b/monetdb5/extras/crackers/crackers_holistic.c
--- a/monetdb5/extras/crackers/crackers_holistic.c
+++ b/monetdb5/extras/crackers/crackers_holistic.c
@@ -28,6 +28,7 @@ static FrequencyNode *_InternalFrequency
static FrequencyNode *_InternalFrequencyStructB = NULL;
static MT_Lock frequencylock;
static MT_Id *idletime_thread;
+//static MT_Id *cpuload_thread;
MT_Lock CRKIndexLock;
pthread_rwlock_t CRKFirstPieceRWLock;
@@ -47,10 +48,12 @@ CRKinitHolistic(int *ret)
else
j = atoi(p);
idletime_thread = GDKzalloc(j * sizeof(*idletime_thread));
+ //cpuload_thread = GDKzalloc(sizeof(*cpuload_thread));
MT_lock_init(&frequencylock, "FrequencyStruct");
MT_lock_init(&CRKIndexLock, "Cracker Index Lock");
for(i=0;i<j;i++)
MT_create_thread(&idletime_thread[i],(void (*)(void
*))HeartbeatCPUload, IdleFunc, MT_THR_JOINABLE);
+ //MT_create_thread(cpuload_thread,(void (*)(void
*))HeartbeatCPUload_total, NULL, MT_THR_JOINABLE);
*ret = 0;
return MAL_SUCCEED;
}
@@ -289,6 +292,7 @@ changeWeight_2(FrequencyNode* node,int N
int p; /*number of pieces in the index*/
double Sp; /*average size of each piece*/
double d; /*distance from optimal piece(L1)*/
+ MT_lock_set(&node->nodeLock, "Lock Node");
p = node->c;
Sp =((double)N)/p;
d = Sp - L1;
@@ -300,6 +304,7 @@ changeWeight_2(FrequencyNode* node,int N
{
node->weight = (double)(node->f1) * d;
}
+ MT_lock_unset(&node->nodeLock, "Lock Node");
/*fprintf(stderr,"bid=%d f1=%d f2=%d p=%d Sp=%lf d=%lf
W=%lf\n",node->bid,node->f1,node->f2,p,Sp,d,node->weight);*/
return node->weight;
}
@@ -314,6 +319,7 @@ changeWeight_3(FrequencyNode* node,int N
int p; /*number of pieces in the index*/
double Sp; /*average size of each piece*/
double d; /*distance from optimal piece(L1)*/
+ MT_lock_set(&node->nodeLock, "Lock Node");
p = node->c;
Sp =((double)N)/p;
d = Sp - L1;
@@ -326,6 +332,7 @@ changeWeight_3(FrequencyNode* node,int N
node->weight = ((double)(node->f1)-(double)(node->f2)) * d;
}
/*fprintf(stderr,"bid=%d f1=%d f2=%d p=%d Sp=%lf d=%lf
W=%lf\n",node->bid,node->f1,node->f2,p,Sp,d,node->weight);*/
+ MT_lock_unset(&node->nodeLock, "Lock Node");
return node->weight;
}
diff --git a/monetdb5/extras/crackers/crackers_select_ops.mx
b/monetdb5/extras/crackers/crackers_select_ops.mx
--- a/monetdb5/extras/crackers/crackers_select_ops.mx
+++ b/monetdb5/extras/crackers/crackers_select_ops.mx
@@ -894,7 +894,16 @@ CRKRangeLeftNilTree_@1(int *vid, int *bi
oid cl2=0, ch2=0;
bit HBound,foundHgh=0;
int gapH = 1;
-
+ int pieces=0;
+ FILE *ofp;
+ char outputFilename1[] =
"/export/scratch2/petraki/experiments_paper1/cpu_cracking_pieces.txt";
+
+ ofp = fopen(outputFilename1,"a");
+ if (ofp == NULL) {
+ fprintf(stderr, "Can't open output file!\n");
+ exit(1);
+ }
+
if (*inclusiveHgh == TRUE) HBound = FALSE;
else HBound = TRUE;
@@ -930,7 +939,9 @@ CRKRangeLeftNilTree_@1(int *vid, int *bi
@:crkTwoRTree(@1)@
if (gapH>0) addCrackerIndex_@1(m,hgh,HBound,vh,c);
vl = BUNfirst(b);
-
+ pieces=pieces+2;
+ fprintf(ofp,"%d\n",pieces);
+ fclose(ofp);
BBPincref(b->batCacheid,TRUE);
BBPunfix(bo->batCacheid);
goto createView;
@@ -950,9 +961,9 @@ CRKRangeLeftNilTree_@1(int *vid, int *bi
cl2 = BUNfirst(b);
ch2 = BUNlast(b)-(oid)1;
@:crkTwoRTree(@1)@
- if (gapH>0) addCrackerIndex_@1(m,hgh,HBound,vh,c);
+ if (gapH>0)
+ addCrackerIndex_@1(m,hgh,HBound,vh,c);
vl = BUNfirst(b);
-
goto createView;
}
@@ -975,11 +986,17 @@ CRKRangeLeftNilTree_@1(int *vid, int *bi
if (foundHgh == 0){
@:crkTwoRTree(@1)@
if (IndexSize <IndexStop)
- if (gapH>0) addCrackerIndex_@1(m,hgh,HBound,vh,c);
+ if (gapH>0)
+ {
+ addCrackerIndex_@1(m,hgh,HBound,vh,c);
+ pieces=pieces+1;
+ }
}
else
vh = ch2;
-
+ fprintf(ofp,"%d\n",pieces);
+ fclose(ofp);
+
@:CreateResult()@
return MAL_SUCCEED;
}
diff --git a/monetdb5/extras/crackers/crackers_selectholpl_ops.mx
b/monetdb5/extras/crackers/crackers_selectholpl_ops.mx
--- a/monetdb5/extras/crackers/crackers_selectholpl_ops.mx
+++ b/monetdb5/extras/crackers/crackers_selectholpl_ops.mx
@@ -279,7 +279,9 @@ CRKrandomholpl_@1(int *bid, bit *inclusi
addCrackerIndex_@1(m, low, *inclusiveLow, _vl,
c);
CRKinitFrequencyStruct(0,*bid);
FN=searchBAT(FrequencyStructA,*bid);
+ MT_lock_set(&FN->nodeLock, "Lock Node");
FN->c = FN->c + 1;
+ MT_lock_unset(&FN->nodeLock, "Lock Node");
FN->weight =
changeWeight(FN,countBatElements,L1);
}
if ((vl == 1) && (*t == *low) && (*inclusiveLow ==
TRUE))
@@ -365,7 +367,9 @@ CRKrandomholpl_@1(int *bid, bit *inclusi
if (gapL>0)
{
addCrackerIndex_@1(m, low, *inclusiveLow, _vl,
c);
+ MT_lock_set(&FN->nodeLock, "Lock Node");
FN->c = FN->c + 1;
+ MT_lock_unset(&FN->nodeLock, "Lock Node");
if(FN->weight > 0)
FN->weight =
changeWeight(FN,countBatElements,L1);
}
@@ -1370,6 +1374,14 @@ CRKRangeLeftNilTree_@1(int *vid, int *bi
int countBatElements=0;
FrequencyNode* FN;
FrequencyNode *FrequencyStructA = getFrequencyStruct('A');
+ FILE *ofp;
+ char outputFilename1[] =
"/export/scratch2/petraki/experiments_paper1/cpu_holistic_pieces.txt";
+
+ ofp = fopen(outputFilename1,"a");
+ if (ofp == NULL) {
+ fprintf(stderr, "Can't open output file!\n");
+ exit(1);
+ }
if ((bo = BATdescriptor(*bid)) != NULL)
L1=32000/ATOMsize(bo->ttype);
@@ -1413,10 +1425,13 @@ CRKRangeLeftNilTree_@1(int *vid, int *bi
countBatElements=BATcount(b);
CRKinitFrequencyStruct(0,*bid);
FN=searchBAT(FrequencyStructA,*bid);
+ MT_lock_set(&FN->nodeLock, "Lock Node");
FN->f1 = FN->f1 + 1;
FN->c = FN->c + 1;
+ fprintf(ofp,"%d\n",FN->c);
+ MT_lock_unset(&FN->nodeLock, "Lock Node");
FN->weight = changeWeight(FN,countBatElements,L1);
-
+ fclose(ofp);
BBPincref(b->batCacheid,TRUE);
BBPunfix(bo->batCacheid);
goto tempcreateViewL;
@@ -1465,13 +1480,20 @@ CRKRangeLeftNilTree_@1(int *vid, int *bi
if (firstRetry==0)
{
+ MT_lock_set(&FN->nodeLock, "Lock Node");
FN->f1 = FN->f1 + 1;
+ MT_lock_unset(&FN->nodeLock, "Lock Node");
}
/* find out where in the index the high falls */
foundHgh = GetHgh_@1(*hgh, HBound, CrackerIndex[m].Tree, c,
BUNfirst(c), &cl2, &ch2, 0, BUNlast(b)-(oid)1);
- if((foundHgh!=0)&&(firstRetry==0)) FN->f2 = FN->f2 + 1;
+ if((foundHgh!=0)&&(firstRetry==0))
+ {
+ MT_lock_set(&FN->nodeLock, "Lock Node");
+ FN->f2 = FN->f2 + 1;
+ MT_lock_unset(&FN->nodeLock, "Lock Node");
+ }
pthread_rwlock_unlock(&CrackerIndex[m].columnRWLock);
@@ -1497,7 +1519,10 @@ CRKRangeLeftNilTree_@1(int *vid, int *bi
if(gapH>0)
{
addCrackerIndex_@1(m,hgh,HBound,vh,c);
+ MT_lock_set(&FN->nodeLock, "Lock Node");
FN->c = FN->c + 1;
+ fprintf(ofp,"%d\n",FN->c);
+ MT_lock_unset(&FN->nodeLock, "Lock Node");
countBatElements=BATcount(b);
if(FN->weight > 0)
FN->weight =
changeWeight(FN,countBatElements,L1);
@@ -1510,6 +1535,9 @@ CRKRangeLeftNilTree_@1(int *vid, int *bi
else
vh = ch2;
+ fclose(ofp);
+
+
tempcreateViewL:
if (!tail)
diff --git a/monetdb5/mal/mal_profiler.c b/monetdb5/mal/mal_profiler.c
--- a/monetdb5/mal/mal_profiler.c
+++ b/monetdb5/mal/mal_profiler.c
@@ -1335,15 +1335,38 @@ void HeartbeatCPUload(str (*IdleFunc)(in
while(1)
{
(void) getCPULoad(cpuload);
+ fprintf(stderr,"cpuload=%lf\n",corestat[256].load);
if (corestat[256].load < thres)
{
- fprintf(stderr,"cpuload=%lf\n",corestat[256].load);
IdleFunc(NULL);
}
MT_sleep_ms(10);
//fprintf(stderr,"%s\n",cpuload);
}
}
+
+// Give users the option to check for the system load between two heart beats
+void HeartbeatCPUload_total(void)
+{
+ char cpuload[BUFSIZ];
+ FILE *ofp;
+ char outputFilename1[] =
"/export/scratch2/petraki/experiments_paper1/cpuload_holistic.txt";
+
+ ofp = fopen(outputFilename1,"a");
+ if (ofp == NULL) {
+ fprintf(stderr, "Can't open output file!\n");
+ exit(1);
+ }
+
+ while(1)
+ {
+ (void) getCPULoad(cpuload);
+ fprintf(ofp,"cpuload=%lf\n",corestat[256].load);
+ MT_sleep_ms(10);
+ //fprintf(stderr,"%s\n",cpuload);
+ }
+ fclose(ofp);
+}
void profilerGetCPUStat(lng *user, lng *nice, lng *sys, lng *idle, lng *iowait)
{
(void) getCPULoad(0);
diff --git a/monetdb5/mal/mal_profiler.h b/monetdb5/mal/mal_profiler.h
--- a/monetdb5/mal/mal_profiler.h
+++ b/monetdb5/mal/mal_profiler.h
@@ -102,6 +102,7 @@ mal_export str cleanupProfiler(void);
mal_export void initHeartbeat(void);
mal_export void stopHeartbeat(void);
mal_export void HeartbeatCPUload(str (*IdleFunc)(int *));
+mal_export void HeartbeatCPUload_total(void);
mal_export int instrFilter(InstrPtr pci, str mod, str fcn);
mal_export void setFilter(Module cntxt, str mod, str fcn);
_______________________________________________
checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list