This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Benchmark.pm: avoid long walltime on calibration
authorDavid Mitchell <davem@iabyn.com>
Mon, 9 Jun 2014 10:41:22 +0000 (11:41 +0100)
committerDavid Mitchell <davem@iabyn.com>
Mon, 9 Jun 2014 10:51:18 +0000 (11:51 +0100)
commit78462dd3f2a26a5a5f9ec040277bad147e6c5d52
tree3aae0b1818dbb9884aa2f59330dcde8c9db6b99f
parent5876737a160ce8f490b3d77eb7edd87391db1968
Benchmark.pm: avoid long walltime on calibration

RT #122003

runloop() in Benchmark.pm does the equivalent of the following:

    $t = (times)[0];
    while ($t == (times)[0]) {}

so that it finishes in a position where the user CPU counter has just
incremented.

This is all well and good, but on some platforms (specifically OpenBSD
running under VirtualBox), the system CPU burned each time round the loop
to get times() is far greater than the user CPU burned. This can cause the
loop to run for minutes consuming system CPU until enough user CPU has
been burned to tick the user CPU counter.

The fix in this commit is to replace the empty body of the while loop with
something that does a gradually increasing amount of busy work.
lib/Benchmark.pm