-
Notifications
You must be signed in to change notification settings - Fork 56
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Addition of Collectors and Sample Abstraction Request #290
Comments
SNAFU/Benchmark-wrapper is to run benchmarks, not orchestrate outside tools.
I think if we want pbench collection in a K8s deployment, we orchestrate the pbench agents via Rispaw/Benchmark-Operator.
Most of this functionality could be implemented in the Operator.
Should the PBench agents simply upload the data to the pbench-server, or pbench-controller after the collection is completed?
I discussed this with Robert and the CNV team. Ripsaw/Benchmark-Operator already has a task to collect system metrics and send to ES. https://github.com/cloud-bulldozer/benchmark-operator/blob/master/roles/system-metrics/tasks/main.yml The role here could be used for the PBench collection work.
@learnitall Any additional thoughts? |
Ultimately I'm in agreement with @jtaleric on this. The benchmark-wrapper shouldn't be responsible for integrating with other in-process tools. I'm not against maybe supporting a different output format/target but the data collection shouldn't be tied at the process level. I think it makes sense that any "collector" would be done in a sidecar similar to how Jaeger works https://github.com/jaegertracing/jaeger-kubernetes I'm not even sure I want
I completely agree that there should be one universal implementation for a "sample" in SNAFU, and I think your example makes perfect sense (minus wrapping it with a collector 😄 ) |
Hi! I'm using this space to write about my current progress, updates and plans. The biggest piece right now is the addition of "collectors to the benchmark wrapper":
COLLECTORS
Introduces the ability to run data collection tools alongside benchmark runs
For example, running pbench data collection alongside a fio or uperf benchmark
Structure:
--collector
and--collector-config
options torun_snafu
(as well as--upload
)set_config_vars(config)
: Parses through the config file and sets any specified vars / defaults, makes sure everything that needs to be in the file is.startup()
: Performs env setup and initialization of necessary processes, as well as begins any persistent data collection processes (for continuous data collection over the course of the benchmark).start_sample()
: Starts a data collection sample (for sample-based data collection tools, synced with benchmark samples). Return the sample archive dir.stop_sample()
: Stops a data collection sample.shutdown()
: Stops persistent data collcetion and other processes, performs cleanup and any desired post-processing.upload()
: Uploads a collector's archives using a specified procedure to a desired location.collector_factory
,_load_collectors
,__init__
files, and changes toregistry
have also been maderun_snafu
, if a collector has been specified with a config, it will create/initialize the desired collector class and run that startup tasks. Then, before each benchmark sample, it will start a data collection sample which will be stopped once the benchmark sample ends. After the benchmark is complete, the collector shutdown/post-process tasks are run.--upload
option while still including collector + configupload()
method and the config file.collector_name
dir under the maincollector
dircollector_name.py
file that creates aCollector_name
class based on the abstract collector.prom_extract
tool as another collectorPBENCH
ISSUES/TO-DO
SAMPLE ISSUE
sample
, samples are defined within the benchmark, with each benchmark having its own for-loop iterating through the number of samples and yielding results.collect()
method in the benchmarks where a for-loop is run over the number of samples with each iteration yielding one sample result, simply have acollect_sample()
method that collects one sample of the benchmark (essentially the same code minus the for-loop), then have that called in the new sample loop in run_snafu at each iteration instead.for data in benchmark.run():
(current indexing stuff)
...and then inside the .run() there would be a for loop
for sample in range(samples)
....(code to collect sample)for sample in range(samples):
collector.start_sample()
data = benchmark.collect_sample() ...now just has (code to collect sample), no
for sample in range(samples)
collector.stop_sample()
(current indexing stuff)
The text was updated successfully, but these errors were encountered: