Commit 5296fd96 authored by unknown's avatar unknown
Browse files

ndb

  add more printouts to unit test of buddy allocator


storage/ndb/src/kernel/vm/ndbd_malloc_impl.cpp:
  Add some more debugging in UNIT_TEST
parent c2f40b19
Loading
Loading
Loading
Loading
+67 −16
Original line number Diff line number Diff line
@@ -52,8 +52,8 @@ static
bool
do_malloc(Uint32 pages, InitChunk* chunk)
{
  void * ptr;
  pages += 1;
  void * ptr = 0;
  Uint32 sz = pages;
  if (strcmp(f_method, "sbrk") == 0)
  {
@@ -102,6 +102,26 @@ do_malloc(Uint32 pages, InitChunk* chunk)
    chunk->m_ptr = (Alloc_page*)((UintPtr(ptr) + align) & ~align);
  }

#ifdef UNIT_TEST
  ndbout_c("do_malloc(%d) -> %p %d", pages, ptr, chunk->m_cnt);
  if (1)
  {
    Uint32 sum = 0;
    Alloc_page* page = chunk->m_ptr;
    for (Uint32 i = 0; i<chunk->m_cnt; i++, page++)
    {
      page->m_data[0*1024] = 0;
      page->m_data[1*1024] = 0;
      page->m_data[2*1024] = 0;
      page->m_data[3*1024] = 0;
      page->m_data[4*1024] = 0;
      page->m_data[5*1024] = 0;
      page->m_data[6*1024] = 0;
      page->m_data[7*1024] = 0;
    }
  }
#endif
  
  return true;
}

@@ -287,6 +307,10 @@ Ndbd_mem_manager::grow(Uint32 start, Uint32 cnt)
      return;
    }

#ifdef UNIT_TEST
    ndbout_c("creating bitmap page %d", start_bmp);
#endif
    
    Alloc_page* bmp = m_base_page + start;
    memset(bmp, 0, sizeof(Alloc_page));
    m_used_bitmap_pages.set(start_bmp);
@@ -388,7 +412,7 @@ Ndbd_mem_manager::alloc(Uint32* ret, Uint32 *pages, Uint32 min)
   */

  Int32 min_list = log2(min - 1);
  assert(list >= min_list);
  assert((Int32)list >= min_list);
  for (i = list - 1; i >= min_list; i--) 
  {
    if ((start = m_buddy_lists[i]))
@@ -553,19 +577,46 @@ struct Timer

  Timer() { sum = cnt = 0;}

  struct timeval st;

  void start() {
    gettimeofday(&st, 0);
  }

  Uint64 calc_diff() {
    struct timeval st2;
    gettimeofday(&st2, 0);
    Uint64 diff = st2.tv_sec;
    diff -= st.tv_sec;
    diff *= 1000000;
    diff += st2.tv_usec;
    diff -= st.tv_usec;
    return diff;
  }
  
  void stop() {
    add(calc_diff());
  }
  
  void add(Uint64 diff) { sum += diff; cnt++;}

  void print(const char * title) const {
    printf("%s %lld %d -> %d/s\n", title, sum, cnt, Uint32(1000*cnt/sum));
    float ps = sum;
    ps /= cnt;
    printf("%s %fus/call %lld %d\n", title, ps, sum, cnt);
  }
};

int 
main(void)
main(int argc, char** argv)
{
  int sz = 3*32768;
  if (argc > 1)
    sz = 32*atoi(argv[1]);

  char buf[255];
  Timer timer[4];
  printf("Startar modul test av Page Manager\n");
  printf("Startar modul test av Page Manager %dMb\n", (sz >> 5));
  g_eventLogger.createConsoleHandler();
  g_eventLogger.setCategory("keso");
  g_eventLogger.enable(Logger::LL_ON, Logger::LL_INFO);
@@ -578,7 +629,7 @@ main(void)
  Ndbd_mem_manager mem;
  Resource_limit rl;
  rl.m_min = 0;
  rl.m_max = 2*32768 + 2*16384;
  rl.m_max = sz;
  rl.m_curr = 0;
  rl.m_resource_id = 0;
  mem.set_resource_limit(rl);
@@ -592,7 +643,7 @@ main(void)
  printf("pid: %d press enter to continue\n", getpid());
  fgets(buf, sizeof(buf), stdin);
  Vector<Chunk> chunks;
  const Uint32 LOOPS = 1000000;
  const Uint32 LOOPS = 100000000;
  for(Uint32 i = 0; i<LOOPS; i++){
    //mem.dump();
    
@@ -625,10 +676,10 @@ main(void)
      const int ch = rand() % chunks.size();
      Chunk chunk = chunks[ch];
      chunks.erase(ch);
      timer[0].start();
      Uint64 start = NdbTick_CurrentMillisecond();      
      mem.release(chunk.pageId, chunk.pageCount);
      Uint64 stop = NdbTick_CurrentMillisecond();
      timer[0].add(stop-start);
      timer[0].stop();
      if(DEBUG)
	printf(" release %d %d\n", chunk.pageId, chunk.pageCount);
    }
@@ -644,9 +695,9 @@ main(void)
      {
	printf(" alloc %d -> ", alloc); fflush(stdout);
      }
      Uint64 start = NdbTick_CurrentMillisecond();      
      timer[0].start();
      mem.alloc(&chunk.pageId, &chunk.pageCount, 1);
      Uint64 stop = NdbTick_CurrentMillisecond();      
      Uint64 diff = timer[0].calc_diff();

      if (DEBUG)
	printf("%d %d", chunk.pageId, chunk.pageCount);
@@ -654,17 +705,17 @@ main(void)
      if(chunk.pageCount != 0){
	chunks.push_back(chunk);
	if(chunk.pageCount != alloc) {
	  timer[2].add(stop-start);
	  timer[2].add(diff);
	  if (DEBUG)
	    printf(" -  Tried to allocate %d - only allocated %d - free: %d",
		   alloc, chunk.pageCount, 0);
	}
	else
	{
	  timer[1].add(stop-start);
	  timer[1].add(diff);
	}
      } else {
	timer[3].add(stop-start);
	timer[3].add(diff);
	if (DEBUG)
	  printf("  Failed to alloc %d pages with %d pages free",
		 alloc, 0);