Skip to content

Commit f409793

Browse files
authored
Merge pull request kubernetes#87458 from liu-cong/framework-metrics-new
Record overall Filter latency for all nodes in a scheduling cycle.
2 parents d4fa3d9 + e0aeb4d commit f409793

File tree

3 files changed

+14
-60
lines changed

3 files changed

+14
-60
lines changed

pkg/scheduler/core/generic_scheduler.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -490,6 +490,15 @@ func (g *genericScheduler) findNodesThatPassFilters(ctx context.Context, state *
490490
}
491491
}
492492

493+
beginCheckNode := time.Now()
494+
statusCode := framework.Success
495+
defer func() {
496+
// We record Filter extension point latency here instead of in framework.go because framework.RunFilterPlugins
497+
// function is called for each node, whereas we want to have an overall latency for all nodes per scheduling cycle.
498+
// Note that this latency also includes latency for `addNominatedPods`, which calls framework.RunPreFilterAddPod.
499+
metrics.FrameworkExtensionPointDuration.WithLabelValues(framework.Filter, statusCode.String()).Observe(metrics.SinceInSeconds(beginCheckNode))
500+
}()
501+
493502
// Stops searching for more nodes once the configured number of feasible nodes
494503
// are found.
495504
workqueue.ParallelizeUntil(ctx, 16, len(allNodes), checkNode)
@@ -498,6 +507,7 @@ func (g *genericScheduler) findNodesThatPassFilters(ctx context.Context, state *
498507

499508
filtered = filtered[:filteredLen]
500509
if err := errCh.ReceiveError(); err != nil {
510+
statusCode = framework.Error
501511
return nil, err
502512
}
503513
return filtered, nil

pkg/scheduler/framework/v1alpha1/framework.go

Lines changed: 4 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ import (
2222
"reflect"
2323
"time"
2424

25-
v1 "k8s.io/api/core/v1"
25+
"k8s.io/api/core/v1"
2626
"k8s.io/apimachinery/pkg/runtime"
2727
"k8s.io/apimachinery/pkg/types"
2828
"k8s.io/apimachinery/pkg/util/sets"
@@ -39,12 +39,13 @@ import (
3939
)
4040

4141
const (
42+
// Filter is the name of the filter extension point.
43+
Filter = "Filter"
4244
// Specifies the maximum timeout a permit plugin can return.
4345
maxTimeout time.Duration = 15 * time.Minute
4446
preFilter = "PreFilter"
4547
preFilterExtensionAddPod = "PreFilterExtensionAddPod"
4648
preFilterExtensionRemovePod = "PreFilterExtensionRemovePod"
47-
filter = "Filter"
4849
postFilter = "PostFilter"
4950
score = "Score"
5051
scoreExtensionNormalize = "ScoreExtensionNormalize"
@@ -353,10 +354,6 @@ func (f *framework) RunPreFilterExtensionAddPod(
353354
podToAdd *v1.Pod,
354355
nodeInfo *schedulernodeinfo.NodeInfo,
355356
) (status *Status) {
356-
startTime := time.Now()
357-
defer func() {
358-
metrics.FrameworkExtensionPointDuration.WithLabelValues(preFilterExtensionAddPod, status.Code().String()).Observe(metrics.SinceInSeconds(startTime))
359-
}()
360357
for _, pl := range f.preFilterPlugins {
361358
if pl.PreFilterExtensions() == nil {
362359
continue
@@ -393,10 +390,6 @@ func (f *framework) RunPreFilterExtensionRemovePod(
393390
podToRemove *v1.Pod,
394391
nodeInfo *schedulernodeinfo.NodeInfo,
395392
) (status *Status) {
396-
startTime := time.Now()
397-
defer func() {
398-
metrics.FrameworkExtensionPointDuration.WithLabelValues(preFilterExtensionRemovePod, status.Code().String()).Observe(metrics.SinceInSeconds(startTime))
399-
}()
400393
for _, pl := range f.preFilterPlugins {
401394
if pl.PreFilterExtensions() == nil {
402395
continue
@@ -434,10 +427,6 @@ func (f *framework) RunFilterPlugins(
434427
nodeInfo *schedulernodeinfo.NodeInfo,
435428
) PluginToStatus {
436429
var firstFailedStatus *Status
437-
startTime := time.Now()
438-
defer func() {
439-
metrics.FrameworkExtensionPointDuration.WithLabelValues(filter, firstFailedStatus.Code().String()).Observe(metrics.SinceInSeconds(startTime))
440-
}()
441430
statuses := make(PluginToStatus)
442431
for _, pl := range f.filterPlugins {
443432
pluginStatus := f.runFilterPlugin(ctx, pl, state, pod, nodeInfo)
@@ -468,7 +457,7 @@ func (f *framework) runFilterPlugin(ctx context.Context, pl FilterPlugin, state
468457
}
469458
startTime := time.Now()
470459
status := pl.Filter(ctx, state, pod, nodeInfo)
471-
f.metricsRecorder.observePluginDurationAsync(filter, pl.Name(), status, metrics.SinceInSeconds(startTime))
460+
f.metricsRecorder.observePluginDurationAsync(Filter, pl.Name(), status, metrics.SinceInSeconds(startTime))
472461
return status
473462
}
474463

pkg/scheduler/framework/v1alpha1/framework_test.go

Lines changed: 0 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -893,30 +893,6 @@ func TestRecordingMetrics(t *testing.T) {
893893
wantExtensionPoint: "PreFilter",
894894
wantStatus: Success,
895895
},
896-
{
897-
name: "PreFilterAddPod - Success",
898-
action: func(f Framework) { f.RunPreFilterExtensionAddPod(context.Background(), state, pod, nil, nil) },
899-
wantExtensionPoint: "PreFilterExtensionAddPod",
900-
wantStatus: Success,
901-
},
902-
{
903-
name: "PreFilterRemovePod - Success",
904-
action: func(f Framework) { f.RunPreFilterExtensionRemovePod(context.Background(), state, pod, nil, nil) },
905-
wantExtensionPoint: "PreFilterExtensionRemovePod",
906-
wantStatus: Success,
907-
},
908-
{
909-
name: "PreFilterRemovePod - Success",
910-
action: func(f Framework) { f.RunPreFilterPlugins(context.Background(), state, pod) },
911-
wantExtensionPoint: "PreFilter",
912-
wantStatus: Success,
913-
},
914-
{
915-
name: "Filter - Success",
916-
action: func(f Framework) { f.RunFilterPlugins(context.Background(), state, pod, nil) },
917-
wantExtensionPoint: "Filter",
918-
wantStatus: Success,
919-
},
920896
{
921897
name: "PostFilter - Success",
922898
action: func(f Framework) { f.RunPostFilterPlugins(context.Background(), state, pod, nil, nil) },
@@ -973,27 +949,6 @@ func TestRecordingMetrics(t *testing.T) {
973949
wantExtensionPoint: "PreFilter",
974950
wantStatus: Error,
975951
},
976-
{
977-
name: "PreFilterAddPod - Error",
978-
action: func(f Framework) { f.RunPreFilterExtensionAddPod(context.Background(), state, pod, nil, nil) },
979-
inject: injectedResult{PreFilterAddPodStatus: int(Error)},
980-
wantExtensionPoint: "PreFilterExtensionAddPod",
981-
wantStatus: Error,
982-
},
983-
{
984-
name: "PreFilterRemovePod - Error",
985-
action: func(f Framework) { f.RunPreFilterExtensionRemovePod(context.Background(), state, pod, nil, nil) },
986-
inject: injectedResult{PreFilterRemovePodStatus: int(Error)},
987-
wantExtensionPoint: "PreFilterExtensionRemovePod",
988-
wantStatus: Error,
989-
},
990-
{
991-
name: "Filter - Error",
992-
action: func(f Framework) { f.RunFilterPlugins(context.Background(), state, pod, nil) },
993-
inject: injectedResult{FilterStatus: int(Error)},
994-
wantExtensionPoint: "Filter",
995-
wantStatus: Error,
996-
},
997952
{
998953
name: "PostFilter - Error",
999954
action: func(f Framework) { f.RunPostFilterPlugins(context.Background(), state, pod, nil, nil) },

0 commit comments

Comments
 (0)