@@ -14,6 +14,7 @@ import (
1414 policyv1 "k8s.io/api/policy/v1"
1515 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
1616 "k8s.io/apimachinery/pkg/types"
17+ "k8s.io/utils/ptr"
1718
1819 enginev2alpha2 "github.com/NVIDIA/KAI-scheduler/pkg/apis/scheduling/v2alpha2"
1920 commonconstants "github.com/NVIDIA/KAI-scheduler/pkg/common/constants"
@@ -61,8 +62,7 @@ type PodGroupInfo struct {
6162 NodesFitErrors map [common_info.PodID ]* common_info.FitErrors
6263
6364 // All tasks of the Job.
64- PodStatusIndex map [pod_status.PodStatus ]pod_info.PodsMap
65- PodInfos pod_info.PodsMap
65+ PodInfos pod_info.PodsMap
6666
6767 Allocated * resource_info.Resource
6868
@@ -76,6 +76,12 @@ type PodGroupInfo struct {
7676 StalenessInfo
7777
7878 schedulingConstraintsSignature common_info.SchedulingConstraintsSignature
79+
80+ // inner cache
81+ tasksToAllocate []* pod_info.PodInfo
82+ tasksToAllocateInitResource * resource_info.Resource
83+ PodStatusIndex map [pod_status.PodStatus ]pod_info.PodsMap
84+ activeAllocatedCount * int
7985}
8086
8187func NewPodGroupInfo (uid common_info.PodGroupID , tasks ... * pod_info.PodInfo ) * PodGroupInfo {
@@ -94,6 +100,7 @@ func NewPodGroupInfo(uid common_info.PodGroupID, tasks ...*pod_info.PodInfo) *Po
94100 TimeStamp : nil ,
95101 Stale : false ,
96102 },
103+ activeAllocatedCount : ptr .To (0 ),
97104 }
98105
99106 for _ , task := range tasks {
@@ -155,6 +162,11 @@ func (podGroupInfo *PodGroupInfo) addTaskIndex(ti *pod_info.PodInfo) {
155162 }
156163
157164 podGroupInfo.PodStatusIndex [ti.Status ][ti.UID ] = ti
165+ if pod_status .IsActiveAllocatedStatus (ti .Status ) {
166+ podGroupInfo .activeAllocatedCount = ptr .To (* podGroupInfo .activeAllocatedCount + 1 )
167+ }
168+
169+ podGroupInfo .invalidateTasksCache ()
158170}
159171
160172func (podGroupInfo * PodGroupInfo ) AddTaskInfo (ti * pod_info.PodInfo ) {
@@ -182,31 +194,44 @@ func (podGroupInfo *PodGroupInfo) UpdateTaskStatus(task *pod_info.PodInfo, statu
182194func (podGroupInfo * PodGroupInfo ) deleteTaskIndex (ti * pod_info.PodInfo ) {
183195 if tasks , found := podGroupInfo .PodStatusIndex [ti .Status ]; found {
184196 delete (tasks , ti .UID )
197+ if pod_status .IsActiveAllocatedStatus (ti .Status ) {
198+ podGroupInfo .activeAllocatedCount = ptr .To (* podGroupInfo .activeAllocatedCount - 1 )
199+ }
185200
186201 if len (tasks ) == 0 {
187202 delete (podGroupInfo .PodStatusIndex , ti .Status )
188203 }
204+
205+ podGroupInfo .invalidateTasksCache ()
189206 }
190207}
191208
192- func (podGroupInfo * PodGroupInfo ) GetActiveAllocatedTasks () []* pod_info.PodInfo {
193- var tasksToAllocate []* pod_info.PodInfo
194- for _ , task := range podGroupInfo .PodInfos {
195- if pod_status .IsActiveAllocatedStatus (task .Status ) {
196- tasksToAllocate = append (tasksToAllocate , task )
209+ func (podGroupInfo * PodGroupInfo ) invalidateTasksCache () {
210+ podGroupInfo .tasksToAllocate = nil
211+ podGroupInfo .tasksToAllocateInitResource = nil
212+ }
213+
214+ func (podGroupInfo * PodGroupInfo ) GetActiveAllocatedTasksCount () int {
215+ if podGroupInfo .activeAllocatedCount == nil {
216+ var taskCount int
217+ for _ , task := range podGroupInfo .PodInfos {
218+ if pod_status .IsActiveAllocatedStatus (task .Status ) {
219+ taskCount ++
220+ }
197221 }
222+ podGroupInfo .activeAllocatedCount = ptr .To (taskCount )
198223 }
199- return tasksToAllocate
224+ return * podGroupInfo . activeAllocatedCount
200225}
201226
202- func (podGroupInfo * PodGroupInfo ) GetActivelyRunningTasks () [] * pod_info. PodInfo {
203- var tasks [] * pod_info. PodInfo
227+ func (podGroupInfo * PodGroupInfo ) GetActivelyRunningTasksCount () int32 {
228+ tasksCount := int32 ( 0 )
204229 for _ , task := range podGroupInfo .PodInfos {
205230 if pod_status .IsActiveUsedStatus (task .Status ) {
206- tasks = append ( tasks , task )
231+ tasksCount += 1
207232 }
208233 }
209- return tasks
234+ return tasksCount
210235}
211236
212237func (podGroupInfo * PodGroupInfo ) DeleteTaskInfo (ti * pod_info.PodInfo ) error {
@@ -342,8 +367,9 @@ func (podGroupInfo *PodGroupInfo) CloneWithTasks(tasks []*pod_info.PodInfo) *Pod
342367 PodGroup : podGroupInfo .PodGroup ,
343368 PodGroupUID : podGroupInfo .PodGroupUID ,
344369
345- PodStatusIndex : map [pod_status.PodStatus ]pod_info.PodsMap {},
346- PodInfos : pod_info.PodsMap {},
370+ PodStatusIndex : map [pod_status.PodStatus ]pod_info.PodsMap {},
371+ PodInfos : pod_info.PodsMap {},
372+ activeAllocatedCount : ptr .To (0 ),
347373 }
348374
349375 podGroupInfo .CreationTimestamp .DeepCopyInto (& info .CreationTimestamp )
0 commit comments