RFR 8029178: Parallel class loading test anonymous-simple gets SIGSEGV in Metaspace:,:contains
Coleen Phillmore
coleen.phillimore at oracle.com
Fri Jan 3 11:00:13 PST 2014
Jon, Thanks for reviewing this.
On 1/3/2014 1:09 PM, Jon Masamitsu wrote:
> Coleen,
>
> http://cr.openjdk.java.net/~coleenp/8029178/src/share/vm/memory/metachunk.hpp.frames.html
>
>
> 146 bool contains(const void* ptr) { return bottom() < ptr && ptr <=
> _top; }
>
> I think bottom() points to the first chunk. Also _top points to the
> start
> of the unallocated space (next place where a chunk will be allocated).
> So I would think this should be
>
> bool contains(const void* ptr) { return bottom() <=ptr && ptr < _top; }
>
>
Yes, I agree.
>
> http://cr.openjdk.java.net/~coleenp/8029178/src/share/vm/memory/metaspace.cpp.frames.html
>
>
> Don't you need some locking to protect the "chunks_in_use()" lists?
>
> 2382 bool SpaceManager::contains(const void *ptr) {
> 2383 for (ChunkIndex i = ZeroIndex; i < NumberOfInUseLists; i =
> next_chunk_index(i))
> 2384 {
> 2385 Metachunk* curr = chunks_in_use(i);
> 2386 while (curr != NULL) {
> 2387 if (curr->contains(ptr)) return true;
> 2388 curr = curr->next();
> 2389 }
> 2390 }
> 2391 return false;
> 2392 }
> 2393
If new chunks are added while this is iterating over them, they are
added to the front of the list. This is ok because we would only call
this for metadata that is already allocated in one of the chunks. I
don't want to add a lock but I do need some memory ordering
instructions. I'll move the one that I had on virtual space lists to
where we add the chunks.
The Metaspace/SpaceManager destructors can only be called for the
_unloading list, which is created at a safepoint and we don't walk those
lists in CLDG::contains.
Thank you for pointing these out. I'll retest and send out another webrev.
Coleen
>
> Jon
>
>
> On 1/2/2014 9:25 AM, Coleen Phillmore wrote:
>> Summary: Metaspace::contains cannot look at purged metaspaces while
>> CMS concurrently deallocates them.
>>
>> Removed 2 calls to is_metaspace_object where the object may be in a
>> deallocated metaspace. Removed walking virtual space lists for
>> determining contains because the virtual space list can change
>> concurrently with the walk. CLDG::contains is slower but no
>> slowdowns with testing were observed.
>>
>> Tested by SQE testbase tests, jtreg tests. Functional testing by
>> parallel class loading tests and nsk/coverage/arguments/arguments008
>> (ie. calls Method::is_valid_method)
>>
>> open webrev at http://cr.openjdk.java.net/~coleenp/8029178/
>> bug link https://bugs.openjdk.java.net/browse/JDK-8029178
>>
>> Thanks,
>> Coleen
>
More information about the hotspot-dev
mailing list