RFR JDK-8059510 Compact symbol table layout inside shared archive
Jiangli Zhou
jiangli.zhou at oracle.com
Sat Oct 11 03:47:03 UTC 2014
On 10/10/2014 04:18 PM, Ioi Lam wrote:
>
> On 10/10/14, 2:06 PM, Jiangli Zhou wrote:
>> Hi Gerard,
>>
>> On 10/10/2014 01:44 PM, Gerard Ziemski wrote:
>>> hi Jiangli,
>>>
>>> On 10/10/2014 3:10 PM, Jiangli Zhou wrote:
>>>> Hi Gerard,
>>>>
>>>> On 10/10/2014 08:12 AM, Gerard Ziemski wrote:
>>>>> hi Jiangli,
>>>>>
>>>>> On 10/9/2014 2:11 PM, Jiangli Zhou wrote:
>>>>>> Hi Gerard,
>>>>>>
>>>>>> Thank you very much for the review. Please see my comments below.
>>>>>>
>>>>>> On 10/09/2014 08:04 AM, Gerard Ziemski wrote:
>>>>>>> hi Jiangli,
>>>>>>>
>>>>>>> I'm a reviewer with small "r" and I'm still going through your
>>>>>>> code and learning as I go, but so far I have 2 items as my
>>>>>>> feedback/questions:
>>>>>>>
>>>>>>> #1 Re: "SymbolTable::lookup”
>>>>>>>
>>>>>>> Symbol* SymbolTable::lookup(int index, const char* name,
>>>>>>> int len, unsigned int hash) {
>>>>>>> + Symbol* s = _shared_table.lookup(name, hash, len);
>>>>>>> + if (s != NULL) {
>>>>>>> + return s;
>>>>>>> + }
>>>>>>> +
>>>>>>> int count = 0;
>>>>>>> for (HashtableEntry<Symbol*, mtSymbol>* e = bucket(index); e
>>>>>>> != NULL; e = e->next()) {
>>>>>>> count++; // count all entries in this bucket, not just
>>>>>>> ones with same hash
>>>>>>> if (e->hash() == hash) {
>>>>>>> Symbol* sym = e->literal();
>>>>>>>
>>>>>>> a) Do we need to evaluate the lookup time performance, now that
>>>>>>> some entries will have to be looked up in 2 separate tables in
>>>>>>> "SymbolTable::lookup"?
>>>>>>>
>>>>>>> b) Shared table is being looked at 1st, is this the case we expect?
>>>>>>
>>>>>> Those are very good questions. The shared symbol table lookup are
>>>>>> fast since we can very efficiently locate the specific bucket
>>>>>> with pre-calculated bucket sizes. The shared table is searched
>>>>>> first because the symbols contained in that are from archived
>>>>>> classes, which are the ones used during bootstrap (by default).
>>>>>> Separating the symbols into two sets do introducing some
>>>>>> overhead. In this case, I think the effect is negligible. The
>>>>>> data from Aleksey's benchmark for classloading showed very small
>>>>>> difference between the patched and non-patched version.
>>>>>
>>>>> You might be very well right that the performance hit is
>>>>> negligible, but my point is that you haven't shown that this issue
>>>>> isn't a problem by backing it up with actual performance data. You
>>>>> use Aleksey's own benchmark to prove your point, which only came
>>>>> up during the review and which actually shows the opposite (though
>>>>> only a slight regression). I would think that we need real
>>>>> performance data that will prove your assumptions without any doubt.
>>>>
>>>> You have a very good point. I apologize for not providing my
>>>> first-hand benchmark data. Here are some classloading benchmark
>>>> results on linux-i586 and linux-arm (soft-float vfp) platforms.
>>>> 17436 classes were loaded from bootclasspath. For both before and
>>>> after, the shared archive were used. 10 samples were collected for
>>>> both before and after.
>>>>
>>>> *Linux ARMv7 tegra board*
>>>> Before(average): 7.9505s
>>>> After(average) : 7.8601s
>>>>
>>>> *Linux Intel i5*
>>>> Before(average): 1.2162s
>>>> After(average) : 1.1457s
>>>
>>> This looks promising, but it also looks like a specialized benchmark
>>> designed to test shared archive behavior. Do we have performance
>>> regressions numbers from standard benchmarks (ie. refworkload) that
>>> do not use shared archive path?
>>
>> The test used was designed for benchmarking classloading speed, not
>> specifically for testing shared archive behavior. Shared archive was
>> used for both before and after because the shared symbol table would
>> only be used in that case. The potential performance impact of
>> looking up the shared symbol table would only manifest in that case.
>> When class data sharing is not enabled, the shared symbol table is
>> not used at all.
>>
>> I'll run specjvm with reworkload.
>>
> I remember I ran a bunch of refworkload before and there was no
> significant difference before/after this change. But I can't seem to
> find the e-mail now :-(
Here are the spejvm runs on the ARMv7 tegra board. There is no
measurable lose with the change.
==============================================================================
logs.specjvm.before:
Benchmark Samples Mean Stdev Geomean Weight
specjvm98 8 81.33 1.47
==============================================================================
logs.specjvm.after:
Benchmark Samples Mean Stdev %Diff P
Significant
specjvm98 8 81.72 0.70 0.48
0.509 *
==============================================================================
Thanks,
Jiangli
>
> - Ioi
>
>
>
More information about the hotspot-runtime-dev
mailing list