Skip to content

Commit 735c443

Browse files
wenyuzhaoqinsoonJavad Amiri
authored
PageProtect GC (#75)
* Paging GC support * Increase max_map_count for PageProtect tests. * use per-page side metadata for LOS Co-authored-by: Yi Lin <[email protected]> Co-authored-by: Javad Amiri <[email protected]>
1 parent ad38418 commit 735c443

File tree

6 files changed

+31
-11
lines changed

6 files changed

+31
-11
lines changed

.github/scripts/ci-test.sh

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ build/linux-x86_64-normal-server-$DEBUG_LEVEL/jdk/bin/java -XX:+UseThirdPartyHea
7575
build/linux-x86_64-normal-server-$DEBUG_LEVEL/jdk/bin/java -XX:+UseThirdPartyHeap -server -XX:MetaspaceSize=100M -Xms500M -Xmx500M -jar benchmarks/dacapo-2006-10-MR2.jar fop
7676
#build/linux-x86_64-normal-server-$DEBUG_LEVEL/jdk/bin/java -XX:+UseThirdPartyHeap -server -XX:MetaspaceSize=100M -Xms500M -Xmx500M -jar benchmarks/dacapo-2006-10-MR2.jar jython - does not work for stock build
7777
build/linux-x86_64-normal-server-$DEBUG_LEVEL/jdk/bin/java -XX:+UseThirdPartyHeap -server -XX:MetaspaceSize=100M -Xms500M -Xmx500M -jar benchmarks/dacapo-2006-10-MR2.jar luindex
78-
# build/linux-x86_64-normal-server-$DEBUG_LEVEL/jdk/bin/java -XX:+UseThirdPartyHeap -server -XX:MetaspaceSize=100M -Xms500M -Xmx500M -jar benchmarks/dacapo-2006-10-MR2.jar lusearch
78+
# build/linux-x86_64-normal-server-$DEBUG_LEVEL/jdk/bin/java -XX:+UseThirdPartyHeap -server -XX:MetaspaceSize=100M -Xms500M -Xmx500M -jar benchmarks/dacapo-2006-10-MR2.jar lusearch
7979
#- validation failed
8080
build/linux-x86_64-normal-server-$DEBUG_LEVEL/jdk/bin/java -XX:+UseThirdPartyHeap -server -XX:MetaspaceSize=100M -Xms500M -Xmx500M -jar benchmarks/dacapo-2006-10-MR2.jar pmd
8181
#build/linux-x86_64-normal-server-$DEBUG_LEVEL/jdk/bin/java -XX:+UseThirdPartyHeap -server -XX:MetaspaceSize=100M -Xms500M -Xmx500M -jar benchmarks/dacapo-2006-10-MR2.jar xalan - mmtk-core gets stuck in slowdebug build
@@ -84,3 +84,13 @@ build/linux-x86_64-normal-server-$DEBUG_LEVEL/jdk/bin/java -XX:+UseThirdPartyHea
8484
build/linux-x86_64-normal-server-$DEBUG_LEVEL/jdk/bin/java -XX:+UseThirdPartyHeap -server -XX:MetaspaceSize=100M -Xms500M -Xmx500M -jar benchmarks/dacapo-2006-10-MR2.jar hsqldb
8585
build/linux-x86_64-normal-server-$DEBUG_LEVEL/jdk/bin/java -XX:+UseThirdPartyHeap -server -XX:MetaspaceSize=100M -Xms500M -Xmx500M -jar benchmarks/dacapo-2006-10-MR2.jar eclipse
8686

87+
# --- PageProtect ---
88+
# Make sure this runs last in our tests unless we want to set it back to the default limit.
89+
sudo sysctl -w vm.max_map_count=655300
90+
91+
export MMTK_PLAN=PageProtect
92+
93+
build/linux-x86_64-normal-server-$DEBUG_LEVEL/jdk/bin/java -XX:+UseThirdPartyHeap -server -XX:MetaspaceSize=100M -Xms4G -Xmx4G -jar benchmarks/dacapo-2006-10-MR2.jar antlr
94+
build/linux-x86_64-normal-server-$DEBUG_LEVEL/jdk/bin/java -XX:+UseThirdPartyHeap -server -XX:MetaspaceSize=100M -Xms4G -Xmx4G -jar benchmarks/dacapo-2006-10-MR2.jar fop
95+
build/linux-x86_64-normal-server-$DEBUG_LEVEL/jdk/bin/java -XX:+UseThirdPartyHeap -server -XX:MetaspaceSize=100M -Xms4G -Xmx4G -jar benchmarks/dacapo-2006-10-MR2.jar luindex
96+
# build/linux-x86_64-normal-server-$DEBUG_LEVEL/jdk/bin/java -XX:+UseThirdPartyHeap -server -XX:MetaspaceSize=100M -Xms4G -Xmx4G -jar benchmarks/dacapo-2006-10-MR2.jar pmd

mmtk/Cargo.toml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ lazy_static = "1.1"
2020
# - change branch
2121
# - change repo name
2222
# But other changes including adding/removing whitespaces in commented lines may break the CI.
23-
mmtk = { git = "https://github.com/mmtk/mmtk-core.git", rev = "a288b40997e148817d5b9fed7d8b6039f8e944c7" }
23+
mmtk = { git = "https://github.com/mmtk/mmtk-core.git", rev = "62964b7e552296f2200fbc3ed3df0e472c435631" }
2424
# Uncomment the following to build locally
2525
# mmtk = { path = "../repos/mmtk-core" }
2626

@@ -37,3 +37,4 @@ nogc = []
3737
semispace = []
3838
gencopy = []
3939
marksweep = []
40+
pageprotect = []

mmtk/src/lib.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,8 @@ lazy_static! {
106106
std::env::set_var("MMTK_PLAN", "GenCopy");
107107
#[cfg(feature = "marksweep")]
108108
std::env::set_var("MMTK_PLAN", "MarkSweep");
109+
#[cfg(feature = "pageprotect")]
110+
std::env::set_var("MMTK_PLAN", "PageProtect");
109111
MMTK::new()
110112
};
111113
}

