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