Bug fixes, working code
authorNikhil Jain <nikhil@illinois.edu>
Wed, 19 Dec 2012 02:45:24 +0000 (20:45 -0600)
committerNikhil Jain <nikhil@illinois.edu>
Wed, 19 Dec 2012 02:45:24 +0000 (20:45 -0600)
src/ck-core/ckfaultinjector.C
src/ck-core/ckfaultinjector.h
src/ck-core/ckmemcheckpoint.C

index 22301dc1900afcbbe78ea22fcbb7735702a9e7c0..05920bf32ac74ccd4573c7ab9d6cf962c878fe52 100644 (file)
 
 using namespace std;
 
-CpvDeclare(FaultInjector, faultInjector);
+#define FI_DEBUG 0
+
+CpvDeclare(FaultInjector*, faultInjector);
 
 extern "C" {
 
-  void init_FI() {
+  void init_FI(char **argv) {
     CpvInitialize(FaultInjector, faultInjector);
+    CpvAccess(faultInjector) = new FaultInjector(argv);
   }
 
   int FI_registerRegion(void *_start, CmiUInt8 _length) {
-    return CpvAccess(faultInjector).registerRegion(_start,_length);
+    return CpvAccess(faultInjector)->registerRegion(_start,_length);
   }
 
   void FI_deregisterRegion(void* _start) {
-    CpvAccess(faultInjector).deregisterRegion(_start);
+    CpvAccess(faultInjector)->deregisterRegion(_start);
   }
 
   void FI_deregisterIndex(int index) {
-    CpvAccess(faultInjector).deregisterIndex(index);
+    CpvAccess(faultInjector)->deregisterIndex(index);
   }
 
   void FI_setPeriod(int _fp) {
-    CpvAccess(faultInjector).setPeriod(_fp);
+    CpvAccess(faultInjector)->setPeriod(_fp);
   }
 
-  int FT_getPeriod() { 
-    return CpvAccess(faultInjector).getPeriod();
+  int FI_getPeriod() { 
+    return CpvAccess(faultInjector)->getPeriod();
   }
 
-  void FT_startInjection() { 
-    CpvAccess(faultInjector).startInjection();
+  void FI_startInjection() { 
+    CpvAccess(faultInjector)->startInjection();
   }
 
-  void FT_stopInjection() { 
-    CpvAccess(faultInjector).stopInjection();
+  void FI_stopInjection() { 
+    CpvAccess(faultInjector)->stopInjection();
   }
 
-  void FT_injectFault() {
-    CpvAccess(faultInjector).injectFault();
-    CpvAccess(faultInjector).injected = 0;
-    if(CpvAccess(faultInjector).inject) {
-      CcdCallFnAfter((CcdVoidFn)FT_injectFault, NULL, CpvAccess(faultInjector).fault_period*1000);
-      CpvAccess(faultInjector).injected = 1;
+  void FI_injectFault() {
+    CpvAccess(faultInjector)->injectFault();
+    CpvAccess(faultInjector)->injected = 0;
+    if(CpvAccess(faultInjector)->inject) {
+      CcdCallFnAfter((CcdVoidFn)FI_injectFault, NULL, CpvAccess(faultInjector)->fault_period*1000);
+      CpvAccess(faultInjector)->injected = 1;
     }
   }
 }
 
-FaultInjector::FaultInjector() : fault_period(DEFAULT_FAULT_PERIOD), 
-                                 inject(1), injected(0) {
-  CcdCallFnAfter((CcdVoidFn)FT_injectFault, NULL, CpvAccess(faultInjector).
-                fault_period*1000);
-  injected = 1;
+FaultInjector::FaultInjector(char **argv) : fault_period(DEFAULT_FAULT_PERIOD), 
+                                 injected(0) {
+#if FI_DEBUG
+  printf("[%d] Creating fault injector %d %d %d \n",CmiMyPe(), fault_period,inject, injected);
+#endif
+  if(CmiGetArgFlagDesc(argv, "+inj_fault", "Inject Fault")) {
+    inject = 1;
+    CcdCallFnAfter((CcdVoidFn)FI_injectFault, NULL, fault_period*1000);
+    injected = 1;
+  }
 }
 
 int FaultInjector::registerRegion(void *_start, CmiUInt8 _length) {
   MemRegion region(_start,_length);
   userZones.push_back(region);
+#if FI_DEBUG
   printf("[%d] Adding memory region, size %d\n",CmiMyPe(),userZones.size());
+#endif
   return userZones.size() - 1;
 }
 
@@ -75,6 +85,9 @@ void FaultInjector::deregisterRegion(void *_start) {
   for(int i=0; i<userZones.size(); i++) {
     if(userZones[i].start == _start) {
       userZones.erase(userZones.begin()+i);
+#if FI_DEBUG
+      printf("[%d] Deleting memory region, size %d\n",CmiMyPe(),userZones.size());
+#endif
     }
   }
 }
@@ -86,14 +99,16 @@ void FaultInjector::deregisterIndex(int index) {
 void FaultInjector::startInjection() {  
   if(inject == 0) {
     inject = 1; 
-    CcdCallFnAfter((CcdVoidFn)FT_injectFault, NULL, CpvAccess(faultInjector).fault_period*1000);
+    CcdCallFnAfter((CcdVoidFn)FI_injectFault, NULL, fault_period*1000);
     injected = 1;
   }
 }
 
 void FaultInjector::injectFault() {
   //check if we have registered memory regions
-  printf("[%d] Fault injection attempted",CmiMyPe());
+#if FI_DEBUG
+  printf("[%d] Fault injection attempted\n",CmiMyPe());
+#endif
   if(!userZones.size()) return;
 
   //if not select a random memory region
@@ -104,7 +119,9 @@ void FaultInjector::injectFault() {
 
   char *location = (char*)userZones[target].start + memory;
 
+#if FI_DEBUG
   printf("[%d] Injecting Fault at %d on %llu, size %d\n",CmiMyPe(),target,memory,userZones.size());
+#endif
   if(*location & 1) {
     *location = *location & 0xFE;
   }else{
index a29329fc2894219e5aa1973d7cdcf51128a9839a..6978fda52581786ef48b0545472debda4973325d 100644 (file)
@@ -29,7 +29,7 @@ typedef struct FaultInjector {
   int inject;       //whether to inject
   int injected;     //is call back set for injection?
 
-  FaultInjector();
+  FaultInjector(char **argv);
 
   int registerRegion(void *_start, CmiUInt8 _length);
   void deregisterRegion(void *_start);
@@ -45,15 +45,15 @@ typedef struct FaultInjector {
 } FaultInjector;
 
 extern "C" {
-  void init_FI();
+  void init_FI(char **argv);
   int FI_registerRegion(void *_start, CmiUInt8 _length);
   void FI_deregisterRegion(void* _start);
   void FI_deregisterIndex(int index);
   void FI_setPeriod(int _fp);
-  int FT_getPeriod();
-  void FT_startInjection();
-  void FT_stopInjection(); 
-  void FT_injectFault();
+  int FI_getPeriod();
+  void FI_startInjection();
+  void FI_stopInjection(); 
+  void FI_injectFault();
 }
 
 
index af2ec3a4a349a406d97da40e980a4cd0f655dd6f..7cee8687957c63263b6461bdec9074ba87860dd1 100644 (file)
@@ -1915,13 +1915,12 @@ void init_memcheckpt(char **argv)
     if (CmiGetArgFlagDesc(argv, "+ftc_disk", "Double-disk Checkpointing")) {
       arg_where = CkCheckPoint_inDISK;
     }
-
        // initiliazing _crashedNode variable
        CpvInitialize(int, _crashedNode);
        CpvInitialize(int, _remoteCrashedNode);
        CpvAccess(_crashedNode) = -1;
        CpvAccess(_remoteCrashedNode) = -1;
-        init_FI();
+        init_FI(argv);
 
 }
 #endif