Commit Graph

36 Commits

Author SHA1 Message Date
David Lyle 7efe99f139 disregard collectd tail data from stats
Since collectd is started before the pods are launched and
shutdown after the last pod is launched, we gather data outside
the pod launch window which can adversely influence the per pod
launch stats. This is especially true after the last pod launches
as all the pods are then deleted before collectd stops collecting
metrics.

This patch isolates the collectd data used to only
coincide with the pod launch window.

And additional change in this patch is to improve the secondary
y axis scaling. There was an ill-advised check in previously to
force the scale to be at least 1. This does not work well when
the pod number is significantly higher than say 100 (the max
possible cpu idle value).

This patch changes the scaling to be across all data to be graphed.
The special condition for interface drops and interface errors,
where the data is typically 0. We don't scale by 0.

Signed-off-by: David Lyle <dklyle0@gmail.com>
2019-11-06 14:31:56 +00:00
David Lyle df0af2ab2c fixing makereport container build
A recent change to debian apt repositories led to build errors
for the report container. The error was around stretch release
files. The container image we are based on published an update
which fixes this error. This patch updates to use :latest to
avoid errors when building.

Signed-off-by: David Lyle <dklyle0@gmail.com>
2019-10-30 09:09:39 +00:00
David Lyle e7b7d33be0 handle multiday collectd data
The collectd csv plugin starts a new file for each day that data is
being recorded. Currently, collectd_scaling.R only reads from the
first day's file. This leads to incomplete data being rendered in
the report charts. All the data files are collected and present,
they just need to be read.

This patch makes changes to read all the days of collectd data and add
them to the data set.

Signed-off-by: David Lyle <dklyle0@gmail.com>
2019-10-23 12:02:59 -05:00
Morales Quispe, Marcela f2e89413ad Add extra table about node information into PDF report.
Signed-off-by: Morales Quispe, Marcela <marcela.morales.quispe@intel.com>
2019-10-18 14:42:01 -06:00
David Lyle 50553aa7bb only collect noschedule once
As part of the existing json file, there is a 'kubectl get nodes'
json dump. Instead of collecting this information each pod launch,
use the data already gathered. This data is immutable during the
test runs. This greatly improves the overall runtime of the test
script by preventing expensive kubectl execs per node per iteration.

Signed-off-by: David Lyle <dklyle0@gmail.com>
2019-10-18 12:39:00 -05:00
David Lyle 174c836980 Fixing secondary y axis scaling
The secondary y axis have to be scaled by a factor of the primary
y axis, the default being 1. Some of the charts graph both a data
value and the number of pods. The scale for those are different
and dependent on the data collected. Logic has been added to
calculate the scale for each chart based on the data.

Signed-off-by: David Lyle <dklyle0@gmail.com>
2019-10-18 12:39:00 -05:00
David Lyle 8f67f641ee Support multiple network interfaces and more names
Adding support for more than one network interface in a given node.

Also supporting more interface naming patterns.

Signed-off-by: David Lyle <dklyle0@gmail.com>
2019-10-18 12:39:00 -05:00
David Lyle 20cb90c7f7 Adding support for aysnc metrics via collectd
This patch adds a new script, scaling/k8s_scaling_rapid.sh, for
launching pods and collecting metrics. The goal is to two fold.
The first goal is improve the required runtime duration of scaling
to large numbers of pods. k8s_scaling.sh can take up to 29 hours
to scale to 2900 pods. The is largely due to the overhead of
collecting system utilization stats after each new pod is launched.
This new script will collect system utilization stats asynchronously.
The second goal is to make it easier to collect additional system
utilization stats by leveraging the plugins supported by collectd.

Instead of using the stats daemon set, a new daemon set
that runs collectd on each node is added. collectd configuration
is handled by collectd/collectd.conf A configmap is added to the
K8s cluster containing collectd.conf, so the user of the script
can test new configurations easily. The configmap is created and
deleted as part of the test run. The data from collectd is stored on
each node in the cluster via the csv plugin and the data is
collected to the master node at the end of the test run.

