Skip to content

Commit ef71c32

Browse files
committed
8310110: Shenandoah: Trace page sizes
Reviewed-by: shade, rkennke
1 parent c3f10e8 commit ef71c32

File tree

1 file changed

+35
-8
lines changed

1 file changed

+35
-8
lines changed

src/hotspot/share/gc/shenandoah/shenandoahHeap.cpp

+35-8
Original file line numberDiff line numberDiff line change
@@ -192,6 +192,10 @@ jint ShenandoahHeap::initialize() {
192192

193193
assert((((size_t) base()) & ShenandoahHeapRegion::region_size_bytes_mask()) == 0,
194194
"Misaligned heap: " PTR_FORMAT, p2i(base()));
195+
os::trace_page_sizes_for_requested_size("Heap",
196+
max_byte_size, heap_alignment,
197+
heap_rs.base(),
198+
heap_rs.size(), heap_rs.page_size());
195199

196200
#if SHENANDOAH_OPTIMIZED_MARKTASK
197201
// The optimized ShenandoahMarkTask takes some bits away from the full object bits.
@@ -215,8 +219,8 @@ jint ShenandoahHeap::initialize() {
215219
// Reserve and commit memory for bitmap(s)
216220
//
217221

218-
_bitmap_size = ShenandoahMarkBitMap::compute_size(heap_rs.size());
219-
_bitmap_size = align_up(_bitmap_size, bitmap_page_size);
222+
size_t bitmap_size_orig = ShenandoahMarkBitMap::compute_size(heap_rs.size());
223+
_bitmap_size = align_up(bitmap_size_orig, bitmap_page_size);
220224

221225
size_t bitmap_bytes_per_region = reg_size_bytes / ShenandoahMarkBitMap::heap_map_factor();
222226

@@ -242,6 +246,10 @@ jint ShenandoahHeap::initialize() {
242246
_bitmap_bytes_per_slice, bitmap_page_size);
243247

244248
ReservedSpace bitmap(_bitmap_size, bitmap_page_size);
249+
os::trace_page_sizes_for_requested_size("Mark Bitmap",
250+
bitmap_size_orig, bitmap_page_size,
251+
bitmap.base(),
252+
bitmap.size(), bitmap.page_size());
245253
MemTracker::record_virtual_memory_type(bitmap.base(), mtGC);
246254
_bitmap_region = MemRegion((HeapWord*) bitmap.base(), bitmap.size() / HeapWordSize);
247255
_bitmap_region_special = bitmap.special();
@@ -258,6 +266,10 @@ jint ShenandoahHeap::initialize() {
258266

259267
if (ShenandoahVerify) {
260268
ReservedSpace verify_bitmap(_bitmap_size, bitmap_page_size);
269+
os::trace_page_sizes_for_requested_size("Verify Bitmap",
270+
bitmap_size_orig, bitmap_page_size,
271+
verify_bitmap.base(),
272+
verify_bitmap.size(), verify_bitmap.page_size());
261273
if (!verify_bitmap.special()) {
262274
os::commit_memory_or_exit(verify_bitmap.base(), verify_bitmap.size(), bitmap_page_size, false,
263275
"Cannot commit verification bitmap memory");
@@ -270,6 +282,10 @@ jint ShenandoahHeap::initialize() {
270282

271283
// Reserve aux bitmap for use in object_iterate(). We don't commit it here.
272284
ReservedSpace aux_bitmap(_bitmap_size, bitmap_page_size);
285+
os::trace_page_sizes_for_requested_size("Aux Bitmap",
286+
bitmap_size_orig, bitmap_page_size,
287+
aux_bitmap.base(),
288+
aux_bitmap.size(), aux_bitmap.page_size());
273289
MemTracker::record_virtual_memory_type(aux_bitmap.base(), mtGC);
274290
_aux_bitmap_region = MemRegion((HeapWord*) aux_bitmap.base(), aux_bitmap.size() / HeapWordSize);
275291
_aux_bitmap_region_special = aux_bitmap.special();
@@ -279,10 +295,15 @@ jint ShenandoahHeap::initialize() {
279295
// Create regions and region sets
280296
//
281297
size_t region_align = align_up(sizeof(ShenandoahHeapRegion), SHENANDOAH_CACHE_LINE_SIZE);
282-
size_t region_storage_size = align_up(region_align * _num_regions, region_page_size);
283-
region_storage_size = align_up(region_storage_size, os::vm_allocation_granularity());
298+
size_t region_storage_size_orig = region_align * _num_regions;
299+
size_t region_storage_size = align_up(region_storage_size_orig,
300+
MAX2(region_page_size, os::vm_allocation_granularity()));
284301

285302
ReservedSpace region_storage(region_storage_size, region_page_size);
303+
os::trace_page_sizes_for_requested_size("Region Storage",
304+
region_storage_size_orig, region_page_size,
305+
region_storage.base(),
306+
region_storage.size(), region_storage.page_size());
286307
MemTracker::record_virtual_memory_type(region_storage.base(), mtGC);
287308
if (!region_storage.special()) {
288309
os::commit_memory_or_exit(region_storage.base(), region_storage_size, region_page_size, false,
@@ -293,16 +314,18 @@ jint ShenandoahHeap::initialize() {
293314
// Go up until a sensible limit (subject to encoding constraints) and try to reserve the space there.
294315
// If not successful, bite a bullet and allocate at whatever address.
295316
{
296-
size_t cset_align = MAX2<size_t>(os::vm_page_size(), os::vm_allocation_granularity());
297-
size_t cset_size = align_up(((size_t) sh_rs.base() + sh_rs.size()) >> ShenandoahHeapRegion::region_size_bytes_shift(), cset_align);
317+
const size_t cset_align = MAX2<size_t>(os::vm_page_size(), os::vm_allocation_granularity());
318+
const size_t cset_size = align_up(((size_t) sh_rs.base() + sh_rs.size()) >> ShenandoahHeapRegion::region_size_bytes_shift(), cset_align);
319+
const size_t cset_page_size = os::vm_page_size();
298320

299321
uintptr_t min = round_up_power_of_2(cset_align);
300322
uintptr_t max = (1u << 30u);
323+
ReservedSpace cset_rs;
301324

302325
for (uintptr_t addr = min; addr <= max; addr <<= 1u) {
303326
char* req_addr = (char*)addr;
304327
assert(is_aligned(req_addr, cset_align), "Should be aligned");
305-
ReservedSpace cset_rs(cset_size, cset_align, os::vm_page_size(), req_addr);
328+
cset_rs = ReservedSpace(cset_size, cset_align, cset_page_size, req_addr);
306329
if (cset_rs.is_reserved()) {
307330
assert(cset_rs.base() == req_addr, "Allocated where requested: " PTR_FORMAT ", " PTR_FORMAT, p2i(cset_rs.base()), addr);
308331
_collection_set = new ShenandoahCollectionSet(this, cset_rs, sh_rs.base());
@@ -311,9 +334,13 @@ jint ShenandoahHeap::initialize() {
311334
}
312335

313336
if (_collection_set == nullptr) {
314-
ReservedSpace cset_rs(cset_size, cset_align, os::vm_page_size());
337+
cset_rs = ReservedSpace(cset_size, cset_align, os::vm_page_size());
315338
_collection_set = new ShenandoahCollectionSet(this, cset_rs, sh_rs.base());
316339
}
340+
os::trace_page_sizes_for_requested_size("Collection Set",
341+
cset_size, cset_page_size,
342+
cset_rs.base(),
343+
cset_rs.size(), cset_rs.page_size());
317344
}
318345

319346
_regions = NEW_C_HEAP_ARRAY(ShenandoahHeapRegion*, _num_regions, mtGC);

0 commit comments

Comments
 (0)