Skip to content

Commit c9ff60d

Browse files
authored
Merge pull request kubernetes#127607 from sanposhiho/metric-queuetest
chore: ensure the scheduler handles events before checking the pod position
2 parents f7fef03 + 6624541 commit c9ff60d

File tree

3 files changed

+167
-138
lines changed

3 files changed

+167
-138
lines changed

pkg/scheduler/backend/queue/scheduling_queue.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -920,9 +920,9 @@ func (p *PriorityQueue) Update(logger klog.Logger, oldPod, newPod *v1.Pod) {
920920
events := framework.PodSchedulingPropertiesChange(newPod, oldPod)
921921
for _, evt := range events {
922922
hint := p.isPodWorthRequeuing(logger, pInfo, evt, oldPod, newPod)
923-
queue := p.requeuePodViaQueueingHint(logger, pInfo, hint, framework.UnscheduledPodUpdate.Label)
923+
queue := p.requeuePodViaQueueingHint(logger, pInfo, hint, evt.Label)
924924
if queue != unschedulablePods {
925-
logger.V(5).Info("Pod moved to an internal scheduling queue because the Pod is updated", "pod", klog.KObj(newPod), "event", framework.PodUpdate, "queue", queue)
925+
logger.V(5).Info("Pod moved to an internal scheduling queue because the Pod is updated", "pod", klog.KObj(newPod), "event", evt.Label, "queue", queue)
926926
p.unschedulablePods.delete(pInfo.Pod, gated)
927927
}
928928
if queue == activeQ {

pkg/scheduler/eventhandlers.go

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ func (sched *Scheduler) addPodToSchedulingQueue(obj interface{}) {
133133

134134
func (sched *Scheduler) updatePodInSchedulingQueue(oldObj, newObj interface{}) {
135135
start := time.Now()
136-
defer metrics.EventHandlingLatency.WithLabelValues(framework.UnscheduledPodUpdate.Label).Observe(metrics.SinceInSeconds(start))
136+
137137
logger := sched.logger
138138
oldPod, newPod := oldObj.(*v1.Pod), newObj.(*v1.Pod)
139139
// Bypass update event that carries identical objects; otherwise, a duplicated
@@ -142,6 +142,13 @@ func (sched *Scheduler) updatePodInSchedulingQueue(oldObj, newObj interface{}) {
142142
return
143143
}
144144

145+
defer metrics.EventHandlingLatency.WithLabelValues(framework.UnscheduledPodUpdate.Label).Observe(metrics.SinceInSeconds(start))
146+
for _, evt := range framework.PodSchedulingPropertiesChange(newPod, oldPod) {
147+
if evt.Label != framework.UnscheduledPodUpdate.Label {
148+
defer metrics.EventHandlingLatency.WithLabelValues(evt.Label).Observe(metrics.SinceInSeconds(start))
149+
}
150+
}
151+
145152
isAssumed, err := sched.Cache.IsAssumedPod(newPod)
146153
if err != nil {
147154
utilruntime.HandleError(fmt.Errorf("failed to check whether pod %s/%s is assumed: %v", newPod.Namespace, newPod.Name, err))
@@ -246,7 +253,12 @@ func (sched *Scheduler) updatePodInCache(oldObj, newObj interface{}) {
246253
}
247254

248255
events := framework.PodSchedulingPropertiesChange(newPod, oldPod)
256+
257+
// Save the time it takes to update the pod in the cache.
258+
updatingDuration := metrics.SinceInSeconds(start)
259+
249260
for _, evt := range events {
261+
startMoving := time.Now()
250262
// SchedulingQueue.AssignedPodUpdated has a problem:
251263
// It internally pre-filters Pods to move to activeQ,
252264
// while taking only in-tree plugins into consideration.
@@ -257,10 +269,12 @@ func (sched *Scheduler) updatePodInCache(oldObj, newObj interface{}) {
257269
// Here we use MoveAllToActiveOrBackoffQueue only when QueueingHint is enabled.
258270
// (We cannot switch to MoveAllToActiveOrBackoffQueue right away because of throughput concern.)
259271
if utilfeature.DefaultFeatureGate.Enabled(features.SchedulerQueueingHints) {
260-
sched.SchedulingQueue.MoveAllToActiveOrBackoffQueue(logger, framework.AssignedPodUpdate, oldPod, newPod, nil)
272+
sched.SchedulingQueue.MoveAllToActiveOrBackoffQueue(logger, evt, oldPod, newPod, nil)
261273
} else {
262274
sched.SchedulingQueue.AssignedPodUpdated(logger, oldPod, newPod, evt)
263275
}
276+
movingDuration := metrics.SinceInSeconds(startMoving)
277+
metrics.EventHandlingLatency.WithLabelValues(evt.Label).Observe(updatingDuration + movingDuration)
264278
}
265279
}
266280

0 commit comments

Comments
 (0)