Skip to content

Commit e0aeb4d

Browse files
committed
Record overall Filter latency for all nodes in a scheduling cycle.
1 parent c30f448 commit e0aeb4d

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"
@@ -351,10 +352,6 @@ func (f *framework) RunPreFilterExtensionAddPod(
351352
podToAdd *v1.Pod,
352353
nodeInfo *schedulernodeinfo.NodeInfo,
353354
) (status *Status) {
354-
startTime := time.Now()
355-
defer func() {
356-
metrics.FrameworkExtensionPointDuration.WithLabelValues(preFilterExtensionAddPod, status.Code().String()).Observe(metrics.SinceInSeconds(startTime))
357-
}()
358355
for _, pl := range f.preFilterPlugins {
359356
if pl.PreFilterExtensions() == nil {
360357
continue
@@ -391,10 +388,6 @@ func (f *framework) RunPreFilterExtensionRemovePod(
391388
podToRemove *v1.Pod,
392389
nodeInfo *schedulernodeinfo.NodeInfo,
393390
) (status *Status) {
394-
startTime := time.Now()
395-
defer func() {
396-
metrics.FrameworkExtensionPointDuration.WithLabelValues(preFilterExtensionRemovePod, status.Code().String()).Observe(metrics.SinceInSeconds(startTime))
397-
}()
398391
for _, pl := range f.preFilterPlugins {
399392
if pl.PreFilterExtensions() == nil {
400393
continue
@@ -432,10 +425,6 @@ func (f *framework) RunFilterPlugins(
432425
nodeInfo *schedulernodeinfo.NodeInfo,
433426
) PluginToStatus {
434427
var firstFailedStatus *Status
435-
startTime := time.Now()
436-
defer func() {
437-
metrics.FrameworkExtensionPointDuration.WithLabelValues(filter, firstFailedStatus.Code().String()).Observe(metrics.SinceInSeconds(startTime))
438-
}()
439428
statuses := make(PluginToStatus)
440429
for _, pl := range f.filterPlugins {
441430
pluginStatus := f.runFilterPlugin(ctx, pl, state, pod, nodeInfo)
@@ -466,7 +455,7 @@ func (f *framework) runFilterPlugin(ctx context.Context, pl FilterPlugin, state
466455
}
467456
startTime := time.Now()
468457
status := pl.Filter(ctx, state, pod, nodeInfo)
469-
f.metricsRecorder.observePluginDurationAsync(filter, pl.Name(), status, metrics.SinceInSeconds(startTime))
458+
f.metricsRecorder.observePluginDurationAsync(Filter, pl.Name(), status, metrics.SinceInSeconds(startTime))
470459
return status
471460
}
472461

pkg/scheduler/framework/v1alpha1/framework_test.go

Lines changed: 0 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -865,30 +865,6 @@ func TestRecordingMetrics(t *testing.T) {
865865
wantExtensionPoint: "PreFilter",
866866
wantStatus: Success,
867867
},
868-
{
869-
name: "PreFilterAddPod - Success",
870-
action: func(f Framework) { f.RunPreFilterExtensionAddPod(context.Background(), state, pod, nil, nil) },
871-
wantExtensionPoint: "PreFilterExtensionAddPod",
872-
wantStatus: Success,
873-
},
874-
{
875-
name: "PreFilterRemovePod - Success",
876-
action: func(f Framework) { f.RunPreFilterExtensionRemovePod(context.Background(), state, pod, nil, nil) },
877-
wantExtensionPoint: "PreFilterExtensionRemovePod",
878-
wantStatus: Success,
879-
},
880-
{
881-
name: "PreFilterRemovePod - Success",
882-
action: func(f Framework) { f.RunPreFilterPlugins(context.Background(), state, pod) },
883-
wantExtensionPoint: "PreFilter",
884-
wantStatus: Success,
885-
},
886-
{
887-
name: "Filter - Success",
888-
action: func(f Framework) { f.RunFilterPlugins(context.Background(), state, pod, nil) },
889-
wantExtensionPoint: "Filter",
890-
wantStatus: Success,
891-
},
892868
{
893869
name: "PostFilter - Success",
894870
action: func(f Framework) { f.RunPostFilterPlugins(context.Background(), state, pod, nil, nil) },
@@ -945,27 +921,6 @@ func TestRecordingMetrics(t *testing.T) {
945921
wantExtensionPoint: "PreFilter",
946922
wantStatus: Error,
947923
},
948-
{
949-
name: "PreFilterAddPod - Error",
950-
action: func(f Framework) { f.RunPreFilterExtensionAddPod(context.Background(), state, pod, nil, nil) },
951-
inject: injectedResult{PreFilterAddPodStatus: int(Error)},
952-
wantExtensionPoint: "PreFilterExtensionAddPod",
953-
wantStatus: Error,
954-
},
955-
{
956-
name: "PreFilterRemovePod - Error",
957-
action: func(f Framework) { f.RunPreFilterExtensionRemovePod(context.Background(), state, pod, nil, nil) },
958-
inject: injectedResult{PreFilterRemovePodStatus: int(Error)},
959-
wantExtensionPoint: "PreFilterExtensionRemovePod",
960-
wantStatus: Error,
961-
},
962-
{
963-
name: "Filter - Error",
964-
action: func(f Framework) { f.RunFilterPlugins(context.Background(), state, pod, nil) },
965-
inject: injectedResult{FilterStatus: int(Error)},
966-
wantExtensionPoint: "Filter",
967-
wantStatus: Error,
968-
},
969924
{
970925
name: "PostFilter - Error",
971926
action: func(f Framework) { f.RunPostFilterPlugins(context.Background(), state, pod, nil, nil) },

0 commit comments

Comments
 (0)