diff --git a/pkg/scheduler/plugins/deviceshare/plugin.go b/pkg/scheduler/plugins/deviceshare/plugin.go index aaa4242b7..43b0bce28 100644 --- a/pkg/scheduler/plugins/deviceshare/plugin.go +++ b/pkg/scheduler/plugins/deviceshare/plugin.go @@ -386,6 +386,12 @@ func (p *Plugin) FilterReservation(ctx context.Context, cycleState *framework.Cy } func (p *Plugin) Reserve(ctx context.Context, cycleState *framework.CycleState, pod *corev1.Pod, nodeName string) *framework.Status { + defer func() { + // ReservationRestoreState is O(n) complexity of node number of the cluster. + // cleanReservationRestoreState clears ReservationRestoreState in the stateData to reduce memory cost before entering + // the binding cycle. + cleanReservationRestoreState(cycleState) + }() state, status := getPreFilterState(cycleState) if !status.IsSuccess() { return status diff --git a/pkg/scheduler/plugins/deviceshare/reservation.go b/pkg/scheduler/plugins/deviceshare/reservation.go index f508c7a5b..19cf91b3c 100644 --- a/pkg/scheduler/plugins/deviceshare/reservation.go +++ b/pkg/scheduler/plugins/deviceshare/reservation.go @@ -67,6 +67,10 @@ func getReservationRestoreState(cycleState *framework.CycleState) *reservationRe return state } +func cleanReservationRestoreState(cycleState *framework.CycleState) { + cycleState.Delete(reservationRestoreStateKey) +} + func (s *reservationRestoreStateData) Clone() framework.StateData { return s }