fix profile code
authorjzhou <jzhou>
Thu, 14 Jul 2011 19:32:47 +0000 (19:32 +0000)
committerjzhou <jzhou>
Thu, 14 Jul 2011 19:32:47 +0000 (19:32 +0000)
Robust/src/Runtime/bamboo/multicoregarbage.c
Robust/src/Runtime/bamboo/multicoregccompact.c
Robust/src/Runtime/bamboo/multicoregcmark.c
Robust/src/Runtime/bamboo/multicoregcprofile.h

index 3e79be1089914ec96a6dde54a39087eeb621632e..058c92b8ad4d3a2fd9549c401901e99c75053d7e 100644 (file)
@@ -296,8 +296,6 @@ void gc_collect(struct garbagelist * stackptr) {
   WAITFORGCPHASE(MARKPHASE);
 
   GC_PRINTF("Start mark phase\n");
-  GCPROFILE_ITEM();
-
   mark(stackptr);
   GC_PRINTF("Finish mark phase, start compact phase\n");
   compact();
@@ -342,7 +340,6 @@ void gc_nocollect(struct garbagelist * stackptr) {
   WAITFORGCPHASE(MARKPHASE);
 
   GC_PRINTF("Start mark phase\n"); 
-  GCPROFILE_ITEM();
   mark(stackptr);
   GC_PRINTF("Finish mark phase, wait for update\n");
 
@@ -397,7 +394,6 @@ void master_getlargeobjs() {
 void master_updaterefs(struct garbagelist * stackptr) {
   gc_status_info.gcphase = UPDATEPHASE;
   GC_SEND_MSG_1_TO_CLIENT(GCSTARTUPDATE);
-  GCPROFILE_ITEM();
   GC_PRINTF("Start update phase \n");
   // update phase
   update(stackptr);
@@ -454,10 +450,10 @@ void gc_master(struct garbagelist * stackptr) {
   unsigned long long tmpt = BAMBOO_GET_EXE_TIME();
   CACHEADAPT_OUTPUT_CACHE_SAMPLING();
   gc_output_cache_policy_time += (BAMBOO_GET_EXE_TIME()-tmpt);
-  GCPROFILE_ITEM();
   //tprintf("start mark phase\n");
   // do mark phase
   master_mark(stackptr);
+  GCPROFILE_ITEM();
   //tprintf("finish mark phase\n");
   // get large objects from all cores
   master_getlargeobjs();
@@ -548,8 +544,8 @@ bool gc(struct garbagelist * stackptr) {
     while(!gc_checkCoreStatus())
       ;
 
-    GCPROFILE_START();
     pregccheck();
+    GCPROFILE_START();
     GC_PRINTF("start gc! \n");
     pregcprocessing();
     gc_master(stackptr);
index b3969011a69bcbec04b7749545e467c6b4ae70ab..893852155b36448225ed0a6d8b5e6846899d63af 100644 (file)
@@ -606,6 +606,8 @@ void master_compact() {
   if (allocationinfo.lowestfreeblock==NOFREEBLOCK)
     allocationinfo.lowestfreeblock=numblockspercore*NUMCORES4GC;
 
+  // compute live object space
+  GCPROFILE_RECORD_SPACE();
   GC_PRINTF("compact phase finished \n");
 }
 
index ea542af9ae32fb03b9fc991f26e664502572b2ea..3ec50d80731a618193b2bbbeee832a395fcba059 100644 (file)
@@ -271,6 +271,7 @@ void mark(struct garbagelist * stackptr) {
       } else {
         // ptr is an unmarked active object on this core
        unsigned int isize=iunits<<ALIGNMENTSHIFT;
+  GCPROFILE_RECORD_LIVE_OBJ();
         gccurr_heaptop += isize;
       }
       // scan the pointers in object
index 6d844fbf3ffe9290afd1d0484269bef771dc3f07..9ddbf86aaa83a82c227646a23153a165326cd95b 100644 (file)
@@ -9,9 +9,9 @@
 #define GCINFOLENGTH 100
 
 #ifdef GC_CACHE_ADAPT
-#define GC_PROFILE_NUM_FIELD 20
+#define GC_PROFILE_NUM_FIELD 15
 #else
-#define GC_PROFILE_NUM_FIELD 19
+#define GC_PROFILE_NUM_FIELD 14
 #endif // GC_CACHE_ADAPT
 
 typedef struct gc_info {
@@ -112,11 +112,15 @@ INLINE static void gc_profileEnd(void) {
 #define GCPROFILE_RECORD_SPACE() \
   { \
     if(gc_profile_flag) { \
-      gc_num_livespace = 0; \
-      for(int tmpi = 0; tmpi < GCNUMBLOCK; tmpi++) { \
-        gc_num_livespace += bamboo_smemtbl[tmpi]; \
+      gc_num_freespace = 0; \
+      block_t lowestblock=allocationinfo.lowestfreeblock; \
+      for(block_t searchblock=lowestblock;searchblock<GCNUMBLOCK;searchblock++) { \
+        struct blockrecord * block=&allocationinfo.blocktable[searchblock]; \
+        if (block->status==BS_FREE) { \
+          gc_num_freespace+=block->freespace&~BAMBOO_CACHE_LINE_MASK; \
+        } \
       } \
-      gc_num_freespace = (BAMBOO_SHARED_MEM_SIZE) - gc_num_livespace; \
+      gc_num_livespace = (BAMBOO_SHARED_MEM_SIZE) - gc_num_freespace; \
     } \
   }
 // record forward obj info