Changeset: 3c06f49c7e2b for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=3c06f49c7e2b
Modified Files:
        monetdb5/extras/crackers/crackers_holistic.c
        monetdb5/mal/mal_profiler.c
        monetdb5/mal/mal_profiler.h
Branch: holindex
Log Message:

Print cpu load in file (separate thread) only if it is necessary for the 
experiment.


diffs (135 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
@@ -27,6 +27,7 @@
 static FrequencyNode *_InternalFrequencyStructA = NULL;
 static FrequencyNode *_InternalFrequencyStructB = NULL;
 static MT_Id *idletime_thread;
+static MT_Id *cpuload_thread;
 MT_Lock frequencylock;
 MT_Lock CRKIndexLock;
 pthread_rwlock_t CRKFirstPieceRWLock;
@@ -35,11 +36,24 @@ IdleFuncPtr IdleFunc;
 str
 CRKinitHolistic(int *ret)
 {
+       char *p = getenv("MOTIVATION_EXPERIMENT");
+       int motivation_experiment=0;
+
+       if (p == NULL){
+               fprintf(stderr, "Error initHolistic: environment variable is 
missing.\n");
+               exit(1);
+       }
+       else
+               motivation_experiment=atoi(p);
+
        IdleFunc=&CRKrandomCrack;
        idletime_thread = GDKzalloc(sizeof(*idletime_thread));
+       cpuload_thread = GDKzalloc(sizeof(*idletime_thread));
        MT_lock_init(&frequencylock, "FrequencyStruct");
        MT_lock_init(&CRKIndexLock, "Cracker Index Lock");
        MT_create_thread(idletime_thread,(void (*)(void *))HeartbeatCPUload, 
IdleFunc, MT_THR_JOINABLE);
+       if (motivation_experiment != 0)
+               MT_create_thread(cpuload_thread,(void (*)(void 
*))HeartbeatCPUload_total, NULL, MT_THR_JOINABLE);
        *ret = 0;
        return MAL_SUCCEED;
 }
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
@@ -1321,6 +1321,33 @@ static int getCPULoad(char cpuload[BUFSI
 }
 
 // Give users the option to check for the system load between two heart beats
+void HeartbeatCPUload_total(void *arg)
+{
+       char cpuload[BUFSIZ];
+       FILE *ofp;
+       char *outputFilename1 = getenv("TOTAL_CPULOAD");
+
+       (void) arg;
+
+       if (outputFilename1 == NULL){
+               fprintf(stderr, "Error HeartbeatCPUload_total: wrong 
environment variable.\n");
+               exit(1);
+       }
+       ofp = fopen(outputFilename1,"a");
+       if (ofp == NULL) {
+               fprintf(stderr, "Can't open output file!\n");
+               exit(1);
+       }
+
+       while(1){
+               (void) getCPULoad(cpuload);
+               fprintf(ofp,"%lf\n",corestat[256].load);
+               MT_sleep_ms(10);
+       }
+       fclose(ofp);
+}
+
+// Give users the option to check for the system load between two heart beats
 void HeartbeatCPUload(void *arg)
 {
        char cpuload[BUFSIZ];
@@ -1330,23 +1357,16 @@ void HeartbeatCPUload(void *arg)
        lng load;
        int n=0;  /*number of idle cores*/
        double N=0;  /*number of busy cores*/
-       FILE *ofp;
-       char *outputFilename1 = getenv("TOTAL_CPULOAD");
        void (*IdleFunc)(void *) = arg;
 
 
-       if (p == NULL || cores == NULL || outputFilename1 == NULL){
+       if (p == NULL || cores == NULL){
                fprintf(stderr, "Error HeartbeatCPUload: environment variable 
is missing.\n");
                exit(1);
        }
        else{
                threshold = atoi(p);
                max_threads=atoi(cores);
-               ofp = fopen(outputFilename1,"a");
-               if (ofp == NULL) {
-                       fprintf(stderr, "Can't open output file!\n");
-                       exit(1);
-               }
        }
 
        if (max_threads > 0){
@@ -1357,24 +1377,12 @@ void HeartbeatCPUload(void *arg)
                                N = (int) (load * max_threads) / 100.0;
                                n = max_threads - N;
                                MRschedule(n, NULL, IdleFunc);
-                               (void) getCPULoad(cpuload);
-                                fprintf(ofp,"%lf\n",corestat[256].load);
                                MT_sleep_ms(10);
                        }
-                       else{
-                                fprintf(ofp,"%lf\n",corestat[256].load);
+                       else
                                 MT_sleep_ms(10);
-                        }      
                }
        }
-       else{
-               while(1){
-                       (void) getCPULoad(cpuload);
-                       fprintf(ofp,"%lf\n",corestat[256].load);
-                       MT_sleep_ms(10);
-               }
-       }
-       fclose(ofp);
 }
 
 // Give users the option to check for the system total load between two heart 
beats
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(void*);
+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]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to