RFR: 8344883: Do not use mtNone if we know the tag type [v2]
    Stefan Karlsson 
    stefank at openjdk.org
       
    Fri Mar 28 08:28:23 UTC 2025
    
    
  
On Thu, 27 Mar 2025 19:47:56 GMT, Gerard Ziemski <gziemski at openjdk.org> wrote:
>> This is a follow-up to #21843. Here we are focusing on removing the mem tag paremeter with default value of mtNone, to force everyone to provide mem tag, if known.
>> 
>> I tried to fill in tag, when I was pretty certain that I had the right type.
>> 
>> At least one more follow-up will be needed after this, to change the remaining mtNone to valid values.
>
> Gerard Ziemski has updated the pull request incrementally with one additional commit since the last revision:
> 
>   work
I went over the patch and added suggestions for places where I think you're using the wrong tag, or where I think it is obvious that there's a better tag than mtNone. I've also suggested removal of the now redundant 'executable' argument, which I want to see as little of as possible given that it is a wart on the memory reservation APIs (IMHO).
src/hotspot/os/bsd/gc/z/zPhysicalMemoryBacking_bsd.cpp line 81:
> 79: 
> 80:   // Reserve address space for backing memory
> 81:   _base = (uintptr_t)os::reserve_memory(max_capacity, mtJavaHeap, false);
Suggestion:
  _base = (uintptr_t)os::reserve_memory(max_capacity, mtJavaHeap);
src/hotspot/os/windows/os_windows.cpp line 3261:
> 3259:   assert(extra_size >= size, "overflow, size is too large to allow alignment");
> 3260: 
> 3261: 
Suggestion:
src/hotspot/os/windows/os_windows.cpp line 3267:
> 3265:   for (int attempt = 0; attempt < max_attempts && aligned_base == nullptr; attempt ++) {
> 3266:     char* extra_base = file_desc != -1 ? os::map_memory_to_file(extra_size, file_desc, mem_tag) :
> 3267:                                          os::reserve_memory(extra_size, mem_tag, false);
Suggestion:
                                         os::reserve_memory(extra_size, mem_tag);
src/hotspot/os/windows/os_windows.cpp line 3284:
> 3282:     // Which may fail, hence the loop.
> 3283:     aligned_base = file_desc != -1 ? os::attempt_map_memory_to_file_at(aligned_base, size, file_desc, mem_tag) :
> 3284:                                      os::attempt_reserve_memory_at(aligned_base, size, mem_tag, false);
Suggestion:
                                     os::attempt_reserve_memory_at(aligned_base, size, mem_tag);
src/hotspot/os/windows/perfMemory_windows.cpp line 57:
> 55: 
> 56:   // allocate an aligned chuck of memory
> 57:   char* mapAddress = os::reserve_memory(size, mtNone);
To match with the other platforms:
Suggestion:
  char* mapAddress = os::reserve_memory(size, mtInternal);
src/hotspot/share/classfile/compactHashtable.cpp line 229:
> 227:     quit("Unable to open hashtable dump file", filename);
> 228:   }
> 229:   _base = os::map_memory(_fd, filename, 0, nullptr, _size, mtSymbol, true, false);
This seems to be used to read Symbols *OR* String. This probably needs to be something else. I suggest to revert to mtNone and figure out the appropriate tag later.
Suggestion:
  _base = os::map_memory(_fd, filename, 0, nullptr, _size, mtNone, true, false);
src/hotspot/share/gc/parallel/parMarkBitMap.cpp line 52:
> 50:                                              rs_align,
> 51:                                              page_sz,
> 52:                                              mtNone);
Suggestion:
                                             mtGC);
src/hotspot/share/gc/shenandoah/shenandoahCardTable.cpp line 62:
> 60:   _write_byte_map_base = _byte_map_base;
> 61: 
> 62:   ReservedSpace read_space = MemoryReserver::reserve(_byte_map_size, rs_align, _page_size, mtNone);
Suggestion:
  ReservedSpace read_space = MemoryReserver::reserve(_byte_map_size, rs_align, _page_size, mtGC);
