Benjamin Bannier created MESOS-9543:
---------------------------------------
Summary: Consider improving benchmark result output
Key: MESOS-9543
URL: https://issues.apache.org/jira/browse/MESOS-9543
Project: Mesos
Issue Type: Improvement
Components: test
Reporter: Benjamin Bannier
We should consider improving how benchmarks report their results.
As an example, consider
{{SlaveAndFrameworkCount/HierarchicalAllocator_BENCHMARK_Test.DeclineOffers/1}}.
It logs lines like
{noformat}
[==========] Running 10 tests from 1 test case.
[----------] Global test environment set-up.
[----------] 10 tests from
SlaveAndFrameworkCount/HierarchicalAllocator_BENCHMARK_Test
[ RUN ]
SlaveAndFrameworkCount/HierarchicalAllocator_BENCHMARK_Test.DeclineOffers/0
Using 1000 agents and 1 frameworks
Added 1 frameworks in 526091ns
Added 1000 agents in 61.116343ms
round 0 allocate() took 14.70722ms to make 0 offers after filtering 1000 offers
round 1 allocate() took 15.055396ms to make 0 offers after filtering 1000 offers
[ OK ]
SlaveAndFrameworkCount/HierarchicalAllocator_BENCHMARK_Test.DeclineOffers/0
(135 ms)
[ RUN ]
SlaveAndFrameworkCount/HierarchicalAllocator_BENCHMARK_Test.DeclineOffers/1
{noformat}
I believe there are a number of usability issues with this output format
* lines with benchmark data need to be {{grep}}'d from the test log depending
on some test-dependent format
* test parameters need to be manually inferred from the test name
* no consistent time unit is used throughout, but instead {{Duration}} values
are just pretty printed
This makes it hard to consume this results in a generic way (e.g., for
plotting, comparison, etc.) as to do that one likely needs to implement a
custom log parser (for each test).
We should consider introducing a generic way to log results from tests which
requires minimal intervention.
One possible output format could be JSON as it allows to combine heterogeneous
data like in above example (which might be harder to do in CSV). There exists a
number of standard tools which can be used to filter JSON data; it can also be
read by many data analysis tools (e.g., {{pandas}}). Example for above data:
{noformat}
{
"case": "SlaveAndFrameworkCount/HierarchicalAllocator_BENCHMARK_Test",
"test": "DeclineOffers/0",
"parameters": [1000, 1],
"benchmarks": {
"add_agents": [61.116343],
"add_frameworks": [0.0526091],
"allocate": [
{"round": 0, "time": 14.70722, "offers": 0, "filtering": 1000},
{"round": 1, "time": 15.055396, "offers": 0, "filtering": 1000}
]
}
}
{noformat}
Such data could be logged at the end of the test execution with a clear prefix
to allow aggregating data from many benchmark results in a single log file with
tools like {{grep}}. We could provide that in addition to what is already
logged (which might be generated by the same tool).
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)