mmtk/src/vm_metadata/constants.rs

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
pub(super) use mmtk::util::constants::LOG_BITS_IN_WORD;
2+
use mmtk::util::constants::LOG_BYTES_IN_PAGE;
23
use mmtk::util::metadata::header_metadata::HeaderMetadataSpec;
3-
#[cfg(target_pointer_width = "32")]
4-
use mmtk::util::metadata::metadata_bytes_per_chunk;
5-
use mmtk::util::metadata::side_metadata::{SideMetadataSpec, GLOBAL_SIDE_METADATA_BASE_ADDRESS};
4+
use mmtk::util::metadata::side_metadata::{
5+
SideMetadataSpec, GLOBAL_SIDE_METADATA_VM_BASE_ADDRESS, LOCAL_SIDE_METADATA_VM_BASE_ADDRESS,
6+
};
67
use mmtk::util::metadata::MetadataSpec;
78

89
#[cfg(target_pointer_width = "64")]
@@ -19,7 +20,7 @@ pub(crate) const FORWARDING_POINTER_OFFSET: usize = 0;
1920
pub(crate) const LOGGING_SIDE_METADATA_SPEC: MetadataSpec =
2021
MetadataSpec::OnSide(SideMetadataSpec {
2122
is_global: true,
22-
offset: GLOBAL_SIDE_METADATA_BASE_ADDRESS.as_usize(),
23+
offset: GLOBAL_SIDE_METADATA_VM_BASE_ADDRESS.as_usize(),
2324
log_num_of_bits: 0,
2425
log_min_obj_size: 3,
2526
});
@@ -53,9 +54,15 @@ pub(crate) const MARKING_METADATA_SPEC: MetadataSpec = MetadataSpec::InHeader(He
5354

5455
/// PolicySpecific mark-and-nursery bits metadata spec
5556
/// 2-bits per object
56-
pub(crate) const LOS_METADATA_SPEC: MetadataSpec = MetadataSpec::InHeader(HeaderMetadataSpec {
57-
bit_offset: FORWARDING_BITS_OFFSET as isize,
58-
num_of_bits: 2,
57+
pub(crate) const LOS_METADATA_SPEC: MetadataSpec = MetadataSpec::OnSide(SideMetadataSpec {
58+
is_global: false,
59+
offset: if cfg!(target_pointer_width = "64") {
60+
LOCAL_SIDE_METADATA_VM_BASE_ADDRESS.as_usize()
61+
} else {
62+
0
63+
},
64+
log_num_of_bits: 1,
65+
log_min_obj_size: LOG_BYTES_IN_PAGE as usize,
5966
});
6067

6168
// PolicySpecific MetadataSpecs - End

openjdk/mmtkBarrierSetAssembler_x86.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ void MMTkBarrierSetAssembler::eden_allocate(MacroAssembler* masm, Register threa
4444
// But we need to figure out which allocator we are using by querying MMTk.
4545
AllocatorSelector selector = get_allocator_mapping(AllocatorDefault);
4646

47-
if (selector.tag == TAG_MALLOC) {
47+
if (selector.tag == TAG_MALLOC || selector.tag == TAG_LARGE_OBJECT) {
4848
__ jmp(slow_case);
4949
return;
5050
}

openjdk/mmtkBarrierSetC2.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ void MMTkBarrierSetC2::expand_allocate(
8181

8282
if (x->C->env()->dtrace_alloc_probes() || !MMTK_ENABLE_ALLOCATION_FASTPATH
8383
// Malloc allocator has no fastpath
84-
|| (selector.tag == TAG_MALLOC)) {
84+
|| (selector.tag == TAG_MALLOC) || selector.tag == TAG_LARGE_OBJECT) {
8585
// Force slow-path allocation
8686
always_slow = true;
8787
initial_slow_test = NULL;

0 commit comments

Comments
 (0)