src/hotspot/share/memory/allocation.inline.hpp line 61:
> 59:   size_t size = size_for(length);
> 60: 
> 61:   char* addr = os::reserve_memory(size, mem_tag, !ExecMem);
Suggestion:
  char* addr = os::reserve_memory(size, mem_tag);
src/hotspot/share/memory/allocation.inline.hpp line 78:
> 76:   size_t size = size_for(length);
> 77: 
> 78:   char* addr = os::reserve_memory(size, mem_tag, !ExecMem);
Suggestion:
  char* addr = os::reserve_memory(size, mem_tag);
src/hotspot/share/memory/metaspace/testHelpers.cpp line 85:
> 83:   if (reserve_limit > 0) {
> 84:     // have reserve limit -> non-expandable context
> 85:     _rs = MemoryReserver::reserve(reserve_limit * BytesPerWord, Metaspace::reserve_alignment(), os::vm_page_size(), mtNone);
Suggestion:
    _rs = MemoryReserver::reserve(reserve_limit * BytesPerWord, Metaspace::reserve_alignment(), os::vm_page_size(), mtTest);
src/hotspot/share/memory/metaspace/virtualSpaceNode.cpp line 259:
> 257:   ReservedSpace rs = MemoryReserver::reserve(word_size * BytesPerWord,
> 258:                                              Settings::virtual_space_node_reserve_alignment_words() * BytesPerWord,
> 259:                                              os::vm_page_size(), mtNone);
Suggestion:
                                             os::vm_page_size(), mtMetaspace);
src/hotspot/share/prims/jni.cpp line 2403:
> 2401:   if (bad_address == nullptr) {
> 2402:     size_t size = os::vm_allocation_granularity();
> 2403:     bad_address = os::reserve_memory(size, mtInternal, false);
Suggestion:
    bad_address = os::reserve_memory(size, mtInternal);
src/hotspot/share/prims/whitebox.cpp line 720:
> 718: 
> 719: WB_ENTRY(jlong, WB_NMTReserveMemory(JNIEnv* env, jobject o, jlong size))
> 720:   return (jlong)(uintptr_t)os::reserve_memory(size, mtTest, false);
Suggestion:
  return (jlong)(uintptr_t)os::reserve_memory(size, mtTest);
src/hotspot/share/prims/whitebox.cpp line 724:
> 722: 
> 723: WB_ENTRY(jlong, WB_NMTAttemptReserveMemoryAt(JNIEnv* env, jobject o, jlong addr, jlong size))
> 724:   return (jlong)(uintptr_t)os::attempt_reserve_memory_at((char*)(uintptr_t)addr, (size_t)size, mtTest, false);
Suggestion:
  return (jlong)(uintptr_t)os::attempt_reserve_memory_at((char*)(uintptr_t)addr, (size_t)size, mtTest);
src/hotspot/share/prims/whitebox.cpp line 1515:
> 1513:   static volatile char* p;
> 1514: 
> 1515:   p = os::reserve_memory(os::vm_allocation_granularity(), mtSymbol);
Suggestion:
  p = os::reserve_memory(os::vm_allocation_granularity(), mtTest);
src/hotspot/share/runtime/os.cpp line 2130:
> 2128:     log_trace(os, map)(ERRFMT, ERRFMTARGS);
> 2129:     log_debug(os, map)("successfully attached at " PTR_FORMAT, p2i(result));
> 2130:     MemTracker::record_virtual_memory_reserve((address)result, bytes, CALLER_PC, mtNone);
I think attempt_reserve_memory_between should provide the correct mem tag.
src/hotspot/share/runtime/os.cpp line 2336:
> 2334:   if (result != nullptr) {
> 2335:     // The memory is committed
> 2336:     MemTracker::record_virtual_memory_reserve_and_commit((address)result, size, CALLER_PC, mtNone);
reserve_memory_special should take a mem tag, but I guess you intend to do that as a follow-up RFE?
src/hotspot/share/runtime/safepointMechanism.cpp line 60:
> 58:     const size_t page_size = os::vm_page_size();
> 59:     const size_t allocation_size = 2 * page_size;
> 60:     char* polling_page = os::reserve_memory(allocation_size, mtSafepoint, !ExecMem);
Suggestion:
    char* polling_page = os::reserve_memory(allocation_size, mtSafepoint);
src/hotspot/share/utilities/debug.cpp line 715:
> 713: #ifdef CAN_SHOW_REGISTERS_ON_ASSERT
> 714: void initialize_assert_poison() {
> 715:   char* page = os::reserve_memory(os::vm_page_size(), mtInternal, !ExecMem);
Suggestion:
  char* page = os::reserve_memory(os::vm_page_size(), mtInternal);
test/hotspot/gtest/gc/g1/test_stressCommitUncommit.cpp line 86:
> 84:                                              os::vm_allocation_granularity(),
> 85:                                              os::vm_page_size(),
> 86:                                              mtNone);
Suggestion:
                                             mtTest);
test/hotspot/gtest/gc/g1/test_stressCommitUncommit.cpp line 113:
> 111:                                              os::vm_allocation_granularity(),
> 112:                                              os::vm_page_size(),
> 113:                                              mtNone);
Suggestion:
                                             mtTest);
