Adding Microbenchmarks to the JDK forest/trees (JEP-230)

Jonathan Gibbons jonathan.gibbons at oracle.com
Fri Dec 5 21:52:48 UTC 2014




On 12/05/2014 11:46 AM, Staffan Friberg wrote:
> Hi,
>
> On 12/04/2014 10:23 PM, joe darcy wrote:
>> Hello,
>>
>> On 12/4/2014 4:34 PM, David Holmes wrote:
>>> Hi Staffan,
>>>
>>> On 2/12/2014 10:08 AM, Staffan Friberg wrote:
>>>> Hi,
>>>>
>>>> Hopefully this is the right list for this discussion.
>>>>
>>>> As part of adding Microbenchmarks to the OpenJDK source tree, I'm 
>>>> trying
>>>> to understand how we best would add the benchmark sources to the
>>>> existing OpenJDK tree structure.
>>>
>>> Is there a reason this needs to be inside the OpenJDK instead of a 
>>> stand-alone project? If it ends up in its own repo and the repo is 
>>> not needed by anything else, then it is already like a stand-alone 
>>> project.
>>
>> I think David is raising a good question here. A related question is 
>> if we want to update/fix the microbenchmarks, in how many release 
>> trains will we want to make that fix? If the expected answer is much 
>> greater than one, to me that would seem to me to argue for a separate 
>> forest in the overall OpenJDK effort, but not bundled into a 
>> particular release.
>>
>> For example, in the past, the webrev.ksh script was included in the 
>> JDK forest. That was an improvement over every engineer having his or 
>> her personal fork, but still made keeping webrev updated 
>> unnecessarily difficult since any changes would need to be done 
>> multiple time and there is nothing fundamentally binding a version of 
>> webrev to a particular JDK release. Likewise, even though (to my 
>> knowledge) jtreg is only used for testing the JDK, jtreg has its own 
>> repository and release schedule separate from any JDK release.
>>
>> So if the microbenchmarks are to a first-approximation version 
>> agnostic, then they should probably have a forest not associated with 
>> a JDK release. If they are tightly bound to a release, that argues 
>> for putting them into the JDK forest itself.
>>
> The reasons are similar to co-locating functional tests, stable test 
> base that is not moving after FC, tests support new features and all 
> work with the JDK you are developing.
>
> Looking at some of the goals in the JEP and why I think co-locating 
> helps.
>
>  * Stable and tuned benchmarks, targeted for continuous performance 
> testing
>      o A stable and non-moving suite after the Feature Complete
>        milestone of a feature release, and for non-feature releases
>
> To fulfill this having a separate repository would force us to branch 
> and create builds in sync with the JDK we want to test. As the number 
> of JDK version increases so will the microbenchmark suite. Making it 
> complex for anyone adding or running tests to keep track of which 
> version one should use for a specific JDK branch.
>
> As an example, for a stable branch we probably do not want to update 
> the JMH version, unless there is a critical bug, as doing so can 
> invalidate any earlier results causing us to lose all history that is 
> critical when tracking a release. However during development of a new 
> release we probably want to do that to take advantage of new features 
> in JMH. And we might require new features in JMH to support changes in 
> the JDK.
>
> Fixing bugs in microbenchmarks will in a similar fashion to any bugs 
> sometimes need to be backported, but we would have similar struggles 
> in a separate repository if we want to keep the suite stable for 
> multiple releases and have multiple branches to support that.
>
> JMH similar to jtreg is a separate repository already, and will stay 
> that way. The co-located part would be the benchmarks, which similar 
> to the tests written using jtreg benefit from being co-located.
>
>
>  * Simplicity
>      o Easy to add new benchmarks
>      o Easy to update tests as APIs and options change, are deprecated,
>        or are removed during development
>      o Easy to find and run a benchmark
>
> Having it co-located reduces the steps for anyone developing a new 
> feature to push benchmarks at the same time as the feature in the same 
> way as functional tests can be pushed.
>
> Any benchmark relying on a feature being removed can easily be deleted 
> without concern about reducing the test coverage of older releases 
> still providing it.
>
> Having it in a completely separate repository I fear will cause 
> microbenchmark to be out of sight and out of mind, which is the 
> opposite of the intention of creating the suite. We want more people 
> to write and run benchmarks in a simple way. Co-location will allow 
> anyone to simply just add and do make to build for their current 
> branch and test the feature they are working on, and those benchmarks 
> will directly be picked up for regression testing once pushed.
>
>
>
> Hope this helps to further clarify the reason for having the suite as 
> part of the OpenJDK source tree.
>
> Regards,
> Staffan

Staffan,

You make a good point for it being within the OpenJDK source tree. But 
you can still use a separate repository in the forest, so that it is 
versioned, tracked, copied along with the other trees in the forest.

-- Jon



More information about the build-dev mailing list