Skip to content
This repository has been archived by the owner on Sep 2, 2022. It is now read-only.

Commit

Permalink
Browse files Browse the repository at this point in the history
8266802: Shenandoah: Round up region size to page size unconditionally
Backport-of: e5d3ee394ae940ee0111489e6e072f327ec29c3b
  • Loading branch information
zhengyu123 committed May 21, 2021
1 parent 5311c4d commit e0060a3
Show file tree
Hide file tree
Showing 3 changed files with 76 additions and 5 deletions.
4 changes: 3 additions & 1 deletion src/hotspot/share/gc/shenandoah/shenandoahHeap.cpp
Expand Up @@ -151,7 +151,9 @@ jint ShenandoahHeap::initialize() {
Universe::check_alignment(init_byte_size, reg_size_bytes, "Shenandoah heap");

_num_regions = ShenandoahHeapRegion::region_count();
assert(_num_regions == (max_byte_size / reg_size_bytes), "Must match");
assert(_num_regions == (max_byte_size / reg_size_bytes),
"Regions should cover entire heap exactly: " SIZE_FORMAT " != " SIZE_FORMAT "/" SIZE_FORMAT,
_num_regions, max_byte_size, reg_size_bytes);

// Now we know the number of regions, initialize the heuristics.
initialize_heuristics();
Expand Down
8 changes: 4 additions & 4 deletions src/hotspot/share/gc/shenandoah/shenandoahHeapRegion.cpp
Expand Up @@ -541,10 +541,10 @@ void ShenandoahHeapRegion::setup_sizes(size_t max_heap_size) {
}

// Make sure region size is at least one large page, if enabled.
// Otherwise, uncommitting one region may falsely uncommit the adjacent
// regions too.
// Also see shenandoahArguments.cpp, where it handles UseLargePages.
if (UseLargePages && ShenandoahUncommit) {
// The heap sizes would be rounded by heap initialization code by
// page size, so we need to round up the region size too, to cover
// the heap exactly.
if (UseLargePages) {
region_size = MAX2(region_size, os::large_page_size());
}

Expand Down
69 changes: 69 additions & 0 deletions test/hotspot/jtreg/gc/shenandoah/options/TestLargePages.java
@@ -0,0 +1,69 @@
/*
* Copyright (c) 2021, Red Hat, Inc. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*
*/

/*
* @test id=default
* @requires vm.gc.Shenandoah
*
* @run main/othervm -XX:+UseShenandoahGC -Xms128m -Xmx128m TestLargePages
* @run main/othervm -XX:+UseShenandoahGC -Xmx128m TestLargePages
* @run main/othervm -XX:+UseShenandoahGC -Xms128m TestLargePages
*
* @run main/othervm -XX:+UseShenandoahGC -Xms131m -Xmx131m TestLargePages
* @run main/othervm -XX:+UseShenandoahGC -Xmx131m TestLargePages
* @run main/othervm -XX:+UseShenandoahGC -Xms131m TestLargePages
*/

/*
* @test id=lp
* @requires vm.gc.Shenandoah
*
* @run main/othervm -XX:+UseShenandoahGC -XX:+UseLargePages -Xms128m -Xmx128m TestLargePages
* @run main/othervm -XX:+UseShenandoahGC -XX:+UseLargePages -Xmx128m TestLargePages
* @run main/othervm -XX:+UseShenandoahGC -XX:+UseLargePages -Xms128m TestLargePages
*
* @run main/othervm -XX:+UseShenandoahGC -XX:+UseLargePages -Xms131m -Xmx131m TestLargePages
* @run main/othervm -XX:+UseShenandoahGC -XX:+UseLargePages -Xmx131m TestLargePages
* @run main/othervm -XX:+UseShenandoahGC -XX:+UseLargePages -Xms131m TestLargePages
*/

/*
* @test id=thp
* @requires vm.gc.Shenandoah
* @requires os.family == "linux"
*
* @run main/othervm -XX:+UseShenandoahGC -XX:+UseTransparentHugePages -Xms128m -Xmx128m TestLargePages
* @run main/othervm -XX:+UseShenandoahGC -XX:+UseTransparentHugePages -Xmx128m TestLargePages
* @run main/othervm -XX:+UseShenandoahGC -XX:+UseTransparentHugePages -Xms128m TestLargePages
*
* @run main/othervm -XX:+UseShenandoahGC -XX:+UseTransparentHugePages -Xms131m -Xmx131m TestLargePages
* @run main/othervm -XX:+UseShenandoahGC -XX:+UseTransparentHugePages -Xmx131m TestLargePages
* @run main/othervm -XX:+UseShenandoahGC -XX:+UseTransparentHugePages -Xms131m TestLargePages
*/

public class TestLargePages {
public static void main(String[] args) {
// Everything is checked on initialization
}
}

1 comment on commit e0060a3

@openjdk-notifier
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please sign in to comment.