summaryrefslogtreecommitdiff
path: root/storage/ndb
diff options
context:
space:
mode:
authorunknown <jonas@perch.ndb.mysql.com>2006-02-21 17:29:45 +0100
committerunknown <jonas@perch.ndb.mysql.com>2006-02-21 17:29:45 +0100
commit5296fd9605c5ef19f6d9e1639686acaeaf31c4b5 (patch)
tree04befde9200d312968cbe7963a8ab0c21d510842 /storage/ndb
parentc2f40b19cd7b4349c91bf2df8fb5e6cd5ec2a064 (diff)
downloadmariadb-git-5296fd9605c5ef19f6d9e1639686acaeaf31c4b5.tar.gz
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
Diffstat (limited to 'storage/ndb')
-rw-r--r--storage/ndb/src/kernel/vm/ndbd_malloc_impl.cpp83
1 files changed, 67 insertions, 16 deletions
diff --git a/storage/ndb/src/kernel/vm/ndbd_malloc_impl.cpp b/storage/ndb/src/kernel/vm/ndbd_malloc_impl.cpp
index a6067528db8..4b4f956648b 100644
--- a/storage/ndb/src/kernel/vm/ndbd_malloc_impl.cpp
+++ b/storage/ndb/src/kernel/vm/ndbd_malloc_impl.cpp
@@ -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)
{
@@ -92,7 +92,7 @@ do_malloc(Uint32 pages, InitChunk* chunk)
}
}
}
-
+
chunk->m_cnt = sz;
chunk->m_ptr = (Alloc_page*)ptr;
const UintPtr align = sizeof(Alloc_page) - 1;
@@ -101,6 +101,26 @@ do_malloc(Uint32 pages, InitChunk* chunk)
chunk->m_cnt--;
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;
}
@@ -286,6 +306,10 @@ Ndbd_mem_manager::grow(Uint32 start, Uint32 cnt)
__LINE__, start, 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));
@@ -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]))
@@ -552,33 +576,60 @@ struct Timer
Uint32 cnt;
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);
g_eventLogger.enable(Logger::LL_ON, Logger::LL_CRITICAL);
g_eventLogger.enable(Logger::LL_ON, Logger::LL_ERROR);
g_eventLogger.enable(Logger::LL_ON, Logger::LL_WARNING);
-
+
#define DEBUG 0
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);