Skip to content

Commit 0abfa3b

Browse files
8304824: NMT should not use ThreadCritical
Reviewed-by: stuefe, dholmes, jsjolen
1 parent 88dc655 commit 0abfa3b

15 files changed

+41
-43
lines changed

src/hotspot/os/posix/perfMemory_posix.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1086,7 +1086,7 @@ static char* mmap_create_shared(size_t size) {
10861086
static void unmap_shared(char* addr, size_t bytes) {
10871087
int res;
10881088
if (MemTracker::enabled()) {
1089-
ThreadCritical tc;
1089+
NmtVirtualMemoryLocker ml;
10901090
res = ::munmap(addr, bytes);
10911091
if (res == 0) {
10921092
MemTracker::record_virtual_memory_release((address)addr, bytes);

src/hotspot/os/windows/os_windows.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3825,7 +3825,8 @@ bool os::pd_release_memory(char* addr, size_t bytes) {
38253825
if (err != nullptr) {
38263826
log_warning(os)("bad release: [" PTR_FORMAT "-" PTR_FORMAT "): %s", p2i(start), p2i(end), err);
38273827
#ifdef ASSERT
3828-
os::print_memory_mappings((char*)start, bytes, tty);
3828+
fileStream fs(stdout);
3829+
os::print_memory_mappings((char*)start, bytes, &fs);
38293830
assert(false, "bad release: [" PTR_FORMAT "-" PTR_FORMAT "): %s", p2i(start), p2i(end), err);
38303831
#endif
38313832
return false;

src/hotspot/os/windows/perfMemory_windows.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1803,7 +1803,7 @@ void PerfMemory::detach(char* addr, size_t bytes) {
18031803

18041804
if (MemTracker::enabled()) {
18051805
// it does not go through os api, the operation has to record from here
1806-
ThreadCritical tc;
1806+
NmtVirtualMemoryLocker ml;
18071807
remove_file_mapping(addr);
18081808
MemTracker::record_virtual_memory_release((address)addr, bytes);
18091809
} else {

src/hotspot/share/nmt/memBaseline.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,7 @@ void MemBaseline::baseline_summary() {
141141
MallocMemorySummary::snapshot(&_malloc_memory_snapshot);
142142
VirtualMemorySummary::snapshot(&_virtual_memory_snapshot);
143143
{
144-
MemoryFileTracker::Instance::Locker lock;
144+
NmtVirtualMemoryLocker ml;
145145
MemoryFileTracker::Instance::summary_snapshot(&_virtual_memory_snapshot);
146146
}
147147

src/hotspot/share/nmt/memReporter.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -465,7 +465,7 @@ void MemDetailReporter::report_virtual_memory_region(const ReservedMemoryRegion*
465465
void MemDetailReporter::report_memory_file_allocations() {
466466
stringStream st;
467467
{
468-
MemoryFileTracker::Instance::Locker lock;
468+
NmtVirtualMemoryLocker ml;
469469
MemoryFileTracker::Instance::print_all_reports_on(&st, scale());
470470
}
471471
output()->print_raw(st.freeze());

src/hotspot/share/nmt/memTracker.hpp

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@
3131
#include "nmt/threadStackTracker.hpp"
3232
#include "nmt/virtualMemoryTracker.hpp"
3333
#include "runtime/mutexLocker.hpp"
34-
#include "runtime/threadCritical.hpp"
3534
#include "utilities/debug.hpp"
3635
#include "utilities/nativeCallStack.hpp"
3736

@@ -125,7 +124,7 @@ class MemTracker : AllStatic {
125124
assert_post_init();
126125
if (!enabled()) return;
127126
if (addr != nullptr) {
128-
ThreadCritical tc;
127+
NmtVirtualMemoryLocker ml;
129128
VirtualMemoryTracker::add_reserved_region((address)addr, size, stack, mem_tag);
130129
}
131130
}
@@ -151,7 +150,7 @@ class MemTracker : AllStatic {
151150
assert_post_init();
152151
if (!enabled()) return;
153152
if (addr != nullptr) {
154-
ThreadCritical tc;
153+
NmtVirtualMemoryLocker ml;
155154
VirtualMemoryTracker::add_reserved_region((address)addr, size, stack, mem_tag);
156155
VirtualMemoryTracker::add_committed_region((address)addr, size, stack);
157156
}
@@ -162,23 +161,23 @@ class MemTracker : AllStatic {
162161
assert_post_init();
163162
if (!enabled()) return;
164163
if (addr != nullptr) {
165-
ThreadCritical tc;
164+
NmtVirtualMemoryLocker ml;
166165
VirtualMemoryTracker::add_committed_region((address)addr, size, stack);
167166
}
168167
}
169168

170169
static inline MemoryFileTracker::MemoryFile* register_file(const char* descriptive_name) {
171170
assert_post_init();
172171
if (!enabled()) return nullptr;
173-
MemoryFileTracker::Instance::Locker lock;
172+
NmtVirtualMemoryLocker ml;
174173
return MemoryFileTracker::Instance::make_file(descriptive_name);
175174
}
176175

177176
static inline void remove_file(MemoryFileTracker::MemoryFile* file) {
178177
assert_post_init();
179178
if (!enabled()) return;
180179
assert(file != nullptr, "must be");
181-
MemoryFileTracker::Instance::Locker lock;
180+
NmtVirtualMemoryLocker ml;
182181
MemoryFileTracker::Instance::free_file(file);
183182
}
184183

@@ -187,7 +186,7 @@ class MemTracker : AllStatic {
187186
assert_post_init();
188187
if (!enabled()) return;
189188
assert(file != nullptr, "must be");
190-
MemoryFileTracker::Instance::Locker lock;
189+
NmtVirtualMemoryLocker ml;
191190
MemoryFileTracker::Instance::allocate_memory(file, offset, size, stack, mem_tag);
192191
}
193192

@@ -196,7 +195,7 @@ class MemTracker : AllStatic {
196195
assert_post_init();
197196
if (!enabled()) return;
198197
assert(file != nullptr, "must be");
199-
MemoryFileTracker::Instance::Locker lock;
198+
NmtVirtualMemoryLocker ml;
200199
MemoryFileTracker::Instance::free_memory(file, offset, size);
201200
}
202201

@@ -210,7 +209,7 @@ class MemTracker : AllStatic {
210209
assert_post_init();
211210
if (!enabled()) return;
212211
if (addr != nullptr) {
213-
ThreadCritical tc;
212+
NmtVirtualMemoryLocker ml;
214213
VirtualMemoryTracker::split_reserved_region((address)addr, size, split, mem_tag, split_tag);
215214
}
216215
}
@@ -219,7 +218,7 @@ class MemTracker : AllStatic {
219218
assert_post_init();
220219
if (!enabled()) return;
221220
if (addr != nullptr) {
222-
ThreadCritical tc;
221+
NmtVirtualMemoryLocker ml;
223222
VirtualMemoryTracker::set_reserved_region_type((address)addr, mem_tag);
224223
}
225224
}

src/hotspot/share/nmt/memoryFileTracker.cpp

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -29,13 +29,11 @@
2929
#include "nmt/nmtCommon.hpp"
3030
#include "nmt/nmtNativeCallStackStorage.hpp"
3131
#include "nmt/vmatree.hpp"
32-
#include "runtime/mutex.hpp"
3332
#include "utilities/growableArray.hpp"
3433
#include "utilities/nativeCallStack.hpp"
3534
#include "utilities/ostream.hpp"
3635

3736
MemoryFileTracker* MemoryFileTracker::Instance::_tracker = nullptr;
38-
PlatformMutex* MemoryFileTracker::Instance::_mutex = nullptr;
3937

4038
MemoryFileTracker::MemoryFileTracker(bool is_detailed_mode)
4139
: _stack_storage(is_detailed_mode), _files() {}
@@ -132,7 +130,6 @@ bool MemoryFileTracker::Instance::initialize(NMT_TrackingLevel tracking_level) {
132130
_tracker = static_cast<MemoryFileTracker*>(os::malloc(sizeof(MemoryFileTracker), mtNMT));
133131
if (_tracker == nullptr) return false;
134132
new (_tracker) MemoryFileTracker(tracking_level == NMT_TrackingLevel::NMT_detail);
135-
_mutex = new PlatformMutex();
136133
return true;
137134
}
138135

@@ -193,11 +190,3 @@ void MemoryFileTracker::summary_snapshot(VirtualMemorySnapshot* snapshot) const
193190
void MemoryFileTracker::Instance::summary_snapshot(VirtualMemorySnapshot* snapshot) {
194191
_tracker->summary_snapshot(snapshot);
195192
}
196-
197-
MemoryFileTracker::Instance::Locker::Locker() {
198-
MemoryFileTracker::Instance::_mutex->lock();
199-
}
200-
201-
MemoryFileTracker::Instance::Locker::~Locker() {
202-
MemoryFileTracker::Instance::_mutex->unlock();
203-
}

src/hotspot/share/nmt/memoryFileTracker.hpp

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@
3030
#include "nmt/nmtNativeCallStackStorage.hpp"
3131
#include "nmt/virtualMemoryTracker.hpp"
3232
#include "nmt/vmatree.hpp"
33-
#include "runtime/mutex.hpp"
3433
#include "runtime/os.inline.hpp"
3534
#include "utilities/growableArray.hpp"
3635
#include "utilities/nativeCallStack.hpp"
@@ -81,14 +80,8 @@ class MemoryFileTracker {
8180

8281
class Instance : public AllStatic {
8382
static MemoryFileTracker* _tracker;
84-
static PlatformMutex* _mutex;
8583

8684
public:
87-
class Locker : public StackObj {
88-
public:
89-
Locker();
90-
~Locker();
91-
};
9285

9386
static bool initialize(NMT_TrackingLevel tracking_level);
9487

src/hotspot/share/nmt/nmtCommon.hpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929

3030
#include "memory/allStatic.hpp"
3131
#include "nmt/memTag.hpp"
32+
#include "runtime/mutexLocker.hpp"
3233
#include "utilities/align.hpp"
3334
#include "utilities/globalDefinitions.hpp"
3435

@@ -137,5 +138,13 @@ class NMTUtil : AllStatic {
137138
static S _strings[mt_number_of_tags];
138139
};
139140

141+
// Same as MutexLocker but can be used during VM init.
142+
// Performs no action if given a null mutex or with detached threads.
143+
class NmtVirtualMemoryLocker: public ConditionalMutexLocker {
144+
public:
145+
NmtVirtualMemoryLocker() :
146+
ConditionalMutexLocker(NmtVirtualMemory_lock, Thread::current_or_null_safe() != nullptr, Mutex::_no_safepoint_check_flag) {
147+
}
148+
};
140149

141150
#endif // SHARE_NMT_NMTCOMMON_HPP

src/hotspot/share/nmt/threadStackTracker.cpp

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@
2929
#include "nmt/threadStackTracker.hpp"
3030
#include "nmt/virtualMemoryTracker.hpp"
3131
#include "runtime/os.hpp"
32-
#include "runtime/threadCritical.hpp"
3332
#include "utilities/align.hpp"
3433
#include "utilities/debug.hpp"
3534
#include "utilities/globalDefinitions.hpp"
@@ -53,7 +52,7 @@ void ThreadStackTracker::new_thread_stack(void* base, size_t size, const NativeC
5352
assert(base != nullptr, "Should have been filtered");
5453
align_thread_stack_boundaries_inward(base, size);
5554

56-
ThreadCritical tc;
55+
NmtVirtualMemoryLocker ml;
5756
VirtualMemoryTracker::add_reserved_region((address)base, size, stack, mtThreadStack);
5857
_thread_count++;
5958
}
@@ -63,7 +62,7 @@ void ThreadStackTracker::delete_thread_stack(void* base, size_t size) {
6362
assert(base != nullptr, "Should have been filtered");
6463
align_thread_stack_boundaries_inward(base, size);
6564

66-
ThreadCritical tc;
65+
NmtVirtualMemoryLocker ml;
6766
VirtualMemoryTracker::remove_released_region((address)base, size);
6867
_thread_count--;
6968
}

0 commit comments

Comments
 (0)