123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 |
- // +build linux
- /*
- Copyright 2015 The Kubernetes Authors.
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
- http://www.apache.org/licenses/LICENSE-2.0
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- */
- package e2e_node
- import (
- "sort"
- "time"
- "k8s.io/kubernetes/pkg/api/unversioned"
- "k8s.io/kubernetes/test/e2e/framework"
- "k8s.io/kubernetes/test/e2e/perftype"
- )
- const (
- // TODO(coufon): be consistent with perf_util.go version
- currentDataVersion = "v1"
- TimeSeriesTag = "[Result:TimeSeries]"
- TimeSeriesEnd = "[Finish:TimeSeries]"
- )
- type NodeTimeSeries struct {
- // value in OperationData is an array of timestamps
- OperationData map[string][]int64 `json:"op_series,omitempty"`
- ResourceData map[string]*ResourceSeries `json:"resource_series,omitempty"`
- Labels map[string]string `json:"labels"`
- Version string `json:"version"`
- }
- // logDensityTimeSeries logs the time series data of operation and resource usage
- func logDensityTimeSeries(rc *ResourceCollector, create, watch map[string]unversioned.Time, testName string) {
- timeSeries := &NodeTimeSeries{
- Labels: map[string]string{
- "node": framework.TestContext.NodeName,
- "test": testName,
- },
- Version: currentDataVersion,
- }
- // Attach operation time series.
- timeSeries.OperationData = map[string][]int64{
- "create": getCumulatedPodTimeSeries(create),
- "running": getCumulatedPodTimeSeries(watch),
- }
- // Attach resource time series.
- timeSeries.ResourceData = rc.GetResourceTimeSeries()
- // Log time series with tags
- framework.Logf("%s %s\n%s", TimeSeriesTag, framework.PrettyPrintJSON(timeSeries), TimeSeriesEnd)
- }
- type int64arr []int64
- func (a int64arr) Len() int { return len(a) }
- func (a int64arr) Swap(i, j int) { a[i], a[j] = a[j], a[i] }
- func (a int64arr) Less(i, j int) bool { return a[i] < a[j] }
- // getCumulatedPodTimeSeries gets the cumulative pod number time series.
- func getCumulatedPodTimeSeries(timePerPod map[string]unversioned.Time) []int64 {
- timeSeries := make(int64arr, 0)
- for _, ts := range timePerPod {
- timeSeries = append(timeSeries, ts.Time.UnixNano())
- }
- // Sort all timestamps.
- sort.Sort(timeSeries)
- return timeSeries
- }
- // getLatencyPerfData returns perf data of pod startup latency.
- func getLatencyPerfData(latency framework.LatencyMetric, testName string) *perftype.PerfData {
- return &perftype.PerfData{
- Version: currentDataVersion,
- DataItems: []perftype.DataItem{
- {
- Data: map[string]float64{
- "Perc50": float64(latency.Perc50) / 1000000,
- "Perc90": float64(latency.Perc90) / 1000000,
- "Perc99": float64(latency.Perc99) / 1000000,
- "Perc100": float64(latency.Perc100) / 1000000,
- },
- Unit: "ms",
- Labels: map[string]string{
- "datatype": "latency",
- "latencytype": "create-pod",
- },
- },
- },
- Labels: map[string]string{
- "node": framework.TestContext.NodeName,
- "test": testName,
- },
- }
- }
- // getThroughputPerfData returns perf data of pod creation startup throughput.
- func getThroughputPerfData(batchLag time.Duration, e2eLags []framework.PodLatencyData, podsNr int, testName string) *perftype.PerfData {
- return &perftype.PerfData{
- Version: currentDataVersion,
- DataItems: []perftype.DataItem{
- {
- Data: map[string]float64{
- "batch": float64(podsNr) / batchLag.Minutes(),
- "single-worst": 1.0 / e2eLags[len(e2eLags)-1].Latency.Minutes(),
- },
- Unit: "pods/min",
- Labels: map[string]string{
- "datatype": "throughput",
- "latencytype": "create-pod",
- },
- },
- },
- Labels: map[string]string{
- "node": framework.TestContext.NodeName,
- "test": testName,
- },
- }
- }
|