Several new pages have been added to the metrics_report.pdf
These pages cover the same metrics as k8s_scale.sh results, but are
populated with data from collectd. Additionally, network interface
results are added.

To run the report, in addition to the previous steps of creating
a new directory and copying the result json file into it, all the
new <node_name>.tar.gz files must be copied in as well.

Signed-off-by: David Lyle <dklyle0@gmail.com>
2019-10-18 12:39:00 -05:00
Morales Quispe, Marcela 12c59bbf4c Add execution entries at debugging report phase example to avoid confusion.
Signed-off-by: Morales Quispe, Marcela <marcela.morales.quispe@intel.com>
2019-10-16 16:56:13 -06:00
David Lyle ccddc591dc Adding metric for inode usage
Adds support for tracking inode usage on the nodes. Results also
added to report.

The stats pod is updated as well to use net=host.
2019-09-12 09:45:05 -05:00
David Lyle 20c7eccf1f Fixing number of pods in report
In the rewrite of the report generation code, we regressed to
using the passed in requested number of pods rather than the
actual. Since we typically attempt to launch more pods than the
system is capable of, the math for the stats are done incorrectly
and misreported.

This changes the behavior back to using the correct value of the
total number of pods launched.
2019-09-02 10:57:55 -05:00
Graham Whaley 8787955188 metrics: report: generate PNGs alongside the pdf
To aid in incorporating the results graphs and tables into other
documents, generate PNG files of the tables and plots alongside
the full PDF report, and place them in the output directory.

Achieve this by processing an html as well as a pdf targetted
output document, and grabbing the png's generated from that
operation.

Signed-off-by: Graham Whaley <graham.whaley@intel.com>
2019-08-27 12:46:11 -06:00
Graham Whaley 2d1f8551b0 metrics: report: update README with new debug mode info
Debug mode of the report generator now volume mounts the scripts
into the container (rather than just COPYing them in), to allow
interactive edit/run debug cycles. Document it.

Signed-off-by: Graham Whaley <graham.whaley@intel.com>
2019-08-27 09:41:44 -06:00
Graham Whaley 659600b9a6 metrics: report: drop deprecated scaling.R
Now the new tidy_scaling.R seems to be functional, drop the
deprecated scaling.R.
Yes, we could/should probably have just replaced scaling.R, but
that is just the way it panned out.

Signed-off-by: Graham Whaley <graham.whaley@intel.com>
2019-08-27 09:41:44 -06:00
Graham Whaley 0e6596bed6 metrics: report: do not account noschedule. Show boot in S
Do not account for 'noschedule' nodes in the stats calculations,
as they don't host the pods we are measuring.
Show the boot times in seconds, rather than milliseconds.

Signed-off-by: Graham Whaley <graham.whaley@intel.com>
2019-08-27 09:41:44 -06:00
Graham Whaley 6a7eb8bbc9 metrics: report: scaling: use a more 'tidyverse' flow
Due to the nature of the shape of the JSON data import, the scaling
R had some hard wired constructs bound to the data shape. This limited
our extending the JSON data.
recode to be more 'R tidyverse' style.
Also add in a launch time stats table, and split the graphing
across 3 pages to de-cramp them (particularly when rendering >1
test run).

Signed-off-by: Graham Whaley <graham.whaley@intel.com>
2019-08-27 09:41:44 -06:00
Graham Whaley 6e189ff2be metrics: report: mount scripts in debug mode
When in debug mode, mount the scripts dir into the container to
allow 'live' editing and reloading into R. This makes the dev cycle
much faster.

Signed-off-by: Graham Whaley <graham.whaley@intel.com>
2019-08-27 09:41:44 -06:00
Graham Whaley d3cab6b06e metrics: report: switch scaling to tidy R
Switch the rendering of the scaling page to use the tidy R version.

Signed-off-by: Graham Whaley <graham.whaley@intel.com>
2019-08-27 09:41:44 -06:00
Graham Whaley c54c048da6 metrics: report: Add system under test details
Add a table to the end of the report showing useful details about
the systems that were under test - version numbers, resources etc.

