SUGGESTED FIX
###@###.### 2004-08-03:
This is a partial fix that works around some of the issues
described in 5040363, essentially trusting the P-marks
over the explicit size computation, which is a win in
the presence of 5040363:
------- concurrentMarkSweepGeneration.cpp -------
5803,5808c5803,5806
< if (oop(addr)->klass() == NULL ||
< (CMSPermGenSweepingEnabled && !oop(addr)->is_parsable())) {
<
< assert(_bitMap->isMarked(addr + 1), "missing Printezis mark?");
< // this is a yet uninitialized object that's alive, caclulate its end
< // from the bit map.
---
> assert(_bitMap->isMarked(addr), "Tautology for this control point");
> if (_bitMap->isMarked(addr + 1)) {
> // Determine the size from the bit map, rather than trying to
> // compute it from the object header.
5812a5811,5818
> DEBUG_ONLY(
> if (oop(addr)->klass() != NULL &&
> (!CMSPermGenSweepingEnabled || oop(addr)->is_parsable())) {
> assert(oop(addr)->is_oop(), "live block should be an oop");
> assert(size == CompactibleFreeListSpace::adjustObjectSize(oop(addr)->size()),
> "P-mark and computed size do not agree");
> }
> )
5819c5825
< debug_only(
---
> DEBUG_ONLY(
5821,5827c5827,5828
< if (!_bitMap->isMarked(addr+1)) {
< _bitMap->verifyNoOneBitsInRange(addr+2, addr+size);
< } else {
< _bitMap->verifyNoOneBitsInRange(addr+2, addr+size-1);
< assert(_bitMap->isMarked(addr+size-1),
< "inconsistent Printezis mark");
< }
---
> assert(!_bitMap->isMarked(addr+1), "Tautology for this control point");
> _bitMap->verifyNoOneBitsInRange(addr+2, addr+size);
-----------------------------------------------
Job submitted at: 12:24:36 PM
Total job time: 2h 00m 49s
Job state: success
Job fail/kill comment: NoComment
Job flags: ARCHIVE SYNC-WORKSPACE
VM test flags -XX:+PrintGCDetails -XX:+CMSPermGenSweepingEnabled -XX:+CMSClassUnloadingEnabled
Original workspace: neeraja:/net/spot/scratch/ysr/mut
Parent workspace: /net/jano.sfbay/export/disk05/hotspot/ws/1.5/tiger_baseline
Submitter: ysr
PRT data: /net/prt-web.sfbay/prt-workspaces/20040804122333.ysr.mut
Archived data: /net/prt-archiver.sfbay/export2/archived_workspaces/1.5/tiger_baseline/2004/20040804122333.ysr.mut/
Webrev: http://analemma.sfbay.sun.com/net/prt-archiver.sfbay/export2/archived_workspaces/1.5/tiger_baseline/2004/20040804122333.ysr.mut/workspace/webrevs/webrev-2004.08.04/index.html
Generate binaries for testing; archive
------------------------------------------------
###@###.### 2004-08-10: Fix put back to Mustang:
Event: putback-to
Parent workspace: /net/jano.sfbay/export/disk05/hotspot/ws/main/gc_baseline
(jano.sfbay:/export/disk05/hotspot/ws/main/gc_baseline)
Child workspace: /prt-workspaces/20040810135029.ysr.merge/workspace
(prt-web:/prt-workspaces/20040810135029.ysr.merge/workspace)
User: ysr
Comment:
---------------------------------------------------------
Original workspace: neeraja:/net/spot/scratch/ysr/merge
Submitter: ysr
Archived data: /net/prt-archiver.sfbay/data/archived_workspaces/main/gc_baseline/2004/20040810135029.ysr.merge/
Webrev: http://analemma.sfbay.sun.com/net/prt-archiver.sfbay/data/archived_workspaces/main/gc_baseline/2004/20040810135029.ysr.merge/workspace/webrevs/webrev-2004.08.10/index.html
Fixed 5081701: CMS: ATG crash with perm gen collection enabled
Fixed 5083318: CMS: debug jvm deadlocks because of CodeCache_lock during verification
http://analemma.sfbay/net/spot/scratch/ysr/merge/webrev
Details:
--------
5081701: The sweeper was trying to parse yet another unparseable,
still-partially-initialized object in the perm gen. See 5040363 (FIP)
for a catalogue of such issues. One way of avoiding such issues
during sweeping is to recognize that such partially initialized
objects must necessarily have been allocated since the start of
the current CMS cycle, and must therefore have their P-bits set.
When possible, we now use the P-bits, in preference to an
explicit size computation, for live objects. This avoids any
problems with (transiently) unparsable objects in the perm gen.
Added appropriate assertions to highlight the cases where the
new scheme is superior to the previous. (Perhaps these assertions
should convert to "warnings," still non-product only.)
Initial performance measurements indicate that the performance
impact of this change on sweeping is a wash. More careful performance
data being collected.
Fix Verified: yes
Verification Testing: ATG on SUSE Linux ES8 with CMS + class unloading
5083318: The CMS thread was attempting to take the CompiledIC_lock
at a safepoint during nmethod verification. This caused a deadlock
as the lock may be held by a JavaThread when it stops at a
safepoint. Like the VMThread, the CMS thread also elides the
locking if at a safepoint.
Fix Verified: yes
Verification Testing: ATG with CMS + class unloading (fastdebug)
Thanks to June Zhong for verification testing for both
fixes.
Other Testing: (both bugs)
CMS (with & without class unloading)
spec, PRT, refWorkload, runThese, cloudscape,
HP's class unloading test
Reviewed by: John Coomes
Files:
update: src/share/vm/code/nmethod.cpp
update: src/share/vm/memory/concurrentMarkSweepGeneration.cpp
Examined files: 3223
Contents Summary:
2 update
3221 no action (unchanged)
|