@@ -20,6 +20,7 @@ package e2enode
20
20
21
21
import (
22
22
"fmt"
23
+ "math"
23
24
"sort"
24
25
"strconv"
25
26
"sync"
@@ -36,6 +37,7 @@ import (
36
37
kubemetrics "k8s.io/kubernetes/pkg/kubelet/metrics"
37
38
"k8s.io/kubernetes/test/e2e/framework"
38
39
e2ekubelet "k8s.io/kubernetes/test/e2e/framework/kubelet"
40
+ e2elog "k8s.io/kubernetes/test/e2e/framework/log"
39
41
e2emetrics "k8s.io/kubernetes/test/e2e/framework/metrics"
40
42
imageutils "k8s.io/kubernetes/test/utils/image"
41
43
@@ -548,16 +550,33 @@ func verifyLatencyWithinThreshold(threshold, actual e2emetrics.LatencyMetric, me
548
550
return nil
549
551
}
550
552
553
+ // extractLatencyMetrics returns latency metrics for each percentile(50th, 90th and 99th).
554
+ func extractLatencyMetrics (latencies []e2emetrics.PodLatencyData ) e2emetrics.LatencyMetric {
555
+ length := len (latencies )
556
+ perc50 := latencies [int (math .Ceil (float64 (length * 50 )/ 100 ))- 1 ].Latency
557
+ perc90 := latencies [int (math .Ceil (float64 (length * 90 )/ 100 ))- 1 ].Latency
558
+ perc99 := latencies [int (math .Ceil (float64 (length * 99 )/ 100 ))- 1 ].Latency
559
+ perc100 := latencies [length - 1 ].Latency
560
+ return e2emetrics.LatencyMetric {Perc50 : perc50 , Perc90 : perc90 , Perc99 : perc99 , Perc100 : perc100 }
561
+ }
562
+
563
+ // printLatencies outputs latencies to log with readable format.
564
+ func printLatencies (latencies []e2emetrics.PodLatencyData , header string ) {
565
+ metrics := extractLatencyMetrics (latencies )
566
+ e2elog .Logf ("10%% %s: %v" , header , latencies [(len (latencies )* 9 )/ 10 :])
567
+ e2elog .Logf ("perc50: %v, perc90: %v, perc99: %v" , metrics .Perc50 , metrics .Perc90 , metrics .Perc99 )
568
+ }
569
+
551
570
// logAndVerifyLatency verifies that whether pod creation latency satisfies the limit.
552
571
func logAndVerifyLatency (batchLag time.Duration , e2eLags []e2emetrics.PodLatencyData , podStartupLimits e2emetrics.LatencyMetric ,
553
572
podBatchStartupLimit time.Duration , testInfo map [string ]string , isVerify bool ) {
554
- e2emetrics . PrintLatencies (e2eLags , "worst client e2e total latencies" )
573
+ printLatencies (e2eLags , "worst client e2e total latencies" )
555
574
556
575
// TODO(coufon): do not trust 'kubelet' metrics since they are not reset!
557
576
latencyMetrics , _ := getPodStartLatency (kubeletAddr )
558
577
framework .Logf ("Kubelet Prometheus metrics (not reset):\n %s" , framework .PrettyPrintJSON (latencyMetrics ))
559
578
560
- podStartupLatency := e2emetrics . ExtractLatencyMetrics (e2eLags )
579
+ podStartupLatency := extractLatencyMetrics (e2eLags )
561
580
562
581
// log latency perf data
563
582
logPerfData (getLatencyPerfData (podStartupLatency , testInfo ), "latency" )
0 commit comments