United StatesChange Country, Oracle Worldwide Web Sites Communities I am a... I want to...
JDK-6711930 : NUMA allocator: ParOld can create a hole less than minimal object size in the lgrp chunk

Details
Type:
Bug
Submit Date:
2008-06-07
Status:
Closed
Updated Date:
2011-03-08
Project Name:
JDK
Resolved Date:
2011-03-08
Component:
hotspot
OS:
generic
Sub-Component:
gc
CPU:
generic
Priority:
P3
Resolution:
Fixed
Affected Versions:
hs13
Fixed Versions:
hs13 (b02)

Related Reports
Backport:
Backport:

Sub Tasks

Description
Setting top in MutableNUMASpace can create a hole in chunk, which is less than a minimal object size in the lgrp chunk. The VM would typically fail while trying to fill the hole with a dummy object.

Internal Error at sharedHeap.cpp:279, pid=8687, tid=5
Error: assert(word_size == (size_t)oopDesc::header_size(),"Unaligned?")
Also, if a object crosses the chunk boundary a verification would fail, because it verifies each chunk independently. The failure will look like:
Internal Error at mutableSpace.cpp:130, pid=7099, tid=5
Error: guarantee(p == top(),"end of last object must match end of space")
There is also a fault in the allocation code, that enable creation of less than a minimal object sized holes between the lgrp chunks, which I had introduced while fixing 6697534.
Specifically in MutableNUMASpace::cas_allocate(), the code that computes the size of the hole created should be 

size_t remainder = pointer_delta(s->end(), p + size);

instead of

size_t remainder = pointer_delta(s->end(), p);

                                    

Comments
EVALUATION

See description.
                                     
2008-06-10



Hardware and Software, Engineered to Work Together