Fixes: #145

Signed-off-by: Graham Whaley <graham.whaley@intel.com>
2019-08-15 17:20:35 -06:00
Graham Whaley 615e7d6e6f metrics: report: parallel: change title to 'deployment time'
The time we measure is the time to launch and delete the whole
deployment, not the 'pod'. Change the graph titles to be more
accurate.

Signed-off-by: Graham Whaley <graham.whaley@intel.com>
2019-08-14 10:58:06 -06:00
Graham Whaley 1c14965e6c metrics: parallel: dedup use of aes()
Rather than duplicate the same aes() over all the parts of the ggplot(),
add the aes to the base ggplot, and then default to using that for
all the other additions.

Signed-off-by: Graham Whaley <graham.whaley@intel.com>
2019-08-14 10:58:06 -06:00
Graham Whaley 645110832b metrics: parallel: Only smooth with big data sets
geom_smooth can generate a mass of warnings when applied to a small
dataset. Use the same test (>20 samples) we do for 'do we draw dots',
but in the inverse - so, we either draw dots (small set) or a smoothed
overlayed line (bit sets).

Signed-off-by: Graham Whaley <graham.whaley@intel.com>
2019-08-14 10:58:06 -06:00
Graham Whaley b3f40569b2 metrics: parallel: take into account 'stepping'
Now the data has the ability to 'step' (that is, increment
the pod count by >1 between samples), use that n_pod value
for the x-axis, rather than a +1 count, so the x-axis makes
a lot more sense.

Signed-off-by: Graham Whaley <graham.whaley@intel.com>
2019-08-14 10:58:06 -06:00
David Lyle 15ab28deaf fixing indexing, start with 0 2019-08-14 10:04:24 +01:00
David Lyle 67ee1cb2d4 tuning node dataset charting, removing skip_points 2019-08-08 17:02:19 +01:00
David Lyle c88d9a61c3 clean up 2019-08-07 09:53:36 +01:00
David Lyle d72621ae2e show which node the pod launched on, store pod name 2019-08-07 09:53:36 +01:00
David Lyle af7b595e4a excluding NoSchedule nodes from workload calculations 2019-08-07 09:53:36 +01:00
David Lyle ec9dbe1f0e changing node shapes in charts rather than color 2019-08-02 17:39:44 +01:00
David Lyle 45c9a7821a format fixes 2019-08-02 17:39:44 +01:00
David Lyle d8a8d77d1b Adding charting support for multinode 2019-08-02 17:39:44 +01:00
David Lyle 510dd83b09 adding multinode utilization tracking 2019-08-02 17:39:44 +01:00
Graham Whaley 5c9a5df264 metrics: report: Fix scaling points for boot chart
The boot 'points' code was accidentally updating the cpu plot
(copy and paste error). Correct it to update the correct chart.

Signed-off-by: Graham Whaley <graham.whaley@intel.com>
2019-07-30 13:13:35 -06:00
Graham Whaley e73beb18e1 metrics: parallel: Test deployment parallel pod scaling
Test how long it takes to launch, and delete, a deployment
running up 'n' pods. Used to ascertain if parallel launch times
are linear with number of pods or not.

Signed-off-by: Graham Whaley <graham.whaley@intel.com>
2019-07-30 13:13:35 -06:00
Graham Whaley 59a1f36e37 metrics: common: remove un-used docker-esque code
We were carrying a bunch of legacy docker based functions
that we do not use. Drop them. We can always add them back
in later if we find we do need some.

Signed-off-by: Graham Whaley <graham.whaley@intel.com>
2019-07-30 13:13:35 -06:00
Graham Whaley 351540049d metrics: Add the start of the local report generator
Add the first basic report generator code, utilising R, Rmarkdown
and pandoc to do the data processing and pdf report generation.

Fixes: #121

Signed-off-by: Graham Whaley <graham.whaley@intel.com>
2019-07-24 10:52:13 -06:00