diff options
author | Patrick Williams <iawillia@us.ibm.com> | 2011-07-18 14:28:10 -0500 |
---|---|---|
committer | A. Patrick Williams III <iawillia@us.ibm.com> | 2011-07-29 14:18:24 -0500 |
commit | 786c6a4a3aa85bb9f240a86735eb8f6ac277c109 (patch) | |
tree | 70c4da8209f8f0288cbdc25e41de8d2af5b8a600 /src | |
parent | f5b3b1b3de680ef354419b74b50afe8b93012a4e (diff) | |
download | talos-hostboot-786c6a4a3aa85bb9f240a86735eb8f6ac277c109.tar.gz talos-hostboot-786c6a4a3aa85bb9f240a86735eb8f6ac277c109.zip |
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 <dcrowell@us.ibm.com>
Reviewed-by: Andrew J. Geissler <andrewg@us.ibm.com>
Reviewed-by: MATTHEW S. BARTH <msbarth@us.ibm.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/include/kernel/pagemgr.H | 5 | ||||
-rw-r--r-- | src/kernel/pagemgr.C | 12 |
2 files changed, 15 insertions, 2 deletions
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; } |