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

Reply via email to