From 786c6a4a3aa85bb9f240a86735eb8f6ac277c109 Mon Sep 17 00:00:00 2001 From: Patrick Williams Date: Mon, 18 Jul 2011 14:28:10 -0500 Subject: Add usage statistics to PageManager. Change-Id: Ic7f158b07b5b37465af5b129153d63645ced1bad Reviewed-on: http://gfw160.austin.ibm.com:8080/gerrit/205 Tested-by: Jenkins Server Reviewed-by: Daniel M. Crowell Reviewed-by: Andrew J. Geissler Reviewed-by: MATTHEW S. BARTH --- src/include/kernel/pagemgr.H | 5 ++++- src/kernel/pagemgr.C | 12 +++++++++++- 2 files changed, 15 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/include/kernel/pagemgr.H b/src/include/kernel/pagemgr.H index 5c22d6864..52d924b79 100644 --- a/src/include/kernel/pagemgr.H +++ b/src/include/kernel/pagemgr.H @@ -32,7 +32,10 @@ class PageManager private: void* _allocatePage(size_t); void _freePage(void*, size_t); - + + /** Statistics on number of free pages (for debug) */ + uint64_t iv_pagesAvail; + struct page_t { page_t* next; diff --git a/src/kernel/pagemgr.C b/src/kernel/pagemgr.C index 1570a97d3..9ca2821d6 100644 --- a/src/kernel/pagemgr.C +++ b/src/kernel/pagemgr.C @@ -22,7 +22,7 @@ void PageManager::freePage(void* p, size_t n) return pmgr._freePage(p, n); } -PageManager::PageManager() +PageManager::PageManager() : iv_pagesAvail(0) { // Determine first page of un-allocated memory. uint64_t addr = (uint64_t) VFS_LAST_ADDRESS; @@ -32,6 +32,9 @@ PageManager::PageManager() // Determine number of pages available. page_t* page = (page_t*)((void*) addr); size_t length = (MEMLEN - addr) / PAGESIZE; + + // Update statistics. + __sync_add_and_fetch(&iv_pagesAvail, length); // Display. printk("Initializing PageManager with %zd pages starting at %lx...", @@ -82,6 +85,9 @@ void* PageManager::_allocatePage(size_t n) while(1); } + // Update statistics. + __sync_sub_and_fetch(&iv_pagesAvail, n); + return page; } @@ -93,6 +99,10 @@ void PageManager::_freePage(void* p, size_t n) while (n > (size_t)(1 << which_bucket)) which_bucket++; push_bucket((page_t*)p, which_bucket); + + // Update statistics. + __sync_add_and_fetch(&iv_pagesAvail, n); + return; } -- cgit v1.2.1