Kristian Nielsen wrote:
Jay Pipes <[email protected]> writes:

Paul McCullagh wrote:
As has been mentioned elsewhere the most important thing is that Drizzle
has automated regression tests in place.
Yep, that plus we are discussing these regressions in a public forum
where many excellent folks like yourself can comment on them. :)  The
suggestions and input we get from everyone is invaluable, and we follow
up on all suggestions.

One thing I am curious about: what is the smallest regression that you can
discover without it being lost in noise? I think this one was like 20% or so,
but do you think you could catch one of 5%? 1%?

Hi!  Actually, I was wondering the same thing the other day:

https://lists.launchpad.net/drizzle-discuss/msg03904.html

I think that post got lost in the flurry of ML posts that day...

Anyway, the automated regression tests store all results of all revision benchmarks, so really, it's just about deciding what percentage change should trigger a notification to the mailing list or IRC channel to prompt further investigation (like the one I did to identify the std::bitset regression)...

1%? 5%? Averaged across all concurrency levels? Compared with prior revision or with the past X revisions? There's many ways we can do it...just have to decide on the variables :)

I strongly agree with letting performance regression testing control
optimizations. I have seen _so_ many code decisions based on "assumed"
performance benefits over clear code. With modern CPUs it's just plain wrong
90% of the time. Even "every instruction counts" is not right, as typical code
I see utilise only 40-50% of instruction bandwidth on something like a Core 2
(hint: latency and dependency chains matter, not instruction counts).

What I have in mind is something like Buildbot/Pushbuild, but for
performance. So there would be performance regression tests for each major
piece of code, and any push that caused a slowdown would be flagged by a red
in the status display.

Have you checked out the Drizzle Automation project yet? I'm currently documenting it, but it is the tool we've used in all our benchmarking so far and provides a clean interface for benchmarking series of revisions on a Drizzle branch and also has the ability to use MySQL Sandbox for benchmarking stand-alone MySQL servers (we can pop in an adapter for MariaDb fairly easily if you guys have a separate/different build process?

The really hard part of this is the noise. Usually there is quite a bit of
random noise in benchmarks, so I was looking at ways to reduce that noise to
make automation feasible.

Well, currently, the benchmarks are pretty consistent. I run 60 second readonly and readwrite runs at these concurrency levels:

2,4,8,16,32,64,128,256,512,1024,2048

For readwrite, I only run up to 1024 connections because of a limitation in InnoDB previously discussed on the list:

https://lists.launchpad.net/drizzle-discuss/msg03956.html

For all runs, I do 3 6-second iterations and the automation suite stores the results of each run in a database. All I do to produce the results is a simple SQL query which averages across all 3 iterations of the results for each concurrency level. Today, I'll be finishing up the automatic polling mechanism which will put us into fully-automated mode, where any push to the trunk/staging tree will automatically run our regression suite (benchmarks and LCOV coverage reports).

Sahil Cooner (neuro_damage on IRC) is working on the website part of things, where we'll work together to produce pretty graphs in a dashboard-like output.

I worked a bit with the perfmon2 library, and got some really good
results. For micro-benchmarks of smaller pieces of code, I was able to measure
with about 1 in 10000 accuracy, which is really quite good, and would enable
to detect automatically something down to like a 0.1% slowdown or so perhaps.

However, this requires having a test suite of micro-benchmarks, I do not think
it is possible to get something like sysbench down to that accuracy.

No, me neither. What we're after right now is making sure we don't have significant regressions from one revision to another, and catching them if they happen (like has been done on the bitset work)

Cheers!

Jay

Anyway, then I got involved in MariaDB and had to put the project away for a
while (I hope to return to it eventually). But I was just curious about your
thoughts and experience with handling benchmark measurement noise.

 - Kristian.

_______________________________________________
Mailing list: https://launchpad.net/~drizzle-discuss
Post to     : [email protected]
Unsubscribe : https://launchpad.net/~drizzle-discuss
More help   : https://help.launchpad.net/ListHelp


_______________________________________________
Mailing list: https://launchpad.net/~drizzle-discuss
Post to     : [email protected]
Unsubscribe : https://launchpad.net/~drizzle-discuss
More help   : https://help.launchpad.net/ListHelp

Reply via email to