test/hotspot/gtest/memory/test_virtualspace.cpp line 62:
> 60:     ASSERT_PRED2(is_size_aligned, size, os::vm_allocation_granularity());
> 61: 
> 62:     ReservedSpace rs = MemoryReserver::reserve(size, mtNone);
Why did you do this change?
Suggestion:
    ReservedSpace rs = MemoryReserver::reserve(size, mtTest);
test/hotspot/gtest/memory/test_virtualspace.cpp line 76:
> 74:     ASSERT_PRED2(is_size_aligned, size, alignment) << "Incorrect input parameters";
> 75:     size_t page_size = UseLargePages ? os::large_page_size() : os::vm_page_size();
> 76:     ReservedSpace rs = MemoryReserver::reserve(size, alignment, page_size, mtNone);
Suggestion:
    ReservedSpace rs = MemoryReserver::reserve(size, alignment, page_size, mtTest);
test/hotspot/gtest/memory/test_virtualspace.cpp line 104:
> 102:     size_t page_size = large ? os::large_page_size() : os::vm_page_size();
> 103: 
> 104:     ReservedSpace rs = MemoryReserver::reserve(size, alignment, page_size, mtNone);
Suggestion:
    ReservedSpace rs = MemoryReserver::reserve(size, alignment, page_size, mtTest);
test/hotspot/gtest/memory/test_virtualspace.cpp line 215:
> 213:       case Default:
> 214:       case Reserve:
> 215:         return MemoryReserver::reserve(reserve_size_aligned, mtNone);
Suggestion:
        return MemoryReserver::reserve(reserve_size_aligned, mtTest);
test/hotspot/gtest/memory/test_virtualspace.cpp line 221:
> 219:                                        os::vm_allocation_granularity(),
> 220:                                        os::vm_page_size(),
> 221:                                        mtNone);
Suggestion:
                                       mtTest);
test/hotspot/gtest/memory/test_virtualspace.cpp line 300:
> 298:   size_t large_page_size = os::large_page_size();
> 299: 
> 300:   ReservedSpace reserved = MemoryReserver::reserve(large_page_size, large_page_size, large_page_size, mtNone);
Suggestion:
  ReservedSpace reserved = MemoryReserver::reserve(large_page_size, large_page_size, large_page_size, mtTest);
test/hotspot/gtest/memory/test_virtualspace.cpp line 370:
> 368:                                                alignment,
> 369:                                                page_size,
> 370:                                                mtNone);
Suggestion:
                                               mtTest);
test/hotspot/gtest/memory/test_virtualspace.cpp line 388:
> 386:     ASSERT_TRUE(is_aligned(size, os::vm_allocation_granularity())) << "Must be at least AG aligned";
> 387: 
> 388:     ReservedSpace rs = MemoryReserver::reserve(size, mtNone);
Suggestion:
    ReservedSpace rs = MemoryReserver::reserve(size, mtTest);
