8208277: Code cache heap (-XX:ReservedCodeCacheSize) doesn't work with 1GB LargePages
Use huge pages for code cache if ReservedCodeCacheSize == InitialCodeCacheSize Reviewed-by: kvn
This commit is contained in:
parent
4a28e27fd2
commit
d4acf96543
@ -289,7 +289,7 @@ void CodeCache::initialize_heaps() {
|
||||
|
||||
// If large page support is enabled, align code heaps according to large
|
||||
// page size to make sure that code cache is covered by large pages.
|
||||
const size_t alignment = MAX2(page_size(false), (size_t) os::vm_allocation_granularity());
|
||||
const size_t alignment = MAX2(page_size(false, 8), (size_t) os::vm_allocation_granularity());
|
||||
non_nmethod_size = align_up(non_nmethod_size, alignment);
|
||||
profiled_size = align_down(profiled_size, alignment);
|
||||
|
||||
@ -314,10 +314,14 @@ void CodeCache::initialize_heaps() {
|
||||
add_heap(non_profiled_space, "CodeHeap 'non-profiled nmethods'", CodeBlobType::MethodNonProfiled);
|
||||
}
|
||||
|
||||
size_t CodeCache::page_size(bool aligned) {
|
||||
size_t CodeCache::page_size(bool aligned, size_t min_pages) {
|
||||
if (os::can_execute_large_page_memory()) {
|
||||
return aligned ? os::page_size_for_region_aligned(ReservedCodeCacheSize, 8) :
|
||||
os::page_size_for_region_unaligned(ReservedCodeCacheSize, 8);
|
||||
if (InitialCodeCacheSize < ReservedCodeCacheSize) {
|
||||
// Make sure that the page size allows for an incremental commit of the reserved space
|
||||
min_pages = MAX2(min_pages, (size_t)8);
|
||||
}
|
||||
return aligned ? os::page_size_for_region_aligned(ReservedCodeCacheSize, min_pages) :
|
||||
os::page_size_for_region_unaligned(ReservedCodeCacheSize, min_pages);
|
||||
} else {
|
||||
return os::vm_page_size();
|
||||
}
|
||||
|
@ -111,7 +111,6 @@ class CodeCache : AllStatic {
|
||||
static CodeHeap* get_code_heap(int code_blob_type); // Returns the CodeHeap for the given CodeBlobType
|
||||
// Returns the name of the VM option to set the size of the corresponding CodeHeap
|
||||
static const char* get_code_heap_flag_name(int code_blob_type);
|
||||
static size_t page_size(bool aligned = true); // Returns the page size used by the CodeCache
|
||||
static ReservedCodeSpace reserve_heap_memory(size_t size); // Reserves one continuous chunk of memory for the CodeHeaps
|
||||
|
||||
// Iteration
|
||||
@ -133,6 +132,7 @@ class CodeCache : AllStatic {
|
||||
public:
|
||||
// Initialization
|
||||
static void initialize();
|
||||
static size_t page_size(bool aligned = true, size_t min_pages = 1); // Returns the page size used by the CodeCache
|
||||
|
||||
static int code_heap_compare(CodeHeap* const &lhs, CodeHeap* const &rhs);
|
||||
|
||||
|
@ -23,6 +23,7 @@
|
||||
*/
|
||||
|
||||
#include "precompiled.hpp"
|
||||
#include "code/codeCache.hpp"
|
||||
#include "runtime/globals.hpp"
|
||||
#include "runtime/globals_extension.hpp"
|
||||
#include "compiler/compilerDefinitions.hpp"
|
||||
@ -200,8 +201,10 @@ void CompilerConfig::set_tiered_flags() {
|
||||
FLAG_SET_ERGO(uintx, ReservedCodeCacheSize,
|
||||
MIN2(CODE_CACHE_DEFAULT_LIMIT, (size_t)ReservedCodeCacheSize * 5));
|
||||
}
|
||||
// Enable SegmentedCodeCache if TieredCompilation is enabled and ReservedCodeCacheSize >= 240M
|
||||
if (FLAG_IS_DEFAULT(SegmentedCodeCache) && ReservedCodeCacheSize >= 240*M) {
|
||||
// Enable SegmentedCodeCache if TieredCompilation is enabled, ReservedCodeCacheSize >= 240M
|
||||
// and the code cache contains at least 8 pages (segmentation disables advantage of huge pages).
|
||||
if (FLAG_IS_DEFAULT(SegmentedCodeCache) && ReservedCodeCacheSize >= 240*M &&
|
||||
8 * CodeCache::page_size() <= ReservedCodeCacheSize) {
|
||||
FLAG_SET_ERGO(bool, SegmentedCodeCache, true);
|
||||
}
|
||||
if (!UseInterpreter) { // -Xcomp
|
||||
|
Loading…
x
Reference in New Issue
Block a user