Hi, Claes

On 9/19/19 1:40 PM, Claes Redestad wrote:

FYI, you can control the number of forks etc run by make test:

make test TEST="micro:java.lang.StackWalkBench" MICRO="FORK=1;WARMUP_ITER=2;OPTIONS=-p depth=128"

(documented in doc/testing.md|html)

Neat, thanks!

Still, I agree it might be a good idea to have make test TEST=... run
fewer forks/iterations by default, since this shortcut was primarily
intended as a means for devs to quickly verify specific microbenchmarks.

OK, I've submitted:
https://bugs.openjdk.java.net/browse/JDK-8231315

However, reducing forks and iterations only cuts down one factor of the
total runtime: others being the number of methods and the number of
chosen parameters (as controlled by @Param-annotated fields).

So IMHO, what should be thought through carefully when adding micros is
whether all methods are necessary or at least useful and whether we can
reduce the number of parameter chosen.

For these two, I think picking 2 or 3 values for depth (lowest, highest,
maybe a midpoint) might be sufficient. This would cut total runtime
budget by 60% or 40%, respectively.

Mandy makes a good point that configurations would be different between doing a quick performance verification/sanity check, versus a more comprehensive run to measure tuning work or larger scale work.

In the interest of reducing the run time when using 'make', I'd be OK with having fewer values in the 'depth' @Param in the source. It's easy enough to add values back from the commandline for more thorough testing. (In the case of StackWalker, it's good to exercise its various batch sizes.)

Thanks,
-Brent

P.S.
As you alluded to, there is also a "quick-and-efficient versus thorough coverage" tension WRT what @Benchmark methods get included/run. Worth giving thought to sometime...

On 2019-09-19 20:09, Brent Christian wrote:
Hi, Mandy

Yes, that 'make' job would take ~7 hours on my machine.
I believe this is typical for running micros using 'make'.  AFAICT, the jmh defaults are used, so it forks (running all the warmups + iterations) 5 times.  Trying another (>100 loc) benchmark  at random, the java.lang.ArrayCopy one would take 25 hours.

There might be a way to pass jmh args (e.g. '-f 1') via 'make test TEST=...', though I really only ever run benchmarks using 'java -jar path/to/benchmark.jar'.

It may be worth looking into updating the make target to setup more practical JMH runtimes by default.  But I don't think this an issue particular the new benchmarks.

Thanks,
-Brent
On 9/18/19 7:33 PM, Mandy Chung wrote:
Hi Brent,

$ make test TEST="micro:java.lang.StackWalkBench"

It took very long that I killed the job.  Does this happen to you?

Mandy

On 9/13/19 3:07 PM, Brent Christian wrote:
Hi,

Please review these StackWalker and Throwable benchmarks for addition into the JDK microbenchmarks.

Bug:
https://bugs.openjdk.java.net/browse/JDK-8221623
Webrev:
http://cr.openjdk.java.net/~bchristi/8221623/webrev07/

The StackWalker benchmarks use StackWalker's forEach(), walk(), and Options to measure retrieval of various types of information from the call stack.

The Throwable benchmarks do corresponding exercises; there are also a couple of Logging benchmarks.

A JMH @Param is used to test a variety of call stack depths.


In the future, we might consider a benchmark for Reflection.getCallerClass().  (It is more involved today to benchmark that method than at the time these benchmarks were originally written, so that one's commented out.) See JDK-8230976.

Thanks,
-Brent

1. https://bugs.openjdk.java.net/browse/JDK-8230976


Reply via email to