Re: [rvm-research] spare one bit from the object header

王晨曦 <[email protected]> Wed, 30 Sep 2015 14:51:15 +0800
Newsgroups gmane.comp.java.jikes.rvm.devel
Message-ID <[email protected]>
ok,thanks for your comments. I will consider your suggestions. 


> 在 2015年9月30日,上午1:23,Michael Bond <[email protected]> 写道:
> 
> Dear Fellow Bit Stealer,
> 
> I believe I've run into the same issue before, but I don't know what's 
> the reason for it. Two ideas:
> 
> (1) Perhaps the current implementation of thin locks relies on having 
> the full 22 bits, and giving it just 21 bits means it still spills over 
> into the stolen bit? See ThinLockConstants to try to figure that out? 
> (This would imply that !ADDRESS_BASED_HASHING configs doesn't work 
> correctly, although it might be hard to tell since hash codes would be 
> subtly messed up.)
> 
> (2) Perhaps there's some other assumption in the thin locks 
> implementation about how many / which bits are available. Have you 
> considered trying to steal the high bit instead:
> 
>  *      OTTT TTTT TTTT TTTT TTTT TTHH AAAA AAAA
> 
> by changing only NUM_THIN_LOCK_BITS but not THIN_LOCK_SHIFT.
> 
> However, depending on what you're using the stolen bit for, I think that 
> might introduce concurrency issues if the thin locks implementation is 
> relying on being able to do non-CAS accesses to the high 16 bits of the 
> status word.
> 
> An alternative to stealing a thin lock bit is to steal one of the GC bits:
> 
>  *      TTTT TTTT TTTT TTTT TTTT TTHH OAAA AAAA
> 
> which requires ensuring that GC does not use all 8 bits. I believe the 
> default GenImmix uses all 8 by default, but you can tell it to use 7 
> instead.
> 
> Cheers,
> Mike
> 
> On 09/29/2015 07:36 AM, 王晨曦 wrote:
>> Hi, every one.
>> 
>> 	I want to spare one bit as a flag to mark some particular object from the thin lock bits used in the object header.
>> In the production configuration ,the ADDRESS_BASED_HASHING is true.
>> so the object header looks like:
>>  *      TTTT TTTT TTTT TTTT TTTT TOHH AAAA AAAA
>> the bit marked by ‘O’ is the bit  I want to spare.
>> 
>>  I modified the thin lock definitions:
>>   /** How many bits are allocated to a thin lock? */
>>   public static final int NUM_THIN_LOCK_BITS = ADDRESS_BASED_HASHING ? 21 : 19;
>> 
>>   /** How many bits to shift to get the thin lock? */
>>   public static final int THIN_LOCK_SHIFT = ADDRESS_BASED_HASHING ? 11 : 13;
>> 
>> 
>> But ,In GenNurseryTraceLocal.java traceObject() method.
>> I find that ,the spared bit ‘O’  can be set by something I don’t know.
>> 
>> the check code in the traceObject():
>> 
>>         Word objWordVal = VM.objectModel.readAvailableBitsWord(object);
>>         Log.write("object header word value:");
>>         Log.writeln(objWordVal);
>> 
>> 
>> and the the print info is :
>>   1871 object header word value:0x6e00859f  //  ….   0101  1001  1111
>> 
>>   1876 object header word value:0x6e009dfb  //  ….   1101   1111  1011
>> 
>> we can see that  the spared bit may be set by something.
>> So,my question is who set this spared bit ?
>> I checked that the thin lock count bits, it is reduced 1 bit, and I think the thin lock will not use this bit.
>> 
>> Any response is helpful, thank you.
>> ------------------------------------------------------------------------------
>> _______________________________________________
>> Jikesrvm-researchers mailing list
>> [email protected]
>> https://lists.sourceforge.net/lists/listinfo/jikesrvm-researchers
> 
> 
> ------------------------------------------------------------------------------
> _______________________________________________
> Jikesrvm-researchers mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/jikesrvm-researchers


------------------------------------------------------------------------------
_______________________________________________
Jikesrvm-researchers mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/jikesrvm-researchers