On Saturday, April 13, 2013 8:06:56 AM UTC-7, Jason Edgecombe wrote:
On 04/12/2013 08:59 PM, DrQ wrote:
> On Friday, April 12, 2013 4:26:17 PM UTC-7, Jason Edgecombe wrote:
>> Would doing multiple trials of the "openssl speed" command with varying
>> CPU speeds be acceptable?
>>
> Probably not very useful, unfortunately.
A workload that is too small (for some value of small) will have it's effectiveness for the purposes of performance measurement reduced by clever compilers, large hardware caches, and so forth.
>>> The more I dig into this, the less sure I am about being able to do it.
> Welcome to performance analysis. :) What's needed is a more serious
> workload to drive the system under test such that the reported performance
> metrics are meaningful. In other words, a simulation.
>
> This is the type of thing that SPEC.org<http://www.spec.org/benchmarks.html>supervises on an industrial level and they also provide the complete
> workload codes, scripts and harnesses. But ... they charge for that. Not an
> exorbitant amount but not worth it in this context.
>
> TPC.org <http://www.tpc.org/information/benchmarks.asp> organizes
> competitive database benchmarks. They don't charge for the codes and
> harnesses, b/c they don't offer any. They only provide benchmark
> specifications. Worth perusing to get an idea of what serious benchmarks
> look like and the requirements for how the performance metrics are measured.
>
> Something more intermediate b/w these big boys is Swingbench<http://www.dominicgiles.com/swingbench.html>
> . Swingbench is a free load generator with benchmarks designed to stress
> test an Oracle database (10g,11g). Here's an overview<http://www.dominicgiles.com/Swingbench.pdf>of that setup.
>
> And here's a list of other FOSS performance testing<http://www.opensourcetesting.org/performance.php>tools.
>
> This is just to give you an idea of what's likely involved. I'm sure others
> can list their favorite performance testing tools.
>
Thanks. As a seasoned sysadmin, I should have known that things are
rarely that easy. ;)
And if you keep it up with these questions, you'll soon be in real danger of becoming a performance engineer. :)
I'm still not certain that the requirements have been clarified. The
benchmarks seem to just give a single fixed rate of a single run of the
benchmark.
Almost. And it depends somewhat on the benchmark workload and what it's measuring.
Let's step back and try to define this more carefully. Please correct
this as needed:
----------------------------
We want to devise an experiment with following characteristics:
1. A quiescent computer system with an OS that is running a sustained
load (say 5 minutes)
It won't be "quiescent" under test (or something is broken). I think you mean isolated in that, while running the measurement workload, no other workloads will impact the measurement process. That is correct.
2. measurements of system metrics will be recorded at regular intervals
during the test run. The measurements will likely be of the form:
units/interval (the likely interval is seconds). Each test run should be
long enough and the intervals small enough to have at least 30
measurements during a test run.
There's actually several questions in here.
All metrics, whether system metrics (i.e., coming from Linux, hardware, etc.) or application metrics (the workload being executed) are sampled at some predetermined rate.
The sampling rate could depends many factors, in particular, the nature of the benchmark simulation. The measured rate for TPC-C database benchmark, for example, is transactions per minute (tpmC).
I'm not sure where you're getting the "30 measurements" from. This is something that is best determined by trial and error. But you have the right idea. The main purpose of running the test for "long enough" is to generate performance data that is meaningful for statistical analysis. The key concept (which I find a surprising number of people do not understand), is steady state. See Section 5.5 and 5.6 of the TPC-C benchmark spec for an easy-to-read description of what that means. Roughly put, it means that every unit of work I throw at the SUT, it completes; rather than letting is backup in a queue or buffer somewhere or dropping it on the floor.
3. The test will be repeated at different CPU clock frequencies
Right and they could be set under discrete control vs. arbitrary variability.
Questions:
1. Are multiple test runs for a single CPU frequency required? If so,
how many? 10? 20? 30?
This question will be better answered after you have a know test rig and benchmark selected.
One per would be good for starters. Three runs would be good for better statistics.
Maybe it's your sysadm talking, but performance testing is not a moonshot. As you said earlier, it's like an experiment which you are free to adjust over and over until satisfied. If we knew everything beforehand, it wouldn't be an experiment.
2. What is the minimum time duration for the test run to be valid? 1
minute? 5 minutes? 10 minutes?
The $64K question, which has no answer (a priori). The goal is to make all measurements in steady state. :)
3. Is the load a black box? What measurements, if any are needed of the
load itself? Do we need to measure transactions per second for the load?
do we need the measurements at each interval or just a single total
measurement for the entire run.
The use of the term "black box" is a bit confusing in this context.
There are 3 essential pieces: the SUT (the platform being tested), the DRV (the system that is providing the stimulus to the SUT; usually in the form executing scripts) and the WRK (the workload itself that is defined in the test scripts to run on the SUT). The DRV and the SUT can be the same thing. That's called in-situ testing. More often they are separated by a network (LAN) to better ensure that the SUT is truly isolated (per your previous question).
As I said somewhere previously, any benchmark of this type is really a simulation. I think your question here translates to "A simulation of what?" That's an excellent question and the choice depends on what you want to accomplish. In the case of TPC benchmarks, for example, the TPC-A benchmark (now defunct as a competitive benchmark) is a simulation of bank ATM machines. The TPC-C benchmarks is an OLTP workload that simulates inventory control of distributed warehouses. Swingbench provides a similar type of workload.
TPC-H is a decision support or data mining class of benchmark. Why all these different simulations? Because end-users are generally looking to get some idea of how their precious workload will run on each vendor's platform, so they can choose he best performer. That's why they are competitive benchmarks.
In the case we're discussing here, we don't care about that aspect. So, we can choose anything that we think exerts a meaningful stimulus on the SUT. In my experiments that uncovered how the load average metric is determined, I just run a number of hot-loop instances over the course of an hour or so; killing them off about midway through the measurement process. The load average metric was collected every 5 mins via a separate shell script that issued the uptime command. Or something like that. You can read about it in Chap. 6 of my
Perl:PDQ book.
The end goal of the experiment is to determine how to correctly
downsample rate metrics (i.e. units/sec) to a lower granularity (i.e.
units/hour). The question is which is the correct method, arithmetic
mean, harmonic mean, or some other formula. How will the test data
answer the AM vs. HM question?
I would separate this into:
1. Data collection phase
2. Data analysis phase
The reason for the distinction is this. Huxley's monkeys can generate data with lots of spiffy graphs. So that's not the point for performance analysis.
Rather, we need to first look at the kind of data that is produced by the variable speed CPU. Is the selected benchmark simulation meaningful for that purpose? Are the reported benchmark metrics properly defined? What does it tell us? Is that what we expected? Does it jive with other things we know to be true? Did something go wrong in the measurement process? What needs to be corrected? Etc., etc.
Only once we have credible data is it worth moving on to phase 2.
All the above is more or less by way of background about what serious benchmarks look like. But now that I think about it, what we want to do for the purpose of examining variable CPU performance is more akin to applying a long-running batch workload of some type.
We want to saw a tree trunk in half with a variable speed blade. To measure the performance of the blade speed accurately, we want to eliminate other variable effects by applying a giant redwood tree to the saw blade rather than a small pine tree.
With that in mind, wouldn't one of your BOINC-SETI workloads do the trick? We just need it to be long-running and repeatable.