test/hotspot/gtest/memory/test_virtualspace.cpp line 416:
> 414:                                                alignment,
> 415:                                                page_size,
> 416:                                                mtNone);
Suggestion:
                                               mtTest);
test/hotspot/gtest/memory/test_virtualspace.cpp line 521:
> 519:     case Reserve:
> 520:       return MemoryReserver::reserve(reserve_size_aligned,
> 521:                                      mtNone);
Suggestion:
                                     mtTest);
test/hotspot/gtest/memory/test_virtualspace.cpp line 527:
> 525:                                      os::vm_allocation_granularity(),
> 526:                                      os::vm_page_size(),
> 527:                                      mtNone);
Suggestion:
                                     mtTest);
test/hotspot/gtest/memory/test_virtualspace.cpp line 585:
> 583:                                                      large_page_size,
> 584:                                                      large_page_size,
> 585:                                                      mtNone);
Suggestion:
                                                     mtTest);
test/hotspot/gtest/nmt/test_nmt_locationprinting.cpp line 116:
> 114: 
> 115: static void test_for_mmap(size_t sz, ssize_t offset) {
> 116:   char* addr = os::reserve_memory(sz, mtTest, false);
Suggestion:
  char* addr = os::reserve_memory(sz, mtTest);
test/hotspot/gtest/runtime/test_committed_virtualmemory.cpp line 94:
> 92:     const size_t page_sz = os::vm_page_size();
> 93:     const size_t size = num_pages * page_sz;
> 94:     char* base = os::reserve_memory(size, mtThreadStack, !ExecMem);
Suggestion:
    char* base = os::reserve_memory(size, mtThreadStack);
test/hotspot/gtest/runtime/test_committed_virtualmemory.cpp line 162:
> 160:     const size_t num_pages = 4;
> 161:     const size_t size = num_pages * page_sz;
> 162:     char* base = os::reserve_memory(size, mtTest, !ExecMem);
Suggestion:
    char* base = os::reserve_memory(size, mtTest);
test/hotspot/gtest/runtime/test_committed_virtualmemory.cpp line 208:
> 206:     const size_t size = num_pages * page_sz;
> 207: 
> 208:     char* base = os::reserve_memory(size, mtTest, !ExecMem);
Suggestion:
    char* base = os::reserve_memory(size, mtTest);
test/hotspot/gtest/runtime/test_os.cpp line 261:
> 259:   // two pages, first one protected.
> 260:   const size_t ps = os::vm_page_size();
> 261:   char* two_pages = os::reserve_memory(ps * 2, mtTest, false);
Suggestion:
  char* two_pages = os::reserve_memory(ps * 2, mtTest);
test/hotspot/gtest/runtime/test_os.cpp line 533:
> 531:     size_t total_range_len = num_stripes * stripe_len;
> 532:     // Reserve a large contiguous area to get the address space...
> 533:     p = (address)os::reserve_memory(total_range_len, mtNone);
Suggestion:
    p = (address)os::reserve_memory(total_range_len, mtTest);
test/hotspot/gtest/runtime/test_os.cpp line 547:
> 545:       const bool executable = stripe % 2 == 0;
> 546: #endif
> 547:       q = (address)os::attempt_reserve_memory_at((char*)q, stripe_len, mtNone, executable);
Suggestion:
      q = (address)os::attempt_reserve_memory_at((char*)q, stripe_len, mtTest, executable);
test/hotspot/gtest/runtime/test_os.cpp line 567:
> 565:   assert(is_aligned(stripe_len, os::vm_allocation_granularity()), "Sanity");
> 566:   size_t total_range_len = num_stripes * stripe_len;
> 567:   address p = (address)os::reserve_memory(total_range_len, mtNone);
Suggestion:
  address p = (address)os::reserve_memory(total_range_len, mtTest);
test/hotspot/gtest/runtime/test_os.cpp line 634:
> 632: 
> 633:   // ...re-reserve the middle stripes. This should work unless release silently failed.
> 634:   address p2 = (address)os::attempt_reserve_memory_at((char*)p_middle_stripes, middle_stripe_len, mtNone);
Suggestion:
  address p2 = (address)os::attempt_reserve_memory_at((char*)p_middle_stripes, middle_stripe_len, mtTest);
test/hotspot/gtest/runtime/test_os.cpp line 657:
> 655: TEST_VM(os, release_bad_ranges) {
> 656: #endif
> 657:   char* p = os::reserve_memory(4 * M, mtNone);
Suggestion:
  char* p = os::reserve_memory(4 * M, mtTest);
test/hotspot/gtest/runtime/test_os.cpp line 692:
> 690:   // // make things even more difficult by trying to reserve at the border of the region
> 691:   address border = p + num_stripes * stripe_len;
> 692:   address p2 = (address)os::attempt_reserve_memory_at((char*)border, stripe_len, mtNone);
Suggestion:
  address p2 = (address)os::attempt_reserve_memory_at((char*)border, stripe_len, mtTest);
test/hotspot/gtest/runtime/test_os.cpp line 733:
> 731:   // Reserve a small range and fill it with a marker string, should show up
> 732:   // on implementations displaying range snippets
> 733:   char* p = os::reserve_memory(1 * M, mtInternal, false);
Suggestion:
  char* p = os::reserve_memory(1 * M, mtInternal);
test/hotspot/gtest/runtime/test_os.cpp line 757:
> 755:   // A simple allocation
> 756:   {
> 757:     address p = (address)os::reserve_memory(total_range_len, mtNone);
Suggestion:
    address p = (address)os::reserve_memory(total_range_len, mtTest);
test/hotspot/gtest/runtime/test_os.cpp line 1062:
> 1060: 
> 1061: TEST_VM(os, reserve_at_wish_address_shall_not_replace_mappings_smallpages) {
> 1062:   char* p1 = os::reserve_memory(M, mtTest, false);
Suggestion:
  char* p1 = os::reserve_memory(M, mtTest);
test/hotspot/gtest/runtime/test_os.cpp line 1072:
> 1070:   if (UseLargePages && !os::can_commit_large_page_memory()) { // aka special
> 1071:     const size_t lpsz = os::large_page_size();
> 1072:     char* p1 = os::reserve_memory_aligned(lpsz, lpsz, mtTest, false);
Suggestion:
    char* p1 = os::reserve_memory_aligned(lpsz, lpsz, mtTest);
test/hotspot/gtest/runtime/test_os.cpp line 1098:
> 1096:   const size_t size = pages * page_sz;
> 1097: 
> 1098:   char* base = os::reserve_memory(size, mtTest, false);
Suggestion:
  char* base = os::reserve_memory(size, mtTest);
test/hotspot/gtest/runtime/test_os_linux.cpp line 357:
> 355:   const bool useThp = UseTransparentHugePages;
> 356:   UseTransparentHugePages = true;
> 357:   char* const heap = os::reserve_memory(size, mtInternal, false);
Suggestion:
  char* const heap = os::reserve_memory(size, mtInternal);
-------------
Changes requested by stefank (Reviewer).
PR Review: https://git.openjdk.org/jdk/pull/24282#pullrequestreview-2724588390
PR Review Comment: https://git.openjdk.org/jdk/pull/24282#discussion_r2018111000
PR Review Comment: https://git.openjdk.org/jdk/pull/24282#discussion_r2018112894
PR Review Comment: https://git.openjdk.org/jdk/pull/24282#discussion_r2018113093
PR Review Comment: https://git.openjdk.org/jdk/pull/24282#discussion_r2018113247
PR Review Comment: https://git.openjdk.org/jdk/pull/24282#discussion_r2018114051
PR Review Comment: https://git.openjdk.org/jdk/pull/24282#discussion_r2018121233
PR Review Comment: https://git.openjdk.org/jdk/pull/24282#discussion_r2018121891
PR Review Comment: https://git.openjdk.org/jdk/pull/24282#discussion_r2018122312
PR Review Comment: https://git.openjdk.org/jdk/pull/24282#discussion_r2018122564
PR Review Comment: https://git.openjdk.org/jdk/pull/24282#discussion_r2018122715
PR Review Comment: https://git.openjdk.org/jdk/pull/24282#discussion_r2018123591
PR Review Comment: https://git.openjdk.org/jdk/pull/24282#discussion_r2018124074
PR Review Comment: https://git.openjdk.org/jdk/pull/24282#discussion_r2018125155
PR Review Comment: https://git.openjdk.org/jdk/pull/24282#discussion_r2018125568
PR Review Comment: https://git.openjdk.org/jdk/pull/24282#discussion_r2018125876
PR Review Comment: https://git.openjdk.org/jdk/pull/24282#discussion_r2018126443
PR Review Comment: https://git.openjdk.org/jdk/pull/24282#discussion_r2018128479
PR Review Comment: https://git.openjdk.org/jdk/pull/24282#discussion_r2018129358
PR Review Comment: https://git.openjdk.org/jdk/pull/24282#discussion_r2018098166
PR Review Comment: https://git.openjdk.org/jdk/pull/24282#discussion_r2018098617
PR Review Comment: https://git.openjdk.org/jdk/pull/24282#discussion_r2018098956
PR Review Comment: https://git.openjdk.org/jdk/pull/24282#discussion_r2018099157
PR Review Comment: https://git.openjdk.org/jdk/pull/24282#discussion_r2018100108
PR Review Comment: https://git.openjdk.org/jdk/pull/24282#discussion_r2018100521
PR Review Comment: https://git.openjdk.org/jdk/pull/24282#discussion_r2018100717
PR Review Comment: https://git.openjdk.org/jdk/pull/24282#discussion_r2018100870
PR Review Comment: https://git.openjdk.org/jdk/pull/24282#discussion_r2018101049
PR Review Comment: https://git.openjdk.org/jdk/pull/24282#discussion_r2018101200
PR Review Comment: https://git.openjdk.org/jdk/pull/24282#discussion_r2018101373
PR Review Comment: https://git.openjdk.org/jdk/pull/24282#discussion_r2018101541
PR Review Comment: https://git.openjdk.org/jdk/pull/24282#discussion_r2018101692
PR Review Comment: https://git.openjdk.org/jdk/pull/24282#discussion_r2018101911
PR Review Comment: https://git.openjdk.org/jdk/pull/24282#discussion_r2018102064
PR Review Comment: https://git.openjdk.org/jdk/pull/24282#discussion_r2018102298
PR Review Comment: https://git.openjdk.org/jdk/pull/24282#discussion_r2018102633
PR Review Comment: https://git.openjdk.org/jdk/pull/24282#discussion_r2018103596
PR Review Comment: https://git.openjdk.org/jdk/pull/24282#discussion_r2018103912
PR Review Comment: https://git.openjdk.org/jdk/pull/24282#discussion_r2018104093
PR Review Comment: https://git.openjdk.org/jdk/pull/24282#discussion_r2018104376
PR Review Comment: https://git.openjdk.org/jdk/pull/24282#discussion_r2018104743
PR Review Comment: https://git.openjdk.org/jdk/pull/24282#discussion_r2018105030
PR Review Comment: https://git.openjdk.org/jdk/pull/24282#discussion_r2018105216
PR Review Comment: https://git.openjdk.org/jdk/pull/24282#discussion_r2018105410
PR Review Comment: https://git.openjdk.org/jdk/pull/24282#discussion_r2018105552
PR Review Comment: https://git.openjdk.org/jdk/pull/24282#discussion_r2018105686
PR Review Comment: https://git.openjdk.org/jdk/pull/24282#discussion_r2018105792
PR Review Comment: https://git.openjdk.org/jdk/pull/24282#discussion_r2018105928
PR Review Comment: https://git.openjdk.org/jdk/pull/24282#discussion_r2018106123
PR Review Comment: https://git.openjdk.org/jdk/pull/24282#discussion_r2018106324
PR Review Comment: https://git.openjdk.org/jdk/pull/24282#discussion_r2018106474
PR Review Comment: https://git.openjdk.org/jdk/pull/24282#discussion_r2018107303
    
    
More information about the hotspot-dev
mailing list