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 checkin-list@monetdb.org http://mail.monetdb.org/mailman/listinfo/checkin-list