diff options
-rw-r--r-- | src/include/kernel/pagemgr.H | 8 | ||||
-rw-r--r-- | src/kernel/block.C | 4 | ||||
-rw-r--r-- | src/kernel/pagemgr.C | 4 |
3 files changed, 12 insertions, 4 deletions
diff --git a/src/include/kernel/pagemgr.H b/src/include/kernel/pagemgr.H index 7b5deddb4..d2500601f 100644 --- a/src/include/kernel/pagemgr.H +++ b/src/include/kernel/pagemgr.H @@ -188,14 +188,18 @@ class PageManager enum { - KERNEL_HEAP_RESERVED_PAGES = 4, + // Always keep this many free pages for the kernel to use + KERNEL_HEAP_RESERVED_PAGES = 10, + // Triggers a NORMAL page castout #ifdef CONFIG_P9_VPO_COMPILE // VPO has constrained mem env -> higher threshold LOWMEM_NORM_LIMIT = 32, #else LOWMEM_NORM_LIMIT = 16, #endif - LOWMEM_CRIT_LIMIT = 5, + + // Triggers CRITICAL page castout + LOWMEM_CRIT_LIMIT = KERNEL_HEAP_RESERVED_PAGES+1, }; static size_t cv_coalesce_count; //!< running coalesced counter diff --git a/src/kernel/block.C b/src/kernel/block.C index b80db2aac..5b24ae1a6 100644 --- a/src/kernel/block.C +++ b/src/kernel/block.C @@ -5,7 +5,7 @@ /* */ /* OpenPOWER HostBoot Project */ /* */ -/* Contributors Listed Below - COPYRIGHT 2011,2018 */ +/* Contributors Listed Below - COPYRIGHT 2011,2019 */ /* [+] International Business Machines Corp. */ /* */ /* */ @@ -387,7 +387,7 @@ void Block::castOutPages(uint64_t i_type) (iv_baseAddr != VMM_ADDR_EXTEND_BLOCK)) // Skip extended memory. { size_t rw_constraint = 5; - size_t ro_constraint = 3; + size_t ro_constraint = 10; if(i_type == VmmManager::CRITICAL) { diff --git a/src/kernel/pagemgr.C b/src/kernel/pagemgr.C index ee3a3ff39..3b5966421 100644 --- a/src/kernel/pagemgr.C +++ b/src/kernel/pagemgr.C @@ -318,6 +318,10 @@ void* PageManager::_allocatePage(size_t n, bool userspace) { printkd("PAGEMANAGER: kernel heap used\n"); page = iv_heapKernel.allocatePage(n); + + // Any time we dip into the kernel heap we should start + // evicting user pages + CpuManager::forceMemoryPeriodic(); } // If still not successful, we're out of memory. Assert. |