dlv volcano scheduler

[root@bogon data2]# source ./kata/go_source

 

 

[root@bogon delve]# ps -elf | grep scheduler
4 S nova      2302     1  0  80   0 -  3748 SyS_ep  2020 ?        09:22:51 /usr/bin/python2 /usr/bin/nova-scheduler
0 S root     27494 10930  0  80   0 -  1727 pipe_w 14:59 pts/0    00:00:00 grep --color scheduler
4 S root     39444 39423  0  80   0 - 11577 futex_ Jul05 ?        00:40:40 /vc-scheduler --logtostderr --scheduler-conf=/volcano.scheduler/volcano-scheduler.conf -v=3 2>&1

 

[root@bogon delve]# dlv attach 39444 
Type 'help' for list of commands.

 

(dlv) b updateJob
Breakpoint 2 (enabled) set at 0xeb2b70 for volcano.sh/volcano/pkg/scheduler/framework.(*jobUpdater).updateJob() /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/framework/job_updater.go:97
(dlv) c
> volcano.sh/volcano/pkg/scheduler/framework.(*jobUpdater).updateJob() /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/framework/job_updater.go:97 (hits goroutine(1812870):1 total:1) (PC: 0xeb2b70)
Warning: debugging optimized function
(dlv) bt
0  0x0000000000eb2b70 in volcano.sh/volcano/pkg/scheduler/framework.(*jobUpdater).updateJob
   at /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/framework/job_updater.go:97
1  0x0000000000ebcd30 in volcano.sh/volcano/pkg/scheduler/framework.(*jobUpdater).updateJob-fm
   at /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/framework/job_updater.go:97
2  0x000000000059429c in k8s.io/client-go/util/workqueue.ParallelizeUntil.func1
   at /usr/wulei/projects/src/volcano.sh/volcano/vendor/k8s.io/client-go/util/workqueue/parallelizer.go:57
3  0x0000000000073ff4 in runtime.goexit
   at /usr/local/go/src/runtime/asm_arm64.s:1148

 

 

 

func (pc *Scheduler) Run(stopCh <-chan struct{}) {
   pc.loadSchedulerConf()
   go pc.watchSchedulerConf(stopCh)
   // Start cache for policy.
   go pc.cache.Run(stopCh)
   pc.cache.WaitForCacheSync(stopCh)
   go wait.Until(pc.runOnce, pc.schedulePeriod, stopCh)
}

func (pc *Scheduler) runOnce() {
    klog.V(4).Infof("Start scheduling ...")
    scheduleStartTime := time.Now()
    defer klog.V(4).Infof("End scheduling ...")

    pc.mutex.Lock()
    actions := pc.actions
    plugins := pc.plugins
    configurations := pc.configurations
    pc.mutex.Unlock()

    ssn := framework.OpenSession(pc.cache, plugins, configurations)
    defer framework.CloseSession(ssn)

    for _, action := range actions {
        actionStartTime := time.Now()
        action.Execute(ssn)
        metrics.UpdateActionDuration(action.Name(), metrics.Duration(actionStartTime))
    }
    metrics.UpdateE2eDuration(metrics.Duration(scheduleStartTime))
}

 

 

每次调用 runOnce 的过程如下面调度流程图所示:

 

 

 

 

  • OpenSession: 获得这次调度过程的上下文,主要是对 cache 的信息(JobInfos,NodeInfos)做一次 snapshot,然后注册不同 actions 的 plugins。
  • enqueue:这个 action 目的是更新一次集群的可提供的资源和待调度 job 的状态,如果 job 里面所有的 task 所需要的资源比集群空余资源小,就会把 job.PodGroup.Status.Phase 从 PodGroupPending 置为 PodGroupInqueue。从这里可以看出 volcano 是以 job 为单位进行调度准入的。
  • allocate:这个 action 是调度的的主逻辑,对应 kube-scheduler 的调度和绑定这两步。不过,这里以 task 为单位进行,也是通过预选(PredicateNodes),优选(PrioritizeNodes)的步骤筛选合适的 node,然后对 task 和 node 进行绑定。
  • preempt:抢占 actions 是可选的,不过跟 kube-scheduler 的抢占不同的是,不会抢占已经调度完成的 tasks,只会尝试从其他调度队列中的 jobs 或者是同一调度队列的 jobs 中抢占资源(根据 jobs 的优先级抢占)。如果希望抢占已经调度的资源,可以开启另外一个 action reclaim ,会尝试抢占其他低优先级队列中的已经调度 jobs 的资源。
  • backfill:这个 actions 我认为是 volcano 比较特别的一个功能,主要是对前面提到还在 pending 中的 jobs 预留资源,因为在集群资源紧张的时候,有可能还没等到有足够的资源启动 job 所有的 tasks,资源就被分配掉了。backfill 会尝试看到资源就申请占用着,等到 jobs 启动的条件足够再退出来让给 job。

 

 

volcano调度流程图

image-20191202165727868

代码流程图

image-20191202163510557

说明:

(1)在每轮session调度期间,使用的都是缓存中的数据,如果这个时候集群资源更新了,当前session中的数据不会更新

(2)enqueue的作用就是,根据当前集群资源情况预先筛选出一部分作业。集群资源更新相关的代码都要在这里修改。

(3)allocate负责真正的pod 调度过程。调度逻辑相关的代码需要在这里修改。

 

(dlv) b allocate.(*Action).Execute
Breakpoint 1 (enabled) set at 0xf083f0 for volcano.sh/volcano/pkg/scheduler/actions/allocate.(*Action).Execute() /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/actions/allocate/allocate.go:40
(dlv) c
> volcano.sh/volcano/pkg/scheduler/actions/allocate.(*Action).Execute() /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/actions/allocate/allocate.go:40 (hits goroutine(188):1 total:1) (PC: 0xf083f0)
Warning: debugging optimized function
(dlv) bt
0  0x0000000000f083f0 in volcano.sh/volcano/pkg/scheduler/actions/allocate.(*Action).Execute
   at /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/actions/allocate/allocate.go:40
1  0x0000000000ee6fe8 in volcano.sh/volcano/pkg/scheduler.(*Scheduler).runOnce
   at /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/scheduler.go:81
2  0x0000000000ee7818 in volcano.sh/volcano/pkg/scheduler.(*Scheduler).runOnce-fm
   at /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/scheduler.go:69
3  0x0000000000339ae4 in k8s.io/apimachinery/pkg/util/wait.BackoffUntil.func1
   at /usr/wulei/projects/src/volcano.sh/volcano/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:155
4  0x0000000000338b54 in k8s.io/apimachinery/pkg/util/wait.BackoffUntil
   at /usr/wulei/projects/src/volcano.sh/volcano/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:156
5  0x0000000000338ac8 in k8s.io/apimachinery/pkg/util/wait.JitterUntil
   at /usr/wulei/projects/src/volcano.sh/volcano/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:133
6  0x0000000000338a28 in k8s.io/apimachinery/pkg/util/wait.Until
   at /usr/wulei/projects/src/volcano.sh/volcano/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:90
7  0x0000000000073ff4 in runtime.goexit
   at /usr/local/go/src/runtime/asm_arm64.s:1148

 

调度器的本质还是给所有没有绑定到节点上的pod找到合适的节点并绑定上去,但是为了实现gang调度、抢占、资源预留等功能,不能跟k8s的调度器一样通过watch到的pod事件来触发调度(大多数情况下,每一个pod的调度都是单pod最优),所以volcano的调度器采用的是周期性全局调度的方式。我们在看volcano的调度器代码时也能够看到调度逻辑也是这样的思路:

  • list-watch的是PodGroup和Node
  • 周期性创建一个全局调度的Session,对集群做一次快照
  • 在每一个Session中,根据配置的调度算法和策略对快照中的所有PodGroup进行调度

 

 

// Scheduler watches for new unscheduled pods for volcano. It attempts to find
// nodes that they fit on and writes bindings back to the api server.
type Scheduler struct {
    cache          schedcache.Cache   // Cache是一个接口,实现了这个接口的是SchedulerCache,所有调度资源的缓存
    actions        []framework.Action // 调度器的配置文件中设置的每一轮调度的处理逻辑,有enqueue, allocate, backfill等
    plugins        []conf.Tier        // 调度器的配置文件中设置的调度算法的各个层级的算法集合
    configurations []conf.Configuration  // 调度器每个Action对应的参数
    schedulerConf  string             // 调度器配置文件路径
    schedulePeriod time.Duration      // 调度器的调度周期,默认1s
}

一个默认的配置文件如下:

 scheduler/util.go

var defaultSchedulerConf = `
actions: "enqueue, allocate, backfill"
tiers:
- plugins:
  - name: priority
  - name: gang
- plugins:
  - name: drf
  - name: predicates
  - name: proportion
  - name: nodeorder
`

 

kubectl apply  -f job.yaml 执行前

root@ubuntu:~# cat job.yaml 
apiVersion: batch.volcano.sh/v1alpha1
kind: Job
metadata:
  name: test-job
spec:
  minAvailable: 3
  schedulerName: volcano
  policies:
    - event: PodEvicted
      action: RestartJob
  plugins:
    ssh: []
    env: []
    svc: []
  maxRetry: 5
  queue: default
  # Comment out the following section to enable volumes for job input/output.
  #volumes:
  #  - mountPath: "/myinput"
  #  - mountPath: "/myoutput"
  #    volumeClaimName: "testvolumeclaimname"
  #    volumeClaim:
  #      accessModes: [ "ReadWriteOnce" ]
  #      storageClassName: "my-storage-class"
  #      resources:
  #        requests:
  #          storage: 1Gi
  tasks:
    - replicas: 6
      name: "default-nginx"
      template:
        metadata:
          name: web
        spec:
          containers:
            - image: nginx
              imagePullPolicy: IfNotPresent
              name: nginx
              resources:
                requests:
                  cpu: "1"
          restartPolicy: OnFailure

 

 

(dlv) bt
0  0x0000000000f0b1d0 in volcano.sh/volcano/pkg/scheduler/actions/enqueue.(*Action).Execute
   at /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/actions/enqueue/enqueue.go:52
1  0x0000000000ee6fe8 in volcano.sh/volcano/pkg/scheduler.(*Scheduler).runOnce
   at /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/scheduler.go:81
2  0x0000000000ee7818 in volcano.sh/volcano/pkg/scheduler.(*Scheduler).runOnce-fm
   at /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/scheduler.go:69
3  0x0000000000339ae4 in k8s.io/apimachinery/pkg/util/wait.BackoffUntil.func1
   at /usr/wulei/projects/src/volcano.sh/volcano/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:155
4  0x0000000000338b54 in k8s.io/apimachinery/pkg/util/wait.BackoffUntil
   at /usr/wulei/projects/src/volcano.sh/volcano/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:156
5  0x0000000000338ac8 in k8s.io/apimachinery/pkg/util/wait.JitterUntil
   at /usr/wulei/projects/src/volcano.sh/volcano/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:133
6  0x0000000000338a28 in k8s.io/apimachinery/pkg/util/wait.Until
   at /usr/wulei/projects/src/volcano.sh/volcano/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:90
7  0x0000000000073ff4 in runtime.goexit
   at /usr/local/go/src/runtime/asm_arm64.s:1148

 

 

 

(dlv) b enqueue.Execute
Breakpoint 1 (enabled) set at 0xf0b1d0 for volcano.sh/volcano/pkg/scheduler/actions/enqueue.(*Action).Execute() /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/actions/enqueue/enqueue.go:52
(dlv) c
> volcano.sh/volcano/pkg/scheduler/actions/enqueue.(*Action).Execute() /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/actions/enqueue/enqueue.go:52 (hits goroutine(188):1 total:1) (PC: 0xf0b1d0)
Warning: debugging optimized function
(dlv) p  ssn
*volcano.sh/volcano/pkg/scheduler/framework.Session {
        UID: "048cc4c0-bd4a-4784-9d1f-7c132822c6f2",
        kubeClient: k8s.io/client-go/kubernetes.Interface(*k8s.io/client-go/kubernetes.Clientset) *{
                DiscoveryClient: *(*"k8s.io/client-go/discovery.DiscoveryClient")(0x40004a04c0),
                admissionregistrationV1: *(*"k8s.io/client-go/kubernetes/typed/admissionregistration/v1.AdmissionregistrationV1Client")(0x400047c060),
                admissionregistrationV1beta1: *(*"k8s.io/client-go/kubernetes/typed/admissionregistration/v1beta1.AdmissionregistrationV1beta1Client")(0x400047c0c0),
                appsV1: *(*"k8s.io/client-go/kubernetes/typed/apps/v1.AppsV1Client")(0x400047c120),
                appsV1beta1: *(*"k8s.io/client-go/kubernetes/typed/apps/v1beta1.AppsV1beta1Client")(0x400047c180),
                appsV1beta2: *(*"k8s.io/client-go/kubernetes/typed/apps/v1beta2.AppsV1beta2Client")(0x400047c1e0),
                auditregistrationV1alpha1: *(*"k8s.io/client-go/kubernetes/typed/auditregistration/v1alpha1.AuditregistrationV1alpha1Client")(0x400047c240),
                authenticationV1: *(*"k8s.io/client-go/kubernetes/typed/authentication/v1.AuthenticationV1Client")(0x400047c2a0),
                authenticationV1beta1: *(*"k8s.io/client-go/kubernetes/typed/authentication/v1beta1.AuthenticationV1beta1Client")(0x400047c300),
                authorizationV1: *(*"k8s.io/client-go/kubernetes/typed/authorization/v1.AuthorizationV1Client")(0x400047c360),
                authorizationV1beta1: *(*"k8s.io/client-go/kubernetes/typed/authorization/v1beta1.AuthorizationV1beta1Client")(0x400047c3c0),
                autoscalingV1: *(*"k8s.io/client-go/kubernetes/typed/autoscaling/v1.AutoscalingV1Client")(0x400047c420),
                autoscalingV2beta1: *(*"k8s.io/client-go/kubernetes/typed/autoscaling/v2beta1.AutoscalingV2beta1Client")(0x400047c480),
                autoscalingV2beta2: *(*"k8s.io/client-go/kubernetes/typed/autoscaling/v2beta2.AutoscalingV2beta2Client")(0x400047c4e0),
                batchV1: *(*"k8s.io/client-go/kubernetes/typed/batch/v1.BatchV1Client")(0x400047c540),
                batchV1beta1: *(*"k8s.io/client-go/kubernetes/typed/batch/v1beta1.BatchV1beta1Client")(0x400047c5a0),
                batchV2alpha1: *(*"k8s.io/client-go/kubernetes/typed/batch/v2alpha1.BatchV2alpha1Client")(0x400047c600),
                certificatesV1beta1: *(*"k8s.io/client-go/kubernetes/typed/certificates/v1beta1.CertificatesV1beta1Client")(0x400047c660),
                coordinationV1beta1: *(*"k8s.io/client-go/kubernetes/typed/coordination/v1beta1.CoordinationV1beta1Client")(0x400047c6c0),
                coordinationV1: *(*"k8s.io/client-go/kubernetes/typed/coordination/v1.CoordinationV1Client")(0x400047c720),
                coreV1: *(*"k8s.io/client-go/kubernetes/typed/core/v1.CoreV1Client")(0x400047c780),
                discoveryV1alpha1: *(*"k8s.io/client-go/kubernetes/typed/discovery/v1alpha1.DiscoveryV1alpha1Client")(0x400047c7e0),
                discoveryV1beta1: *(*"k8s.io/client-go/kubernetes/typed/discovery/v1beta1.DiscoveryV1beta1Client")(0x400047c840),
                eventsV1beta1: *(*"k8s.io/client-go/kubernetes/typed/events/v1beta1.EventsV1beta1Client")(0x400047c8a0),
                extensionsV1beta1: *(*"k8s.io/client-go/kubernetes/typed/extensions/v1beta1.ExtensionsV1beta1Client")(0x400047c900),
                flowcontrolV1alpha1: *(*"k8s.io/client-go/kubernetes/typed/flowcontrol/v1alpha1.FlowcontrolV1alpha1Client")(0x400047c960),
                networkingV1: *(*"k8s.io/client-go/kubernetes/typed/networking/v1.NetworkingV1Client")(0x400047c9c0),
                networkingV1beta1: *(*"k8s.io/client-go/kubernetes/typed/networking/v1beta1.NetworkingV1beta1Client")(0x400047ca20),
                nodeV1alpha1: *(*"k8s.io/client-go/kubernetes/typed/node/v1alpha1.NodeV1alpha1Client")(0x400047ca80),
                nodeV1beta1: *(*"k8s.io/client-go/kubernetes/typed/node/v1beta1.NodeV1beta1Client")(0x400047cae0),
                policyV1beta1: *(*"k8s.io/client-go/kubernetes/typed/policy/v1beta1.PolicyV1beta1Client")(0x400047cb40),
                rbacV1: *(*"k8s.io/client-go/kubernetes/typed/rbac/v1.RbacV1Client")(0x400047cba0),
                rbacV1beta1: *(*"k8s.io/client-go/kubernetes/typed/rbac/v1beta1.RbacV1beta1Client")(0x400047cc00),
                rbacV1alpha1: *(*"k8s.io/client-go/kubernetes/typed/rbac/v1alpha1.RbacV1alpha1Client")(0x400047cc60),
                schedulingV1alpha1: *(*"k8s.io/client-go/kubernetes/typed/scheduling/v1alpha1.SchedulingV1alpha1Client")(0x400047ccc0),
                schedulingV1beta1: *(*"k8s.io/client-go/kubernetes/typed/scheduling/v1beta1.SchedulingV1beta1Client")(0x400047cd20),
                schedulingV1: *(*"k8s.io/client-go/kubernetes/typed/scheduling/v1.SchedulingV1Client")(0x400047cd80),
                settingsV1alpha1: *(*"k8s.io/client-go/kubernetes/typed/settings/v1alpha1.SettingsV1alpha1Client")(0x400047cde0),
                storageV1beta1: *(*"k8s.io/client-go/kubernetes/typed/storage/v1beta1.StorageV1beta1Client")(0x400047ce40),
                storageV1: *(*"k8s.io/client-go/kubernetes/typed/storage/v1.StorageV1Client")(0x400047cea0),
                storageV1alpha1: *(*"k8s.io/client-go/kubernetes/typed/storage/v1alpha1.StorageV1alpha1Client")(0x400047cf00),},
        cache: volcano.sh/volcano/pkg/scheduler/cache.Cache(*volcano.sh/volcano/pkg/scheduler/cache.SchedulerCache) *{
                Mutex: (*sync.Mutex)(0x4000364900),
                kubeClient: *(*"k8s.io/client-go/kubernetes.Clientset")(0x400044c840),
                vcClient: *(*"volcano.sh/volcano/pkg/client/clientset/versioned.Clientset")(0x40004a0500),
                defaultQueue: "default",
                schedulerName: "volcano",
                podInformer: k8s.io/client-go/informers/core/v1.PodInformer(*k8s.io/client-go/informers/core/v1.podInformer) ...,
                nodeInformer: k8s.io/client-go/informers/core/v1.NodeInformer(*k8s.io/client-go/informers/core/v1.nodeInformer) ...,
                podGroupInformerV1beta1: volcano.sh/volcano/pkg/client/informers/externalversions/scheduling/v1beta1.PodGroupInformer(*volcano.sh/volcano/pkg/client/informers/externalversions/scheduling/v1beta1.podGroupInformer) ...,
                queueInformerV1beta1: volcano.sh/volcano/pkg/client/informers/externalversions/scheduling/v1beta1.QueueInformer(*volcano.sh/volcano/pkg/client/informers/externalversions/scheduling/v1beta1.queueInformer) ...,
                pvInformer: k8s.io/client-go/informers/core/v1.PersistentVolumeInformer(*k8s.io/client-go/informers/core/v1.persistentVolumeInformer) ...,
                pvcInformer: k8s.io/client-go/informers/core/v1.PersistentVolumeClaimInformer(*k8s.io/client-go/informers/core/v1.persistentVolumeClaimInformer) ...,
                scInformer: k8s.io/client-go/informers/storage/v1.StorageClassInformer(*k8s.io/client-go/informers/storage/v1.storageClassInformer) ...,
                pcInformer: k8s.io/client-go/informers/scheduling/v1beta1.PriorityClassInformer(*k8s.io/client-go/informers/scheduling/v1beta1.priorityClassInformer) ...,
                quotaInformer: k8s.io/client-go/informers/core/v1.ResourceQuotaInformer(*k8s.io/client-go/informers/core/v1.resourceQuotaInformer) ...,
                Binder: volcano.sh/volcano/pkg/scheduler/cache.Binder(*volcano.sh/volcano/pkg/scheduler/cache.defaultBinder) ...,
                Evictor: volcano.sh/volcano/pkg/scheduler/cache.Evictor(*volcano.sh/volcano/pkg/scheduler/cache.defaultEvictor) ...,
                StatusUpdater: volcano.sh/volcano/pkg/scheduler/cache.StatusUpdater(*volcano.sh/volcano/pkg/scheduler/cache.defaultStatusUpdater) ...,
                VolumeBinder: volcano.sh/volcano/pkg/scheduler/cache.VolumeBinder(*volcano.sh/volcano/pkg/scheduler/cache.defaultVolumeBinder) ...,
                Recorder: k8s.io/client-go/tools/record.EventRecorder(*k8s.io/client-go/tools/record.recorderImpl) ...,
                Jobs: map[volcano.sh/volcano/pkg/scheduler/api.JobID]*volcano.sh/volcano/pkg/scheduler/api.JobInfo [...],
                Nodes: map[string]*volcano.sh/volcano/pkg/scheduler/api.NodeInfo [...],
                Queues: map[volcano.sh/volcano/pkg/scheduler/api.QueueID]*volcano.sh/volcano/pkg/scheduler/api.QueueInfo [...],
                PriorityClasses: map[string]*k8s.io/api/scheduling/v1beta1.PriorityClass [...],
                defaultPriorityClass: *k8s.io/api/scheduling/v1beta1.PriorityClass nil,
                defaultPriority: 0,
                NamespaceCollection: map[string]*volcano.sh/volcano/pkg/scheduler/api.NamespaceCollection [],
                errTasks: k8s.io/client-go/util/workqueue.RateLimitingInterface(*k8s.io/client-go/util/workqueue.rateLimitingType) ...,
                deletedJobs: k8s.io/client-go/util/workqueue.RateLimitingInterface(*k8s.io/client-go/util/workqueue.rateLimitingType) ...,},
        podGroupStatus: map[volcano.sh/volcano/pkg/scheduler/api.JobID]volcano.sh/volcano/pkg/apis/scheduling.PodGroupStatus [],
        Jobs: map[volcano.sh/volcano/pkg/scheduler/api.JobID]*volcano.sh/volcano/pkg/scheduler/api.JobInfo [],
        Nodes: map[string]*volcano.sh/volcano/pkg/scheduler/api.NodeInfo [
                "ubuntu": *(*"volcano.sh/volcano/pkg/scheduler/api.NodeInfo")(0x4000499e00), 
                "bogon": *(*"volcano.sh/volcano/pkg/scheduler/api.NodeInfo")(0x4000714500), 
                "centos7": *(*"volcano.sh/volcano/pkg/scheduler/api.NodeInfo")(0x4000715000), 
                "cloud": *(*"volcano.sh/volcano/pkg/scheduler/api.NodeInfo")(0x4000715980), 
        ],
        Queues: map[volcano.sh/volcano/pkg/scheduler/api.QueueID]*volcano.sh/volcano/pkg/scheduler/api.QueueInfo [
                "default": *(*"volcano.sh/volcano/pkg/scheduler/api.QueueInfo")(0x40004ce7b0), 
                "test": *(*"volcano.sh/volcano/pkg/scheduler/api.QueueInfo")(0x40004ce7e0), 
        ],
        NamespaceInfo: map[volcano.sh/volcano/pkg/scheduler/api.NamespaceName]*volcano.sh/volcano/pkg/scheduler/api.NamespaceInfo [],
        Tiers: []volcano.sh/volcano/pkg/scheduler/conf.Tier len: 2, cap: 2, [
                (*"volcano.sh/volcano/pkg/scheduler/conf.Tier")(0x400090bcb0),
                (*"volcano.sh/volcano/pkg/scheduler/conf.Tier")(0x400090bcc8),
        ],
        Configurations: []volcano.sh/volcano/pkg/scheduler/conf.Configuration len: 0, cap: 0, nil,
        plugins: map[string]volcano.sh/volcano/pkg/scheduler/framework.Plugin [
                "priority": ..., 
                "gang": ..., 
                "conformance": ..., 
                "drf": ..., 
                "predicates": ..., 
                "proportion": ..., 
                "nodeorder": ..., 
                "binpack": ..., 
        ],
        eventHandlers: []*volcano.sh/volcano/pkg/scheduler/framework.EventHandler len: 4, cap: 4, [
                *(*"volcano.sh/volcano/pkg/scheduler/framework.EventHandler")(0x400002f1e0),
                *(*"volcano.sh/volcano/pkg/scheduler/framework.EventHandler")(0x400002f280),
                *(*"volcano.sh/volcano/pkg/scheduler/framework.EventHandler")(0x400002f300),
                *(*"volcano.sh/volcano/pkg/scheduler/framework.EventHandler")(0x400002f3a0),
        ],
        jobOrderFns: map[string]volcano.sh/volcano/pkg/scheduler/api.CompareFn [
                "priority": volcano.sh/volcano/pkg/scheduler/plugins/priority.(*priorityPlugin).OnSessionOpen.func2, 
                "gang": volcano.sh/volcano/pkg/scheduler/plugins/gang.(*gangPlugin).OnSessionOpen.func3, 
                "drf": volcano.sh/volcano/pkg/scheduler/plugins/drf.(*drfPlugin).OnSessionOpen.func2, 
        ],
        queueOrderFns: map[string]volcano.sh/volcano/pkg/scheduler/api.CompareFn [
                "proportion": volcano.sh/volcano/pkg/scheduler/plugins/proportion.(*proportionPlugin).OnSessionOpen.func1, 
        ],
        taskOrderFns: map[string]volcano.sh/volcano/pkg/scheduler/api.CompareFn [
                "priority": volcano.sh/volcano/pkg/scheduler/plugins/priority.(*priorityPlugin).OnSessionOpen.func1, 
        ],
        namespaceOrderFns: map[string]volcano.sh/volcano/pkg/scheduler/api.CompareFn [
                "drf": volcano.sh/volcano/pkg/scheduler/plugins/drf.(*drfPlugin).OnSessionOpen.func3, 
        ],
        predicateFns: map[string]volcano.sh/volcano/pkg/scheduler/api.PredicateFn [
                "predicates": volcano.sh/volcano/pkg/scheduler/plugins/predicates.(*predicatesPlugin).OnSessionOpen.func3, 
        ],
        bestNodeFns: map[string]volcano.sh/volcano/pkg/scheduler/api.BestNodeFn [],
        nodeOrderFns: map[string]volcano.sh/volcano/pkg/scheduler/api.NodeOrderFn [
                "nodeorder": volcano.sh/volcano/pkg/scheduler/plugins/nodeorder.(*nodeOrderPlugin).OnSessionOpen.func3, 
                "binpack": volcano.sh/volcano/pkg/scheduler/plugins/binpack.(*binpackPlugin).OnSessionOpen.func2, 
        ],
        batchNodeOrderFns: map[string]volcano.sh/volcano/pkg/scheduler/api.BatchNodeOrderFn [
                "nodeorder": volcano.sh/volcano/pkg/scheduler/plugins/nodeorder.(*nodeOrderPlugin).OnSessionOpen.func4, 
        ],
        nodeMapFns: map[string]volcano.sh/volcano/pkg/scheduler/api.NodeMapFn [],
        nodeReduceFns: map[string]volcano.sh/volcano/pkg/scheduler/api.NodeReduceFn [],
        preemptableFns: map[string]volcano.sh/volcano/pkg/scheduler/api.EvictableFn [
                "priority": volcano.sh/volcano/pkg/scheduler/plugins/priority.(*priorityPlugin).OnSessionOpen.func3, 
                "gang": volcano.sh/volcano/pkg/scheduler/plugins/gang.(*gangPlugin).OnSessionOpen.func2, 
                "conformance": volcano.sh/volcano/pkg/scheduler/plugins/conformance.(*conformancePlugin).OnSessionOpen.func1, 
                "drf": volcano.sh/volcano/pkg/scheduler/plugins/drf.(*drfPlugin).OnSessionOpen.func1, 
        ],
        reclaimableFns: map[string]volcano.sh/volcano/pkg/scheduler/api.EvictableFn [
                "proportion": volcano.sh/volcano/pkg/scheduler/plugins/proportion.(*proportionPlugin).OnSessionOpen.func2, 
                "gang": volcano.sh/volcano/pkg/scheduler/plugins/gang.(*gangPlugin).OnSessionOpen.func2, 
                "conformance": volcano.sh/volcano/pkg/scheduler/plugins/conformance.(*conformancePlugin).OnSessionOpen.func1, 
        ],
        overusedFns: map[string]volcano.sh/volcano/pkg/scheduler/api.ValidateFn [
                "proportion": volcano.sh/volcano/pkg/scheduler/plugins/proportion.(*proportionPlugin).OnSessionOpen.func3, 
        ],
        jobReadyFns: map[string]volcano.sh/volcano/pkg/scheduler/api.ValidateFn [
                "gang": volcano.sh/volcano/pkg/scheduler/plugins/gang.(*gangPlugin).OnSessionOpen.func4, 
        ],
        jobPipelinedFns: map[string]volcano.sh/volcano/pkg/scheduler/api.ValidateFn [
                "gang": volcano.sh/volcano/pkg/scheduler/plugins/gang.(*gangPlugin).OnSessionOpen.func5, 
        ],
        jobValidFns: map[string]volcano.sh/volcano/pkg/scheduler/api.ValidateExFn [
                "gang": volcano.sh/volcano/pkg/scheduler/plugins/gang.(*gangPlugin).OnSessionOpen.func1, 
        ],
        jobEnqueueableFns: map[string]volcano.sh/volcano/pkg/scheduler/api.ValidateFn [
                "proportion": volcano.sh/volcano/pkg/scheduler/plugins/proportion.(*proportionPlugin).OnSessionOpen.func4, 
        ],}
(dlv) p ssn.QueueOrderFn
volcano.sh/volcano/pkg/scheduler/framework.(*Session).QueueOrderFn
(dlv) p ssn.ssn.Jobs
Command failed: ssn has no member ssn
(dlv) p ssn.Jobs
map[volcano.sh/volcano/pkg/scheduler/api.JobID]*volcano.sh/volcano/pkg/scheduler/api.JobInfo []
(dlv) c
> volcano.sh/volcano/pkg/scheduler/actions/enqueue.(*Action).Execute() /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/actions/enqueue/enqueue.go:52 (hits goroutine(188):2 total:2) (PC: 0xf0b1d0)
Warning: debugging optimized function
(dlv) c
> volcano.sh/volcano/pkg/scheduler/actions/enqueue.(*Action).Execute() /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/actions/enqueue/enqueue.go:52 (hits goroutine(188):3 total:3) (PC: 0xf0b1d0)
Warning: debugging optimized function

 

 

kubectl apply  -f job.yaml 执行后

 

(dlv) c
> volcano.sh/volcano/pkg/scheduler/actions/enqueue.(*Action).Execute() /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/actions/enqueue/enqueue.go:52 (hits goroutine(188):3 total:3) (PC: 0xf0b1d0)
Warning: debugging optimized function
(dlv) p  ssn
*volcano.sh/volcano/pkg/scheduler/framework.Session {
        UID: "e5ce3226-8c97-4ee7-9ec5-0ac605997204",
        kubeClient: k8s.io/client-go/kubernetes.Interface(*k8s.io/client-go/kubernetes.Clientset) *{
                DiscoveryClient: *(*"k8s.io/client-go/discovery.DiscoveryClient")(0x40004a04c0),
                admissionregistrationV1: *(*"k8s.io/client-go/kubernetes/typed/admissionregistration/v1.AdmissionregistrationV1Client")(0x400047c060),
                admissionregistrationV1beta1: *(*"k8s.io/client-go/kubernetes/typed/admissionregistration/v1beta1.AdmissionregistrationV1beta1Client")(0x400047c0c0),
                appsV1: *(*"k8s.io/client-go/kubernetes/typed/apps/v1.AppsV1Client")(0x400047c120),
                appsV1beta1: *(*"k8s.io/client-go/kubernetes/typed/apps/v1beta1.AppsV1beta1Client")(0x400047c180),
                appsV1beta2: *(*"k8s.io/client-go/kubernetes/typed/apps/v1beta2.AppsV1beta2Client")(0x400047c1e0),
                auditregistrationV1alpha1: *(*"k8s.io/client-go/kubernetes/typed/auditregistration/v1alpha1.AuditregistrationV1alpha1Client")(0x400047c240),
                authenticationV1: *(*"k8s.io/client-go/kubernetes/typed/authentication/v1.AuthenticationV1Client")(0x400047c2a0),
                authenticationV1beta1: *(*"k8s.io/client-go/kubernetes/typed/authentication/v1beta1.AuthenticationV1beta1Client")(0x400047c300),
                authorizationV1: *(*"k8s.io/client-go/kubernetes/typed/authorization/v1.AuthorizationV1Client")(0x400047c360),
                authorizationV1beta1: *(*"k8s.io/client-go/kubernetes/typed/authorization/v1beta1.AuthorizationV1beta1Client")(0x400047c3c0),
                autoscalingV1: *(*"k8s.io/client-go/kubernetes/typed/autoscaling/v1.AutoscalingV1Client")(0x400047c420),
                autoscalingV2beta1: *(*"k8s.io/client-go/kubernetes/typed/autoscaling/v2beta1.AutoscalingV2beta1Client")(0x400047c480),
                autoscalingV2beta2: *(*"k8s.io/client-go/kubernetes/typed/autoscaling/v2beta2.AutoscalingV2beta2Client")(0x400047c4e0),
                batchV1: *(*"k8s.io/client-go/kubernetes/typed/batch/v1.BatchV1Client")(0x400047c540),
                batchV1beta1: *(*"k8s.io/client-go/kubernetes/typed/batch/v1beta1.BatchV1beta1Client")(0x400047c5a0),
                batchV2alpha1: *(*"k8s.io/client-go/kubernetes/typed/batch/v2alpha1.BatchV2alpha1Client")(0x400047c600),
                certificatesV1beta1: *(*"k8s.io/client-go/kubernetes/typed/certificates/v1beta1.CertificatesV1beta1Client")(0x400047c660),
                coordinationV1beta1: *(*"k8s.io/client-go/kubernetes/typed/coordination/v1beta1.CoordinationV1beta1Client")(0x400047c6c0),
                coordinationV1: *(*"k8s.io/client-go/kubernetes/typed/coordination/v1.CoordinationV1Client")(0x400047c720),
                coreV1: *(*"k8s.io/client-go/kubernetes/typed/core/v1.CoreV1Client")(0x400047c780),
                discoveryV1alpha1: *(*"k8s.io/client-go/kubernetes/typed/discovery/v1alpha1.DiscoveryV1alpha1Client")(0x400047c7e0),
                discoveryV1beta1: *(*"k8s.io/client-go/kubernetes/typed/discovery/v1beta1.DiscoveryV1beta1Client")(0x400047c840),
                eventsV1beta1: *(*"k8s.io/client-go/kubernetes/typed/events/v1beta1.EventsV1beta1Client")(0x400047c8a0),
                extensionsV1beta1: *(*"k8s.io/client-go/kubernetes/typed/extensions/v1beta1.ExtensionsV1beta1Client")(0x400047c900),
                flowcontrolV1alpha1: *(*"k8s.io/client-go/kubernetes/typed/flowcontrol/v1alpha1.FlowcontrolV1alpha1Client")(0x400047c960),
                networkingV1: *(*"k8s.io/client-go/kubernetes/typed/networking/v1.NetworkingV1Client")(0x400047c9c0),
                networkingV1beta1: *(*"k8s.io/client-go/kubernetes/typed/networking/v1beta1.NetworkingV1beta1Client")(0x400047ca20),
                nodeV1alpha1: *(*"k8s.io/client-go/kubernetes/typed/node/v1alpha1.NodeV1alpha1Client")(0x400047ca80),
                nodeV1beta1: *(*"k8s.io/client-go/kubernetes/typed/node/v1beta1.NodeV1beta1Client")(0x400047cae0),
                policyV1beta1: *(*"k8s.io/client-go/kubernetes/typed/policy/v1beta1.PolicyV1beta1Client")(0x400047cb40),
                rbacV1: *(*"k8s.io/client-go/kubernetes/typed/rbac/v1.RbacV1Client")(0x400047cba0),
                rbacV1beta1: *(*"k8s.io/client-go/kubernetes/typed/rbac/v1beta1.RbacV1beta1Client")(0x400047cc00),
                rbacV1alpha1: *(*"k8s.io/client-go/kubernetes/typed/rbac/v1alpha1.RbacV1alpha1Client")(0x400047cc60),
                schedulingV1alpha1: *(*"k8s.io/client-go/kubernetes/typed/scheduling/v1alpha1.SchedulingV1alpha1Client")(0x400047ccc0),
                schedulingV1beta1: *(*"k8s.io/client-go/kubernetes/typed/scheduling/v1beta1.SchedulingV1beta1Client")(0x400047cd20),
                schedulingV1: *(*"k8s.io/client-go/kubernetes/typed/scheduling/v1.SchedulingV1Client")(0x400047cd80),
                settingsV1alpha1: *(*"k8s.io/client-go/kubernetes/typed/settings/v1alpha1.SettingsV1alpha1Client")(0x400047cde0),
                storageV1beta1: *(*"k8s.io/client-go/kubernetes/typed/storage/v1beta1.StorageV1beta1Client")(0x400047ce40),
                storageV1: *(*"k8s.io/client-go/kubernetes/typed/storage/v1.StorageV1Client")(0x400047cea0),
                storageV1alpha1: *(*"k8s.io/client-go/kubernetes/typed/storage/v1alpha1.StorageV1alpha1Client")(0x400047cf00),},
        cache: volcano.sh/volcano/pkg/scheduler/cache.Cache(*volcano.sh/volcano/pkg/scheduler/cache.SchedulerCache) *{
                Mutex: (*sync.Mutex)(0x4000364900),
                kubeClient: *(*"k8s.io/client-go/kubernetes.Clientset")(0x400044c840),
                vcClient: *(*"volcano.sh/volcano/pkg/client/clientset/versioned.Clientset")(0x40004a0500),
                defaultQueue: "default",
                schedulerName: "volcano",
                podInformer: k8s.io/client-go/informers/core/v1.PodInformer(*k8s.io/client-go/informers/core/v1.podInformer) ...,
                nodeInformer: k8s.io/client-go/informers/core/v1.NodeInformer(*k8s.io/client-go/informers/core/v1.nodeInformer) ...,
                podGroupInformerV1beta1: volcano.sh/volcano/pkg/client/informers/externalversions/scheduling/v1beta1.PodGroupInformer(*volcano.sh/volcano/pkg/client/informers/externalversions/scheduling/v1beta1.podGroupInformer) ...,
                queueInformerV1beta1: volcano.sh/volcano/pkg/client/informers/externalversions/scheduling/v1beta1.QueueInformer(*volcano.sh/volcano/pkg/client/informers/externalversions/scheduling/v1beta1.queueInformer) ...,
                pvInformer: k8s.io/client-go/informers/core/v1.PersistentVolumeInformer(*k8s.io/client-go/informers/core/v1.persistentVolumeInformer) ...,
                pvcInformer: k8s.io/client-go/informers/core/v1.PersistentVolumeClaimInformer(*k8s.io/client-go/informers/core/v1.persistentVolumeClaimInformer) ...,
                scInformer: k8s.io/client-go/informers/storage/v1.StorageClassInformer(*k8s.io/client-go/informers/storage/v1.storageClassInformer) ...,
                pcInformer: k8s.io/client-go/informers/scheduling/v1beta1.PriorityClassInformer(*k8s.io/client-go/informers/scheduling/v1beta1.priorityClassInformer) ...,
                quotaInformer: k8s.io/client-go/informers/core/v1.ResourceQuotaInformer(*k8s.io/client-go/informers/core/v1.resourceQuotaInformer) ...,
                Binder: volcano.sh/volcano/pkg/scheduler/cache.Binder(*volcano.sh/volcano/pkg/scheduler/cache.defaultBinder) ...,
                Evictor: volcano.sh/volcano/pkg/scheduler/cache.Evictor(*volcano.sh/volcano/pkg/scheduler/cache.defaultEvictor) ...,
                StatusUpdater: volcano.sh/volcano/pkg/scheduler/cache.StatusUpdater(*volcano.sh/volcano/pkg/scheduler/cache.defaultStatusUpdater) ...,
                VolumeBinder: volcano.sh/volcano/pkg/scheduler/cache.VolumeBinder(*volcano.sh/volcano/pkg/scheduler/cache.defaultVolumeBinder) ...,
                Recorder: k8s.io/client-go/tools/record.EventRecorder(*k8s.io/client-go/tools/record.recorderImpl) ...,
                Jobs: map[volcano.sh/volcano/pkg/scheduler/api.JobID]*volcano.sh/volcano/pkg/scheduler/api.JobInfo [...],
                Nodes: map[string]*volcano.sh/volcano/pkg/scheduler/api.NodeInfo [...],
                Queues: map[volcano.sh/volcano/pkg/scheduler/api.QueueID]*volcano.sh/volcano/pkg/scheduler/api.QueueInfo [...],
                PriorityClasses: map[string]*k8s.io/api/scheduling/v1beta1.PriorityClass [...],
                defaultPriorityClass: *k8s.io/api/scheduling/v1beta1.PriorityClass nil,
                defaultPriority: 0,
                NamespaceCollection: map[string]*volcano.sh/volcano/pkg/scheduler/api.NamespaceCollection [],
                errTasks: k8s.io/client-go/util/workqueue.RateLimitingInterface(*k8s.io/client-go/util/workqueue.rateLimitingType) ...,
                deletedJobs: k8s.io/client-go/util/workqueue.RateLimitingInterface(*k8s.io/client-go/util/workqueue.rateLimitingType) ...,},
        podGroupStatus: map[volcano.sh/volcano/pkg/scheduler/api.JobID]volcano.sh/volcano/pkg/apis/scheduling.PodGroupStatus [],
        Jobs: map[volcano.sh/volcano/pkg/scheduler/api.JobID]*volcano.sh/volcano/pkg/scheduler/api.JobInfo [
                "default/test-job": *(*"volcano.sh/volcano/pkg/scheduler/api.JobInfo")(0x4000014420), 
        ],
        Nodes: map[string]*volcano.sh/volcano/pkg/scheduler/api.NodeInfo [
                "bogon": *(*"volcano.sh/volcano/pkg/scheduler/api.NodeInfo")(0x4000394080), 
                "centos7": *(*"volcano.sh/volcano/pkg/scheduler/api.NodeInfo")(0x4000395080), 
                "cloud": *(*"volcano.sh/volcano/pkg/scheduler/api.NodeInfo")(0x4000395f80), 
                "ubuntu": *(*"volcano.sh/volcano/pkg/scheduler/api.NodeInfo")(0x400020d500), 
        ],
        Queues: map[volcano.sh/volcano/pkg/scheduler/api.QueueID]*volcano.sh/volcano/pkg/scheduler/api.QueueInfo [
                "default": *(*"volcano.sh/volcano/pkg/scheduler/api.QueueInfo")(0x400079d2f0), 
                "test": *(*"volcano.sh/volcano/pkg/scheduler/api.QueueInfo")(0x400079d320), 
        ],
        NamespaceInfo: map[volcano.sh/volcano/pkg/scheduler/api.NamespaceName]*volcano.sh/volcano/pkg/scheduler/api.NamespaceInfo [],
        Tiers: []volcano.sh/volcano/pkg/scheduler/conf.Tier len: 2, cap: 2, [
                (*"volcano.sh/volcano/pkg/scheduler/conf.Tier")(0x400079c7b0),
                (*"volcano.sh/volcano/pkg/scheduler/conf.Tier")(0x400079c7c8),
        ],
        Configurations: []volcano.sh/volcano/pkg/scheduler/conf.Configuration len: 0, cap: 0, nil,
        plugins: map[string]volcano.sh/volcano/pkg/scheduler/framework.Plugin [
                "priority": ..., 
                "gang": ..., 
                "conformance": ..., 
                "drf": ..., 
                "predicates": ..., 
                "proportion": ..., 
                "nodeorder": ..., 
                "binpack": ..., 
        ],
        eventHandlers: []*volcano.sh/volcano/pkg/scheduler/framework.EventHandler len: 4, cap: 4, [
                *(*"volcano.sh/volcano/pkg/scheduler/framework.EventHandler")(0x40005b9170),
                *(*"volcano.sh/volcano/pkg/scheduler/framework.EventHandler")(0x40005b9240),
                *(*"volcano.sh/volcano/pkg/scheduler/framework.EventHandler")(0x40005b9440),
                *(*"volcano.sh/volcano/pkg/scheduler/framework.EventHandler")(0x40005b9730),
        ],
        jobOrderFns: map[string]volcano.sh/volcano/pkg/scheduler/api.CompareFn [
                "drf": volcano.sh/volcano/pkg/scheduler/plugins/drf.(*drfPlugin).OnSessionOpen.func2, 
                "priority": volcano.sh/volcano/pkg/scheduler/plugins/priority.(*priorityPlugin).OnSessionOpen.func2, 
                "gang": volcano.sh/volcano/pkg/scheduler/plugins/gang.(*gangPlugin).OnSessionOpen.func3, 
        ],
        queueOrderFns: map[string]volcano.sh/volcano/pkg/scheduler/api.CompareFn [
                "proportion": volcano.sh/volcano/pkg/scheduler/plugins/proportion.(*proportionPlugin).OnSessionOpen.func1, 
        ],
        taskOrderFns: map[string]volcano.sh/volcano/pkg/scheduler/api.CompareFn [
                "priority": volcano.sh/volcano/pkg/scheduler/plugins/priority.(*priorityPlugin).OnSessionOpen.func1, 
        ],
        namespaceOrderFns: map[string]volcano.sh/volcano/pkg/scheduler/api.CompareFn [
                "drf": volcano.sh/volcano/pkg/scheduler/plugins/drf.(*drfPlugin).OnSessionOpen.func3, 
        ],
        predicateFns: map[string]volcano.sh/volcano/pkg/scheduler/api.PredicateFn [
                "predicates": volcano.sh/volcano/pkg/scheduler/plugins/predicates.(*predicatesPlugin).OnSessionOpen.func3, 
        ],
        bestNodeFns: map[string]volcano.sh/volcano/pkg/scheduler/api.BestNodeFn [],
        nodeOrderFns: map[string]volcano.sh/volcano/pkg/scheduler/api.NodeOrderFn [
                "nodeorder": volcano.sh/volcano/pkg/scheduler/plugins/nodeorder.(*nodeOrderPlugin).OnSessionOpen.func3, 
                "binpack": volcano.sh/volcano/pkg/scheduler/plugins/binpack.(*binpackPlugin).OnSessionOpen.func2, 
        ],
        batchNodeOrderFns: map[string]volcano.sh/volcano/pkg/scheduler/api.BatchNodeOrderFn [
                "nodeorder": volcano.sh/volcano/pkg/scheduler/plugins/nodeorder.(*nodeOrderPlugin).OnSessionOpen.func4, 
        ],
        nodeMapFns: map[string]volcano.sh/volcano/pkg/scheduler/api.NodeMapFn [],
        nodeReduceFns: map[string]volcano.sh/volcano/pkg/scheduler/api.NodeReduceFn [],
        preemptableFns: map[string]volcano.sh/volcano/pkg/scheduler/api.EvictableFn [
                "drf": volcano.sh/volcano/pkg/scheduler/plugins/drf.(*drfPlugin).OnSessionOpen.func1, 
                "priority": volcano.sh/volcano/pkg/scheduler/plugins/priority.(*priorityPlugin).OnSessionOpen.func3, 
                "gang": volcano.sh/volcano/pkg/scheduler/plugins/gang.(*gangPlugin).OnSessionOpen.func2, 
                "conformance": volcano.sh/volcano/pkg/scheduler/plugins/conformance.(*conformancePlugin).OnSessionOpen.func1, 
        ],
        reclaimableFns: map[string]volcano.sh/volcano/pkg/scheduler/api.EvictableFn [
                "proportion": volcano.sh/volcano/pkg/scheduler/plugins/proportion.(*proportionPlugin).OnSessionOpen.func2, 
                "gang": volcano.sh/volcano/pkg/scheduler/plugins/gang.(*gangPlugin).OnSessionOpen.func2, 
                "conformance": volcano.sh/volcano/pkg/scheduler/plugins/conformance.(*conformancePlugin).OnSessionOpen.func1, 
        ],
        overusedFns: map[string]volcano.sh/volcano/pkg/scheduler/api.ValidateFn [
                "proportion": volcano.sh/volcano/pkg/scheduler/plugins/proportion.(*proportionPlugin).OnSessionOpen.func3, 
        ],
        jobReadyFns: map[string]volcano.sh/volcano/pkg/scheduler/api.ValidateFn [
                "gang": volcano.sh/volcano/pkg/scheduler/plugins/gang.(*gangPlugin).OnSessionOpen.func4, 
        ],
        jobPipelinedFns: map[string]volcano.sh/volcano/pkg/scheduler/api.ValidateFn [
                "gang": volcano.sh/volcano/pkg/scheduler/plugins/gang.(*gangPlugin).OnSessionOpen.func5, 
        ],
        jobValidFns: map[string]volcano.sh/volcano/pkg/scheduler/api.ValidateExFn [
                "gang": volcano.sh/volcano/pkg/scheduler/plugins/gang.(*gangPlugin).OnSessionOpen.func1, 
        ],
        jobEnqueueableFns: map[string]volcano.sh/volcano/pkg/scheduler/api.ValidateFn [
                "proportion": volcano.sh/volcano/pkg/scheduler/plugins/proportion.(*proportionPlugin).OnSessionOpen.func4, 
        ],}
(dlv) p ssn.Jobs
map[volcano.sh/volcano/pkg/scheduler/api.JobID]*volcano.sh/volcano/pkg/scheduler/api.JobInfo [
        "default/test-job": *{
                UID: "default/test-job",
                Name: "test-job",
                Namespace: "default",
                Queue: "default",
                Priority: 0,
                MinAvailable: 3,
                NodesFitDelta: volcano.sh/volcano/pkg/scheduler/api.NodeResourceMap [],
                JobFitErrors: "",
                NodesFitErrors: map[volcano.sh/volcano/pkg/scheduler/api.TaskID]*volcano.sh/volcano/pkg/scheduler/api.FitErrors [],
                TaskStatusIndex: map[volcano.sh/volcano/pkg/scheduler/api.TaskStatus]volcano.sh/volcano/pkg/scheduler/api.tasksMap [],
                Tasks: volcano.sh/volcano/pkg/scheduler/api.tasksMap [],
                Allocated: *(*"volcano.sh/volcano/pkg/scheduler/api.Resource")(0x40004c83a0),
                TotalRequest: *(*"volcano.sh/volcano/pkg/scheduler/api.Resource")(0x40004c83e0),
                CreationTimestamp: (*"k8s.io/apimachinery/pkg/apis/meta/v1.Time")(0x40000144a8),
                PodGroup: *(*"volcano.sh/volcano/pkg/scheduler/api.PodGroup")(0x4000466340),}, 
]
(dlv) s
> volcano.sh/volcano/pkg/scheduler/actions/enqueue.(*Action).Execute() /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/actions/enqueue/enqueue.go:53 (PC: 0xf0b204)
Warning: debugging optimized function
(dlv) n
> volcano.sh/volcano/pkg/scheduler/actions/enqueue.(*Action).Execute() /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/actions/enqueue/enqueue.go:54 (PC: 0xf0b218)
Warning: debugging optimized function
(dlv) list
> volcano.sh/volcano/pkg/scheduler/actions/enqueue.(*Action).Execute() /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/actions/enqueue/enqueue.go:54 (PC: 0xf0b218)
Warning: debugging optimized function
Command failed: open /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/actions/enqueue/enqueue.go: no such file or directory
(dlv) n
> volcano.sh/volcano/pkg/scheduler/actions/enqueue.(*Action).Execute() /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/actions/enqueue/enqueue.go:56 (PC: 0xf0b260)
Warning: debugging optimized function
(dlv) n
> volcano.sh/volcano/pkg/scheduler/actions/enqueue.(*Action).Execute() /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/actions/enqueue/enqueue.go:57 (PC: 0xf0b2f0)
Warning: debugging optimized function
(dlv) n
> volcano.sh/volcano/pkg/scheduler/actions/enqueue.(*Action).Execute() /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/actions/enqueue/enqueue.go:58 (PC: 0xf0b328)
Warning: debugging optimized function
(dlv) n
> volcano.sh/volcano/pkg/scheduler/actions/enqueue.(*Action).Execute() /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/actions/enqueue/enqueue.go:60 (PC: 0xf0b360)
Warning: debugging optimized function
(dlv) n
> volcano.sh/volcano/pkg/scheduler/actions/enqueue.(*Action).Execute() /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/actions/enqueue/enqueue.go:61 (PC: 0xf0b3c0)
Warning: debugging optimized function
(dlv) p queues
*volcano.sh/volcano/pkg/scheduler/util.PriorityQueue {
        queue: volcano.sh/volcano/pkg/scheduler/util.priorityQueue {
                items: []interface {} len: 0, cap: 0, [],
                lessFn: volcano.sh/volcano/pkg/scheduler/framework.(*Session).QueueOrderFn-fm,},}
(dlv) p jobsMap
(unreadable empty OP stack)
(dlv) n
> volcano.sh/volcano/pkg/scheduler/actions/enqueue.(*Action).Execute() /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/actions/enqueue/enqueue.go:65 (PC: 0xf0b400)
Warning: debugging optimized function
(dlv) n
> volcano.sh/volcano/pkg/scheduler/actions/enqueue.(*Action).Execute() /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/actions/enqueue/enqueue.go:66 (PC: 0xf0b718)
Warning: debugging optimized function
(dlv) n
> volcano.sh/volcano/pkg/scheduler/actions/enqueue.(*Action).Execute() /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/actions/enqueue/enqueue.go:67 (PC: 0xf0b724)
Warning: debugging optimized function
(dlv) n
> volcano.sh/volcano/pkg/scheduler/actions/enqueue.(*Action).Execute() /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/actions/enqueue/enqueue.go:66 (PC: 0xf0b788)
Warning: debugging optimized function
(dlv) n
> volcano.sh/volcano/pkg/scheduler/actions/enqueue.(*Action).Execute() /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/actions/enqueue/enqueue.go:69 (PC: 0xf0b7c4)
Warning: debugging optimized function
(dlv) n
> volcano.sh/volcano/pkg/scheduler/actions/enqueue.(*Action).Execute() /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/actions/enqueue/enqueue.go:70 (PC: 0xf0b838)
Warning: debugging optimized function
(dlv) p queues
*volcano.sh/volcano/pkg/scheduler/util.PriorityQueue {
        queue: volcano.sh/volcano/pkg/scheduler/util.priorityQueue {
                items: []interface {} len: 1, cap: 1, [
                        ...,
                ],
                lessFn: volcano.sh/volcano/pkg/scheduler/framework.(*Session).QueueOrderFn-fm,},}
(dlv) p jobsMap
(unreadable empty OP stack)
(dlv) p job.PodGroup.Status.Phase
""
(dlv) p job.PodGroup
*volcano.sh/volcano/pkg/scheduler/api.PodGroup {
        PodGroup: volcano.sh/volcano/pkg/apis/scheduling.PodGroup {
                TypeMeta: (*"k8s.io/apimachinery/pkg/apis/meta/v1.TypeMeta")(0x4000466340),
                ObjectMeta: (*"k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta")(0x4000466360),
                Spec: (*"volcano.sh/volcano/pkg/apis/scheduling.PodGroupSpec")(0x4000466458),
                Status: (*"volcano.sh/volcano/pkg/apis/scheduling.PodGroupStatus")(0x4000466488),},
        Version: "v1beta1",}
(dlv) p job.PodGroup.TypeMeta
k8s.io/apimachinery/pkg/apis/meta/v1.TypeMeta {Kind: "", APIVersion: ""}
(dlv) p job.PodGroup.ObjectMeta
k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta {
        Name: "test-job",
        GenerateName: "",
        Namespace: "default",
        SelfLink: "/apis/scheduling.volcano.sh/v1beta1/namespaces/default/podgroups...+9 more",
        UID: "9bab7dad-50a4-457e-b54d-4e7869ae967d",
        ResourceVersion: "2562848",
        Generation: 1,
        CreationTimestamp: k8s.io/apimachinery/pkg/apis/meta/v1.Time {
                Time: (*time.Time)(0x40004663c8),},
        DeletionTimestamp: *k8s.io/apimachinery/pkg/apis/meta/v1.Time nil,
        DeletionGracePeriodSeconds: *int64 nil,
        Labels: map[string]string nil,
        Annotations: map[string]string [
                "kubectl.kubernetes.io/last-applied-configuration": "{\"apiVersion\":\"batch.volcano.sh/v1alpha1\",\"kind\":\"Job\",\"metadata...+484 more", 
        ],
        OwnerReferences: []k8s.io/apimachinery/pkg/apis/meta/v1.OwnerReference len: 1, cap: 1, [
                (*"k8s.io/apimachinery/pkg/apis/meta/v1.OwnerReference")(0x40003e8690),
        ],
        Finalizers: []string len: 0, cap: 0, nil,
        ClusterName: "",
        ManagedFields: []k8s.io/apimachinery/pkg/apis/meta/v1.ManagedFieldsEntry len: 1, cap: 1, [
                (*"k8s.io/apimachinery/pkg/apis/meta/v1.ManagedFieldsEntry")(0x40003e85a0),
        ],}
(dlv) p job.PodGroup.Spec
volcano.sh/volcano/pkg/apis/scheduling.PodGroupSpec {
        MinMember: 3,
        Queue: "default",
        PriorityClassName: "",
        MinResources: *k8s.io/api/core/v1.ResourceList [
                "cpu": (*"k8s.io/apimachinery/pkg/api/resource.Quantity")(0x40008aad08), 
        ],}
(dlv) p job.PodGroup.Status
volcano.sh/volcano/pkg/apis/scheduling.PodGroupStatus {
        Phase: "",
        Conditions: []volcano.sh/volcano/pkg/apis/scheduling.PodGroupCondition len: 0, cap: 0, nil,
        Running: 0,
        Succeeded: 0,
        Failed: 0,}
(dlv) n
> volcano.sh/volcano/pkg/scheduler/actions/enqueue.(*Action).Execute() /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/actions/enqueue/enqueue.go:73 (PC: 0xf0b430)
Warning: debugging optimized function
(dlv) n
> volcano.sh/volcano/pkg/scheduler/actions/enqueue.(*Action).Execute() /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/actions/enqueue/enqueue.go:60 (PC: 0xf0b3a0)
Warning: debugging optimized function
(dlv) n
> volcano.sh/volcano/pkg/scheduler/actions/enqueue.(*Action).Execute() /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/actions/enqueue/enqueue.go:82 (PC: 0xf0b968)
Warning: debugging optimized function
(dlv) p queues
*volcano.sh/volcano/pkg/scheduler/util.PriorityQueue {
        queue: volcano.sh/volcano/pkg/scheduler/util.priorityQueue {
                items: []interface {} len: 1, cap: 1, [
                        ...,
                ],
                lessFn: volcano.sh/volcano/pkg/scheduler/framework.(*Session).QueueOrderFn-fm,},}
(dlv) n
> volcano.sh/volcano/pkg/scheduler/actions/enqueue.(*Action).Execute() /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/actions/enqueue/enqueue.go:84 (PC: 0xf0b9a8)
Warning: debugging optimized function
(dlv) p queue
Command failed: could not find symbol value for queue
(dlv) p queues
*volcano.sh/volcano/pkg/scheduler/util.PriorityQueue {
        queue: volcano.sh/volcano/pkg/scheduler/util.priorityQueue {
                items: []interface {} len: 1, cap: 1, [
                        ...,
                ],
                lessFn: volcano.sh/volcano/pkg/scheduler/framework.(*Session).QueueOrderFn-fm,},}
(dlv) quit
Would you like to kill the process? [Y/n] n
You have mail in /var/spool/mail/root
[root@bogon delve]# 

 

 

 

BestNodeFn

 

(dlv) b  BestNodeFn
Breakpoint 1 (enabled) set at 0xeb8c20 for volcano.sh/volcano/pkg/scheduler/framework.(*Session).BestNodeFn() /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/framework/session_plugins.go:428
(dlv) c
> volcano.sh/volcano/pkg/scheduler/framework.(*Session).BestNodeFn() /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/framework/session_plugins.go:428 (hits goroutine(188):1 total:1) (PC: 0xeb8c20)
Warning: debugging optimized function
(dlv) bt
0  0x0000000000eb8c20 in volcano.sh/volcano/pkg/scheduler/framework.(*Session).BestNodeFn
   at /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/framework/session_plugins.go:428
1  0x0000000000f095c4 in volcano.sh/volcano/pkg/scheduler/actions/allocate.(*Action).Execute
   at /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/actions/allocate/allocate.go:209
2  0x0000000000ee6fe8 in volcano.sh/volcano/pkg/scheduler.(*Scheduler).runOnce
   at /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/scheduler.go:81
3  0x0000000000ee7818 in volcano.sh/volcano/pkg/scheduler.(*Scheduler).runOnce-fm
   at /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/scheduler.go:69
4  0x0000000000339ae4 in k8s.io/apimachinery/pkg/util/wait.BackoffUntil.func1
   at /usr/wulei/projects/src/volcano.sh/volcano/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:155
5  0x0000000000338b54 in k8s.io/apimachinery/pkg/util/wait.BackoffUntil
   at /usr/wulei/projects/src/volcano.sh/volcano/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:156
6  0x0000000000338ac8 in k8s.io/apimachinery/pkg/util/wait.JitterUntil
   at /usr/wulei/projects/src/volcano.sh/volcano/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:133
7  0x0000000000338a28 in k8s.io/apimachinery/pkg/util/wait.Until
   at /usr/wulei/projects/src/volcano.sh/volcano/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:90
8  0x0000000000073ff4 in runtime.goexit
   at /usr/local/go/src/runtime/asm_arm64.s:1148
(dlv) s
> volcano.sh/volcano/pkg/scheduler/framework.(*Session).BestNodeFn() /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/framework/session_plugins.go:429 (PC: 0xeb8c34)
Warning: debugging optimized function
(dlv) p task
*volcano.sh/volcano/pkg/scheduler/api.TaskInfo {
        UID: "93c1c010-9bd8-43bd-b2ee-7b8f15d084e1",
        Job: "default/test-job",
        Name: "test-job-default-nginx-0",
        Namespace: "default",
        Resreq: *volcano.sh/volcano/pkg/scheduler/api.Resource {
                MilliCPU: 1000,
                Memory: 0,
                ScalarResources: map[k8s.io/api/core/v1.ResourceName]float64 nil,
                MaxTaskNum: 0,},
        InitResreq: *volcano.sh/volcano/pkg/scheduler/api.Resource {
                MilliCPU: 1000,
                Memory: 0,
                ScalarResources: map[k8s.io/api/core/v1.ResourceName]float64 nil,
                MaxTaskNum: 0,},
        NodeName: "",
        Status: Pending (1),
        Priority: 0,
        VolumeReady: false,
        Pod: *k8s.io/api/core/v1.Pod {
                TypeMeta: (*"k8s.io/apimachinery/pkg/apis/meta/v1.TypeMeta")(0x40005e3800),
                ObjectMeta: (*"k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta")(0x40005e3820),
                Spec: (*"k8s.io/api/core/v1.PodSpec")(0x40005e3918),
                Status: (*"k8s.io/api/core/v1.PodStatus")(0x40005e3af0),},}
(dlv) p task.Pod.ObjectMeta
k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta {
        Name: "test-job-default-nginx-0",
        GenerateName: "",
        Namespace: "default",
        SelfLink: "/api/v1/namespaces/default/pods/test-job-default-nginx-0",
        UID: "93c1c010-9bd8-43bd-b2ee-7b8f15d084e1",
        ResourceVersion: "2566229",
        Generation: 0,
        CreationTimestamp: k8s.io/apimachinery/pkg/apis/meta/v1.Time {
                Time: (*time.Time)(0x40005e3888),},
        DeletionTimestamp: *k8s.io/apimachinery/pkg/apis/meta/v1.Time nil,
        DeletionGracePeriodSeconds: *int64 nil,
        Labels: map[string]string [
                "volcano.sh/job-name": "test-job", 
                "volcano.sh/job-namespace": "default", 
        ],
        Annotations: map[string]string [
                "scheduling.k8s.io/group-name": "test-job", 
                "volcano.sh/job-name": "test-job", 
                "volcano.sh/job-version": "0", 
                "volcano.sh/task-spec": "default-nginx", 
        ],
        OwnerReferences: []k8s.io/apimachinery/pkg/apis/meta/v1.OwnerReference len: 1, cap: 1, [
                (*"k8s.io/apimachinery/pkg/apis/meta/v1.OwnerReference")(0x4000448d20),
        ],
        Finalizers: []string len: 0, cap: 0, nil,
        ClusterName: "",
        ManagedFields: []k8s.io/apimachinery/pkg/apis/meta/v1.ManagedFieldsEntry len: 1, cap: 1, [
                (*"k8s.io/apimachinery/pkg/apis/meta/v1.ManagedFieldsEntry")(0x4000448d70),
        ],}
(dlv) p task.Pod.TypeMeta
k8s.io/apimachinery/pkg/apis/meta/v1.TypeMeta {Kind: "", APIVersion: ""}
(dlv) p task.Pod.Spec
k8s.io/api/core/v1.PodSpec {
        Volumes: []k8s.io/api/core/v1.Volume len: 3, cap: 4, [
                (*"k8s.io/api/core/v1.Volume")(0x40005e3c00),
                (*"k8s.io/api/core/v1.Volume")(0x40005e3cf0),
                (*"k8s.io/api/core/v1.Volume")(0x40005e3de0),
        ],
        InitContainers: []k8s.io/api/core/v1.Container len: 0, cap: 0, nil,
        Containers: []k8s.io/api/core/v1.Container len: 1, cap: 1, [
                (*"k8s.io/api/core/v1.Container")(0x400044d1e0),
        ],
        EphemeralContainers: []k8s.io/api/core/v1.EphemeralContainer len: 0, cap: 0, nil,
        RestartPolicy: "OnFailure",
        TerminationGracePeriodSeconds: *30,
        ActiveDeadlineSeconds: *int64 nil,
        DNSPolicy: "ClusterFirst",
        NodeSelector: map[string]string nil,
        ServiceAccountName: "default",
        DeprecatedServiceAccount: "default",
        AutomountServiceAccountToken: *bool nil,
        NodeName: "",
        HostNetwork: false,
        HostPID: false,
        HostIPC: false,
        ShareProcessNamespace: *bool nil,
        SecurityContext: *k8s.io/api/core/v1.PodSecurityContext {
                SELinuxOptions: *k8s.io/api/core/v1.SELinuxOptions nil,
                WindowsOptions: *k8s.io/api/core/v1.WindowsSecurityContextOptions nil,
                RunAsUser: *int64 nil,
                RunAsGroup: *int64 nil,
                RunAsNonRoot: *bool nil,
                SupplementalGroups: []int64 len: 0, cap: 0, nil,
                FSGroup: *int64 nil,
                Sysctls: []k8s.io/api/core/v1.Sysctl len: 0, cap: 0, nil,
                FSGroupChangePolicy: *k8s.io/api/core/v1.PodFSGroupChangePolicy nil,},
        ImagePullSecrets: []k8s.io/api/core/v1.LocalObjectReference len: 0, cap: 0, nil,
        Hostname: "test-job-default-nginx-0",
        Subdomain: "test-job",
        Affinity: *k8s.io/api/core/v1.Affinity nil,
        SchedulerName: "volcano",
        Tolerations: []k8s.io/api/core/v1.Toleration len: 2, cap: 2, [
                (*"k8s.io/api/core/v1.Toleration")(0x40008e6360),
                (*"k8s.io/api/core/v1.Toleration")(0x40008e63a8),
        ],
        HostAliases: []k8s.io/api/core/v1.HostAlias len: 0, cap: 0, nil,
        PriorityClassName: "",
        Priority: *0,
        DNSConfig: *k8s.io/api/core/v1.PodDNSConfig nil,
        ReadinessGates: []k8s.io/api/core/v1.PodReadinessGate len: 0, cap: 0, nil,
        RuntimeClassName: *string nil,
        EnableServiceLinks: *true,
        PreemptionPolicy: *k8s.io/api/core/v1.PreemptionPolicy nil,
        Overhead: k8s.io/api/core/v1.ResourceList nil,
        TopologySpreadConstraints: []k8s.io/api/core/v1.TopologySpreadConstraint len: 0, cap: 0, nil,}
(dlv) p task.Pod.Status
k8s.io/api/core/v1.PodStatus {
        Phase: "Pending",
        Conditions: []k8s.io/api/core/v1.PodCondition len: 0, cap: 0, nil,
        Message: "",
        Reason: "",
        NominatedNodeName: "",
        HostIP: "",
        PodIP: "",
        PodIPs: []k8s.io/api/core/v1.PodIP len: 0, cap: 0, nil,
        StartTime: *k8s.io/apimachinery/pkg/apis/meta/v1.Time nil,
        InitContainerStatuses: []k8s.io/api/core/v1.ContainerStatus len: 0, cap: 0, nil,
        ContainerStatuses: []k8s.io/api/core/v1.ContainerStatus len: 0, cap: 0, nil,
        QOSClass: "Burstable",
        EphemeralContainerStatuses: []k8s.io/api/core/v1.ContainerStatus len: 0, cap: 0, nil,}
(dlv) p nodeScores
map[float64][]*volcano.sh/volcano/pkg/scheduler/api.NodeInfo [
        201.078125: [
                *(*"volcano.sh/volcano/pkg/scheduler/api.NodeInfo")(0x4000664800),
        ], 
]

 

 

test-job-default-nginx-4 test-job-default-nginx-1

 

 

root@ubuntu:~# kubectl get pods 
NAME                           READY   STATUS      RESTARTS   AGE
example-foo-54dc4db9fc-lqz9j   1/1     Running     0          2d21h
job-1-nginx-0                  0/1     Completed   0          5d5h
test-job-default-nginx-0       0/1     Pending     0          4s
test-job-default-nginx-1       0/1     Pending     0          4s
test-job-default-nginx-2       0/1     Pending     0          13s
test-job-default-nginx-3       0/1     Pending     0          4s
test-job-default-nginx-4       0/1     Pending     0          4s
test-job-default-nginx-5       0/1     Pending     0          13s
root@ubuntu:~# 

 

(dlv)  b  BestNodeFn
Breakpoint 1 (enabled) set at 0xeb8c20 for volcano.sh/volcano/pkg/scheduler/framework.(*Session).BestNodeFn() /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/framework/session_plugins.go:428
(dlv) c
> volcano.sh/volcano/pkg/scheduler/framework.(*Session).BestNodeFn() /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/framework/session_plugins.go:428 (hits goroutine(188):1 total:1) (PC: 0xeb8c20)
Warning: debugging optimized function
(dlv) p task
*volcano.sh/volcano/pkg/scheduler/api.TaskInfo {
        UID: "0a50d40f-abd1-4726-950c-e8f45a5768be",
        Job: "default/test-job",
        Name: "test-job-default-nginx-4",
        Namespace: "default",
        Resreq: *volcano.sh/volcano/pkg/scheduler/api.Resource {
                MilliCPU: 1000,
                Memory: 0,
                ScalarResources: map[k8s.io/api/core/v1.ResourceName]float64 nil,
                MaxTaskNum: 0,},
        InitResreq: *volcano.sh/volcano/pkg/scheduler/api.Resource {
                MilliCPU: 1000,
                Memory: 0,
                ScalarResources: map[k8s.io/api/core/v1.ResourceName]float64 nil,
                MaxTaskNum: 0,},
        NodeName: "",
        Status: Pending (1),
        Priority: 0,
        VolumeReady: false,
        Pod: *k8s.io/api/core/v1.Pod {
                TypeMeta: (*"k8s.io/apimachinery/pkg/apis/meta/v1.TypeMeta")(0x4000a8e000),
                ObjectMeta: (*"k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta")(0x4000a8e020),
                Spec: (*"k8s.io/api/core/v1.PodSpec")(0x4000a8e118),
                Status: (*"k8s.io/api/core/v1.PodStatus")(0x4000a8e2f0),},}
(dlv) c
> volcano.sh/volcano/pkg/scheduler/framework.(*Session).BestNodeFn() /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/framework/session_plugins.go:428 (hits goroutine(188):2 total:2) (PC: 0xeb8c20)
Warning: debugging optimized function
(dlv) p task
*volcano.sh/volcano/pkg/scheduler/api.TaskInfo {
        UID: "9bb63222-c61f-49f7-8aee-f99eccb72374",
        Job: "default/test-job",
        Name: "test-job-default-nginx-1",
        Namespace: "default",
        Resreq: *volcano.sh/volcano/pkg/scheduler/api.Resource {
                MilliCPU: 1000,
                Memory: 0,
                ScalarResources: map[k8s.io/api/core/v1.ResourceName]float64 nil,
                MaxTaskNum: 0,},
        InitResreq: *volcano.sh/volcano/pkg/scheduler/api.Resource {
                MilliCPU: 1000,
                Memory: 0,
                ScalarResources: map[k8s.io/api/core/v1.ResourceName]float64 nil,
                MaxTaskNum: 0,},
        NodeName: "",
        Status: Pending (1),
        Priority: 0,
        VolumeReady: false,
        Pod: *k8s.io/api/core/v1.Pod {
                TypeMeta: (*"k8s.io/apimachinery/pkg/apis/meta/v1.TypeMeta")(0x400085ec00),
                ObjectMeta: (*"k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta")(0x400085ec20),
                Spec: (*"k8s.io/api/core/v1.PodSpec")(0x400085ed18),
                Status: (*"k8s.io/api/core/v1.PodStatus")(0x400085eef0),},}
(dlv) c
> volcano.sh/volcano/pkg/scheduler/framework.(*Session).BestNodeFn() /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/framework/session_plugins.go:428 (hits goroutine(188):3 total:3) (PC: 0xeb8c20)
Warning: debugging optimized function
(dlv) p task
*volcano.sh/volcano/pkg/scheduler/api.TaskInfo {
        UID: "9cc7f975-acf0-4944-9e2d-344a0d37f395",
        Job: "default/test-job",
        Name: "test-job-default-nginx-5",
        Namespace: "default",
        Resreq: *volcano.sh/volcano/pkg/scheduler/api.Resource {
                MilliCPU: 1000,
                Memory: 0,
                ScalarResources: map[k8s.io/api/core/v1.ResourceName]float64 nil,
                MaxTaskNum: 0,},
        InitResreq: *volcano.sh/volcano/pkg/scheduler/api.Resource {
                MilliCPU: 1000,
                Memory: 0,
                ScalarResources: map[k8s.io/api/core/v1.ResourceName]float64 nil,
                MaxTaskNum: 0,},
        NodeName: "",
        Status: Pending (1),
        Priority: 0,
        VolumeReady: false,
        Pod: *k8s.io/api/core/v1.Pod {
                TypeMeta: (*"k8s.io/apimachinery/pkg/apis/meta/v1.TypeMeta")(0x4000578c00),
                ObjectMeta: (*"k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta")(0x4000578c20),
                Spec: (*"k8s.io/api/core/v1.PodSpec")(0x4000578d18),
                Status: (*"k8s.io/api/core/v1.PodStatus")(0x4000578ef0),},}
(dlv) c
> volcano.sh/volcano/pkg/scheduler/framework.(*Session).BestNodeFn() /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/framework/session_plugins.go:428 (hits goroutine(188):4 total:4) (PC: 0xeb8c20)
Warning: debugging optimized function
(dlv) p task
*volcano.sh/volcano/pkg/scheduler/api.TaskInfo {
        UID: "bc7fd0b9-0d85-4814-a53a-2fb69317a91c",
        Job: "default/test-job",
        Name: "test-job-default-nginx-2",
        Namespace: "default",
        Resreq: *volcano.sh/volcano/pkg/scheduler/api.Resource {
                MilliCPU: 1000,
                Memory: 0,
                ScalarResources: map[k8s.io/api/core/v1.ResourceName]float64 nil,
                MaxTaskNum: 0,},
        InitResreq: *volcano.sh/volcano/pkg/scheduler/api.Resource {
                MilliCPU: 1000,
                Memory: 0,
                ScalarResources: map[k8s.io/api/core/v1.ResourceName]float64 nil,
                MaxTaskNum: 0,},
        NodeName: "",
        Status: Pending (1),
        Priority: 0,
        VolumeReady: false,
        Pod: *k8s.io/api/core/v1.Pod {
                TypeMeta: (*"k8s.io/apimachinery/pkg/apis/meta/v1.TypeMeta")(0x4000a8f800),
                ObjectMeta: (*"k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta")(0x4000a8f820),
                Spec: (*"k8s.io/api/core/v1.PodSpec")(0x4000a8f918),
                Status: (*"k8s.io/api/core/v1.PodStatus")(0x4000a8faf0),},}
(dlv) c
> volcano.sh/volcano/pkg/scheduler/framework.(*Session).BestNodeFn() /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/framework/session_plugins.go:428 (hits goroutine(188):5 total:5) (PC: 0xeb8c20)
Warning: debugging optimized function
(dlv) p task
*volcano.sh/volcano/pkg/scheduler/api.TaskInfo {
        UID: "bf3476f7-88a2-4318-8765-a84eb375aa2e",
        Job: "default/test-job",
        Name: "test-job-default-nginx-0",
        Namespace: "default",
        Resreq: *volcano.sh/volcano/pkg/scheduler/api.Resource {
                MilliCPU: 1000,
                Memory: 0,
                ScalarResources: map[k8s.io/api/core/v1.ResourceName]float64 nil,
                MaxTaskNum: 0,},
        InitResreq: *volcano.sh/volcano/pkg/scheduler/api.Resource {
                MilliCPU: 1000,
                Memory: 0,
                ScalarResources: map[k8s.io/api/core/v1.ResourceName]float64 nil,
                MaxTaskNum: 0,},
        NodeName: "",
        Status: Pending (1),
        Priority: 0,
        VolumeReady: false,
        Pod: *k8s.io/api/core/v1.Pod {
                TypeMeta: (*"k8s.io/apimachinery/pkg/apis/meta/v1.TypeMeta")(0x400085f400),
                ObjectMeta: (*"k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta")(0x400085f420),
                Spec: (*"k8s.io/api/core/v1.PodSpec")(0x400085f518),
                Status: (*"k8s.io/api/core/v1.PodStatus")(0x400085f6f0),},}
(dlv) c
> volcano.sh/volcano/pkg/scheduler/framework.(*Session).BestNodeFn() /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/framework/session_plugins.go:428 (hits goroutine(188):6 total:6) (PC: 0xeb8c20)
Warning: debugging optimized function
(dlv) p task
*volcano.sh/volcano/pkg/scheduler/api.TaskInfo {
        UID: "c4b23af2-a4ff-4bf0-b9a0-e23b76b5bd4a",
        Job: "default/test-job",
        Name: "test-job-default-nginx-3",
        Namespace: "default",
        Resreq: *volcano.sh/volcano/pkg/scheduler/api.Resource {
                MilliCPU: 1000,
                Memory: 0,
                ScalarResources: map[k8s.io/api/core/v1.ResourceName]float64 nil,
                MaxTaskNum: 0,},
        InitResreq: *volcano.sh/volcano/pkg/scheduler/api.Resource {
                MilliCPU: 1000,
                Memory: 0,
                ScalarResources: map[k8s.io/api/core/v1.ResourceName]float64 nil,
                MaxTaskNum: 0,},
        NodeName: "",
        Status: Pending (1),
        Priority: 0,
        VolumeReady: false,
        Pod: *k8s.io/api/core/v1.Pod {
                TypeMeta: (*"k8s.io/apimachinery/pkg/apis/meta/v1.TypeMeta")(0x400085e400),
                ObjectMeta: (*"k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta")(0x400085e420),
                Spec: (*"k8s.io/api/core/v1.PodSpec")(0x400085e518),
                Status: (*"k8s.io/api/core/v1.PodStatus")(0x400085e6f0),},}
(dlv) p task.Pod.ObjectMeta
k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta {
        Name: "test-job-default-nginx-3",
        GenerateName: "",
        Namespace: "default",
        SelfLink: "/api/v1/namespaces/default/pods/test-job-default-nginx-3",
        UID: "c4b23af2-a4ff-4bf0-b9a0-e23b76b5bd4a",
        ResourceVersion: "2567653",
        Generation: 0,
        CreationTimestamp: k8s.io/apimachinery/pkg/apis/meta/v1.Time {
                Time: (*time.Time)(0x400085e488),},
        DeletionTimestamp: *k8s.io/apimachinery/pkg/apis/meta/v1.Time nil,
        DeletionGracePeriodSeconds: *int64 nil,
        Labels: map[string]string [
                "volcano.sh/job-name": "test-job", 
                "volcano.sh/job-namespace": "default", 
        ],
        Annotations: map[string]string [
                "scheduling.k8s.io/group-name": "test-job", 
                "volcano.sh/job-name": "test-job", 
                "volcano.sh/job-version": "0", 
                "volcano.sh/task-spec": "default-nginx", 
        ],
        OwnerReferences: []k8s.io/apimachinery/pkg/apis/meta/v1.OwnerReference len: 1, cap: 1, [
                (*"k8s.io/apimachinery/pkg/apis/meta/v1.OwnerReference")(0x4000413630),
        ],
        Finalizers: []string len: 0, cap: 0, nil,
        ClusterName: "",
        ManagedFields: []k8s.io/apimachinery/pkg/apis/meta/v1.ManagedFieldsEntry len: 1, cap: 1, [
                (*"k8s.io/apimachinery/pkg/apis/meta/v1.ManagedFieldsEntry")(0x4000413900),
        ],}
(dlv) p task.Pod.Spec
k8s.io/api/core/v1.PodSpec {
        Volumes: []k8s.io/api/core/v1.Volume len: 3, cap: 4, [
                (*"k8s.io/api/core/v1.Volume")(0x400085e800),
                (*"k8s.io/api/core/v1.Volume")(0x400085e8f0),
                (*"k8s.io/api/core/v1.Volume")(0x400085e9e0),
        ],
        InitContainers: []k8s.io/api/core/v1.Container len: 0, cap: 0, nil,
        Containers: []k8s.io/api/core/v1.Container len: 1, cap: 1, [
                (*"k8s.io/api/core/v1.Container")(0x40009ec000),
        ],
        EphemeralContainers: []k8s.io/api/core/v1.EphemeralContainer len: 0, cap: 0, nil,
        RestartPolicy: "OnFailure",
        TerminationGracePeriodSeconds: *30,
        ActiveDeadlineSeconds: *int64 nil,
        DNSPolicy: "ClusterFirst",
        NodeSelector: map[string]string nil,
        ServiceAccountName: "default",
        DeprecatedServiceAccount: "default",
        AutomountServiceAccountToken: *bool nil,
        NodeName: "",
        HostNetwork: false,
        HostPID: false,
        HostIPC: false,
        ShareProcessNamespace: *bool nil,
        SecurityContext: *k8s.io/api/core/v1.PodSecurityContext {
                SELinuxOptions: *k8s.io/api/core/v1.SELinuxOptions nil,
                WindowsOptions: *k8s.io/api/core/v1.WindowsSecurityContextOptions nil,
                RunAsUser: *int64 nil,
                RunAsGroup: *int64 nil,
                RunAsNonRoot: *bool nil,
                SupplementalGroups: []int64 len: 0, cap: 0, nil,
                FSGroup: *int64 nil,
                Sysctls: []k8s.io/api/core/v1.Sysctl len: 0, cap: 0, nil,
                FSGroupChangePolicy: *k8s.io/api/core/v1.PodFSGroupChangePolicy nil,},
        ImagePullSecrets: []k8s.io/api/core/v1.LocalObjectReference len: 0, cap: 0, nil,
        Hostname: "test-job-default-nginx-3",
        Subdomain: "test-job",
        Affinity: *k8s.io/api/core/v1.Affinity nil,
        SchedulerName: "volcano",
        Tolerations: []k8s.io/api/core/v1.Toleration len: 2, cap: 2, [
                (*"k8s.io/api/core/v1.Toleration")(0x4000278090),
                (*"k8s.io/api/core/v1.Toleration")(0x40002780d8),
        ],
        HostAliases: []k8s.io/api/core/v1.HostAlias len: 0, cap: 0, nil,
        PriorityClassName: "",
        Priority: *0,
        DNSConfig: *k8s.io/api/core/v1.PodDNSConfig nil,
        ReadinessGates: []k8s.io/api/core/v1.PodReadinessGate len: 0, cap: 0, nil,
        RuntimeClassName: *string nil,
        EnableServiceLinks: *true,
        PreemptionPolicy: *k8s.io/api/core/v1.PreemptionPolicy nil,
        Overhead: k8s.io/api/core/v1.ResourceList nil,
        TopologySpreadConstraints: []k8s.io/api/core/v1.TopologySpreadConstraint len: 0, cap: 0, nil,}
(dlv) c

 

OnSessionOpen

(dlv) b AddTaskOrderFn
Command failed: Location "AddTaskOrderFn" ambiguous: volcano.sh/volcano/pkg/scheduler/framework.(*Session).AddTaskOrderFn, volcano.sh/volcano/pkg/scheduler/framework.(*Session).AddTaskOrderFn…
(dlv) b volcano.sh/volcano/pkg/scheduler/framework.(*Session).AddTaskOrderFn
Breakpoint 2 (enabled) set at 0xeb6720 for volcano.sh/volcano/pkg/scheduler/framework.(*Session).AddTaskOrderFn() /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/framework/session_plugins.go:36
(dlv) c
> volcano.sh/volcano/pkg/scheduler/plugins/priority.(*priorityPlugin).OnSessionOpen() /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/plugins/priority/priority.go:43 (hits goroutine(188):2 total:2) (PC: 0xee3620)
Warning: debugging optimized function
(dlv) bt
0  0x0000000000ee3620 in volcano.sh/volcano/pkg/scheduler/plugins/priority.(*priorityPlugin).OnSessionOpen
   at /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/plugins/priority/priority.go:43
1  0x0000000000eb1ee8 in volcano.sh/volcano/pkg/scheduler/framework.OpenSession
   at /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/framework/framework.go:48
2  0x0000000000ee6f4c in volcano.sh/volcano/pkg/scheduler.(*Scheduler).runOnce
   at /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/scheduler.go:76
3  0x0000000000ee7818 in volcano.sh/volcano/pkg/scheduler.(*Scheduler).runOnce-fm
   at /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/scheduler.go:69
4  0x0000000000339ae4 in k8s.io/apimachinery/pkg/util/wait.BackoffUntil.func1
   at /usr/wulei/projects/src/volcano.sh/volcano/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:155
5  0x0000000000338b54 in k8s.io/apimachinery/pkg/util/wait.BackoffUntil
   at /usr/wulei/projects/src/volcano.sh/volcano/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:156
6  0x0000000000338ac8 in k8s.io/apimachinery/pkg/util/wait.JitterUntil
   at /usr/wulei/projects/src/volcano.sh/volcano/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:133
7  0x0000000000338a28 in k8s.io/apimachinery/pkg/util/wait.Until
   at /usr/wulei/projects/src/volcano.sh/volcano/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:90
8  0x0000000000073ff4 in runtime.goexit
   at /usr/local/go/src/runtime/asm_arm64.s:1148

 

 

[root@bogon delve]# dlv attach 38678
Type 'help' for list of commands.
(dlv) b Commit
Breakpoint 1 (enabled) set at 0xebc7f0 for volcano.sh/volcano/pkg/scheduler/framework.(*Statement).Commit() /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/framework/statement.go:370
(dlv) c
> volcano.sh/volcano/pkg/scheduler/framework.(*Statement).Commit() /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/framework/statement.go:370 (hits goroutine(188):1 total:1) (PC: 0xebc7f0)
Warning: debugging optimized function
(dlv) bt
0  0x0000000000ebc7f0 in volcano.sh/volcano/pkg/scheduler/framework.(*Statement).Commit
   at /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/framework/statement.go:370
1  0x0000000000f09778 in volcano.sh/volcano/pkg/scheduler/actions/allocate.(*Action).Execute
   at /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/actions/allocate/allocate.go:247
2  0x0000000000ee6fe8 in volcano.sh/volcano/pkg/scheduler.(*Scheduler).runOnce
   at /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/scheduler.go:81
3  0x0000000000ee7818 in volcano.sh/volcano/pkg/scheduler.(*Scheduler).runOnce-fm
   at /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/scheduler.go:69
4  0x0000000000339ae4 in k8s.io/apimachinery/pkg/util/wait.BackoffUntil.func1
   at /usr/wulei/projects/src/volcano.sh/volcano/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:155
5  0x0000000000338b54 in k8s.io/apimachinery/pkg/util/wait.BackoffUntil
   at /usr/wulei/projects/src/volcano.sh/volcano/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:156
6  0x0000000000338ac8 in k8s.io/apimachinery/pkg/util/wait.JitterUntil
   at /usr/wulei/projects/src/volcano.sh/volcano/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:133
7  0x0000000000338a28 in k8s.io/apimachinery/pkg/util/wait.Until
   at /usr/wulei/projects/src/volcano.sh/volcano/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:90
8  0x0000000000073ff4 in runtime.goexit
   at /usr/local/go/src/runtime/asm_arm64.s:1148
(dlv) s
> volcano.sh/volcano/pkg/scheduler/framework.(*Statement).Commit() /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/framework/statement.go:371 (PC: 0xebc7fc)
Warning: debugging optimized function
(dlv) n
> volcano.sh/volcano/pkg/scheduler/framework.(*Statement).Commit() /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/framework/statement.go:372 (PC: 0xebc82c)
Warning: debugging optimized function
(dlv) p s.operations
[]volcano.sh/volcano/pkg/scheduler/framework.operation len: 3, cap: 4, [
        {
                name: 2,
                task: *(*"volcano.sh/volcano/pkg/scheduler/api.TaskInfo")(0x40005a7780),
                reason: "",},
        {
                name: 2,
                task: *(*"volcano.sh/volcano/pkg/scheduler/api.TaskInfo")(0x40005a7680),
                reason: "",},
        {
                name: 2,
                task: *(*"volcano.sh/volcano/pkg/scheduler/api.TaskInfo")(0x40005a7600),
                reason: "",},
]
(dlv) p s.operations[0]
volcano.sh/volcano/pkg/scheduler/framework.operation {
        name: 2,
        task: *volcano.sh/volcano/pkg/scheduler/api.TaskInfo {
                UID: "23b04f91-4d17-43a9-8a1e-600107f0d9ac",
                Job: "default/test-job",
                Name: "test-job-default-nginx-4",
                Namespace: "default",
                Resreq: *(*"volcano.sh/volcano/pkg/scheduler/api.Resource")(0x4000911e60),
                InitResreq: *(*"volcano.sh/volcano/pkg/scheduler/api.Resource")(0x4000911e80),
                NodeName: "bogon",
                Status: Allocated (2),
                Priority: 0,
                VolumeReady: true,
                Pod: *(*"k8s.io/api/core/v1.Pod")(0x40005e2800),},
        reason: "",}
(dlv) p s.operations[1]
volcano.sh/volcano/pkg/scheduler/framework.operation {
        name: 2,
        task: *volcano.sh/volcano/pkg/scheduler/api.TaskInfo {
                UID: "34dcf318-82bf-44ca-a63d-e559f7462b6d",
                Job: "default/test-job",
                Name: "test-job-default-nginx-2",
                Namespace: "default",
                Resreq: *(*"volcano.sh/volcano/pkg/scheduler/api.Resource")(0x4000911d60),
                InitResreq: *(*"volcano.sh/volcano/pkg/scheduler/api.Resource")(0x4000911da0),
                NodeName: "bogon",
                Status: Allocated (2),
                Priority: 0,
                VolumeReady: true,
                Pod: *(*"k8s.io/api/core/v1.Pod")(0x400085f400),},
        reason: "",}
(dlv) p s.operations[1].Pod
Command failed:  has no member Pod
(dlv) p s.operations[1].task.Pod
*k8s.io/api/core/v1.Pod {
        TypeMeta: k8s.io/apimachinery/pkg/apis/meta/v1.TypeMeta {Kind: "", APIVersion: ""},
        ObjectMeta: k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta {
                Name: "test-job-default-nginx-2",
                GenerateName: "",
                Namespace: "default",
                SelfLink: "/api/v1/namespaces/default/pods/test-job-default-nginx-2",
                UID: "34dcf318-82bf-44ca-a63d-e559f7462b6d",
                ResourceVersion: "2571667",
                Generation: 0,
                CreationTimestamp: (*"k8s.io/apimachinery/pkg/apis/meta/v1.Time")(0x400085f488),
                DeletionTimestamp: *k8s.io/apimachinery/pkg/apis/meta/v1.Time nil,
                DeletionGracePeriodSeconds: *int64 nil,
                Labels: map[string]string [...],
                Annotations: map[string]string [...],
                OwnerReferences: []k8s.io/apimachinery/pkg/apis/meta/v1.OwnerReference len: 1, cap: 1, [
                        (*"k8s.io/apimachinery/pkg/apis/meta/v1.OwnerReference")(0x40009b8c80),
                ],
                Finalizers: []string len: 0, cap: 0, nil,
                ClusterName: "",
                ManagedFields: []k8s.io/apimachinery/pkg/apis/meta/v1.ManagedFieldsEntry len: 1, cap: 1, [
                        (*"k8s.io/apimachinery/pkg/apis/meta/v1.ManagedFieldsEntry")(0x40009b8cd0),
                ],},
        Spec: k8s.io/api/core/v1.PodSpec {
                Volumes: []k8s.io/api/core/v1.Volume len: 3, cap: 4, [
                        (*"k8s.io/api/core/v1.Volume")(0x400085f800),
                        (*"k8s.io/api/core/v1.Volume")(0x400085f8f0),
                        (*"k8s.io/api/core/v1.Volume")(0x400085f9e0),
                ],
                InitContainers: []k8s.io/api/core/v1.Container len: 0, cap: 0, nil,
                Containers: []k8s.io/api/core/v1.Container len: 1, cap: 1, [
                        (*"k8s.io/api/core/v1.Container")(0x400051e000),
                ],
                EphemeralContainers: []k8s.io/api/core/v1.EphemeralContainer len: 0, cap: 0, nil,
                RestartPolicy: "OnFailure",
                TerminationGracePeriodSeconds: *30,
                ActiveDeadlineSeconds: *int64 nil,
                DNSPolicy: "ClusterFirst",
                NodeSelector: map[string]string nil,
                ServiceAccountName: "default",
                DeprecatedServiceAccount: "default",
                AutomountServiceAccountToken: *bool nil,
                NodeName: "",
                HostNetwork: false,
                HostPID: false,
                HostIPC: false,
                ShareProcessNamespace: *bool nil,
                SecurityContext: *(*"k8s.io/api/core/v1.PodSecurityContext")(0x4000bb2930),
                ImagePullSecrets: []k8s.io/api/core/v1.LocalObjectReference len: 0, cap: 0, nil,
                Hostname: "test-job-default-nginx-2",
                Subdomain: "test-job",
                Affinity: *k8s.io/api/core/v1.Affinity nil,
                SchedulerName: "volcano",
                Tolerations: []k8s.io/api/core/v1.Toleration len: 2, cap: 2, [
                        (*"k8s.io/api/core/v1.Toleration")(0x4000bd3290),
                        (*"k8s.io/api/core/v1.Toleration")(0x4000bd32d8),
                ],
                HostAliases: []k8s.io/api/core/v1.HostAlias len: 0, cap: 0, nil,
                PriorityClassName: "",
                Priority: *0,
                DNSConfig: *k8s.io/api/core/v1.PodDNSConfig nil,
                ReadinessGates: []k8s.io/api/core/v1.PodReadinessGate len: 0, cap: 0, nil,
                RuntimeClassName: *string nil,
                EnableServiceLinks: *true,
                PreemptionPolicy: *k8s.io/api/core/v1.PreemptionPolicy nil,
                Overhead: k8s.io/api/core/v1.ResourceList nil,
                TopologySpreadConstraints: []k8s.io/api/core/v1.TopologySpreadConstraint len: 0, cap: 0, nil,},
        Status: k8s.io/api/core/v1.PodStatus {
                Phase: "Pending",
                Conditions: []k8s.io/api/core/v1.PodCondition len: 0, cap: 0, nil,
                Message: "",
                Reason: "",
                NominatedNodeName: "",
                HostIP: "",
                PodIP: "",
                PodIPs: []k8s.io/api/core/v1.PodIP len: 0, cap: 0, nil,
                StartTime: *k8s.io/apimachinery/pkg/apis/meta/v1.Time nil,
                InitContainerStatuses: []k8s.io/api/core/v1.ContainerStatus len: 0, cap: 0, nil,
                ContainerStatuses: []k8s.io/api/core/v1.ContainerStatus len: 0, cap: 0, nil,
                QOSClass: "Burstable",
                EphemeralContainerStatuses: []k8s.io/api/core/v1.ContainerStatus len: 0, cap: 0, nil,},}
(dlv) p s.operations[1].name
2
(dlv) p s.operations[2]
volcano.sh/volcano/pkg/scheduler/framework.operation {
        name: 2,
        task: *volcano.sh/volcano/pkg/scheduler/api.TaskInfo {
                UID: "3b84997f-f761-4bbc-b949-f98d8d61a214",
                Job: "default/test-job",
                Name: "test-job-default-nginx-0",
                Namespace: "default",
                Resreq: *(*"volcano.sh/volcano/pkg/scheduler/api.Resource")(0x4000911ce0),
                InitResreq: *(*"volcano.sh/volcano/pkg/scheduler/api.Resource")(0x4000911d20),
                NodeName: "bogon",
                Status: Allocated (2),
                Priority: 0,
                VolumeReady: true,
                Pod: *(*"k8s.io/api/core/v1.Pod")(0x400085ec00),},
        reason: "",}
(dlv) b allocate
Breakpoint 2 (enabled) set at 0xebbb80 for volcano.sh/volcano/pkg/scheduler/framework.(*Statement).allocate() /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/framework/statement.go:284
(dlv) c
> volcano.sh/volcano/pkg/scheduler/framework.(*Statement).allocate() /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/framework/statement.go:284 (hits goroutine(188):1 total:1) (PC: 0xebbb80)
Warning: debugging optimized function
(dlv) p task
*volcano.sh/volcano/pkg/scheduler/api.TaskInfo {
        UID: "23b04f91-4d17-43a9-8a1e-600107f0d9ac",
        Job: "default/test-job",
        Name: "test-job-default-nginx-4",
        Namespace: "default",
        Resreq: *volcano.sh/volcano/pkg/scheduler/api.Resource {
                MilliCPU: 1000,
                Memory: 0,
                ScalarResources: map[k8s.io/api/core/v1.ResourceName]float64 nil,
                MaxTaskNum: 0,},
        InitResreq: *volcano.sh/volcano/pkg/scheduler/api.Resource {
                MilliCPU: 1000,
                Memory: 0,
                ScalarResources: map[k8s.io/api/core/v1.ResourceName]float64 nil,
                MaxTaskNum: 0,},
        NodeName: "bogon",
        Status: Allocated (2),
        Priority: 0,
        VolumeReady: true,
        Pod: *k8s.io/api/core/v1.Pod {
                TypeMeta: (*"k8s.io/apimachinery/pkg/apis/meta/v1.TypeMeta")(0x40005e2800),
                ObjectMeta: (*"k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta")(0x40005e2820),
                Spec: (*"k8s.io/api/core/v1.PodSpec")(0x40005e2918),
                Status: (*"k8s.io/api/core/v1.PodStatus")(0x40005e2af0),},}
(dlv) p task.Pod
*k8s.io/api/core/v1.Pod {
        TypeMeta: k8s.io/apimachinery/pkg/apis/meta/v1.TypeMeta {Kind: "", APIVersion: ""},
        ObjectMeta: k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta {
                Name: "test-job-default-nginx-4",
                GenerateName: "",
                Namespace: "default",
                SelfLink: "/api/v1/namespaces/default/pods/test-job-default-nginx-4",
                UID: "23b04f91-4d17-43a9-8a1e-600107f0d9ac",
                ResourceVersion: "2571669",
                Generation: 0,
                CreationTimestamp: (*"k8s.io/apimachinery/pkg/apis/meta/v1.Time")(0x40005e2888),
                DeletionTimestamp: *k8s.io/apimachinery/pkg/apis/meta/v1.Time nil,
                DeletionGracePeriodSeconds: *int64 nil,
                Labels: map[string]string [...],
                Annotations: map[string]string [...],
                OwnerReferences: []k8s.io/apimachinery/pkg/apis/meta/v1.OwnerReference len: 1, cap: 1, [
                        (*"k8s.io/apimachinery/pkg/apis/meta/v1.OwnerReference")(0x40009b9040),
                ],
                Finalizers: []string len: 0, cap: 0, nil,
                ClusterName: "",
                ManagedFields: []k8s.io/apimachinery/pkg/apis/meta/v1.ManagedFieldsEntry len: 1, cap: 1, [
                        (*"k8s.io/apimachinery/pkg/apis/meta/v1.ManagedFieldsEntry")(0x40009b9090),
                ],},
        Spec: k8s.io/api/core/v1.PodSpec {
                Volumes: []k8s.io/api/core/v1.Volume len: 3, cap: 4, [
                        (*"k8s.io/api/core/v1.Volume")(0x40005e3000),
                        (*"k8s.io/api/core/v1.Volume")(0x40005e30f0),
                        (*"k8s.io/api/core/v1.Volume")(0x40005e31e0),
                ],
                InitContainers: []k8s.io/api/core/v1.Container len: 0, cap: 0, nil,
                Containers: []k8s.io/api/core/v1.Container len: 1, cap: 1, [
                        (*"k8s.io/api/core/v1.Container")(0x400051e2c0),
                ],
                EphemeralContainers: []k8s.io/api/core/v1.EphemeralContainer len: 0, cap: 0, nil,
                RestartPolicy: "OnFailure",
                TerminationGracePeriodSeconds: *30,
                ActiveDeadlineSeconds: *int64 nil,
                DNSPolicy: "ClusterFirst",
                NodeSelector: map[string]string nil,
                ServiceAccountName: "default",
                DeprecatedServiceAccount: "default",
                AutomountServiceAccountToken: *bool nil,
                NodeName: "",
                HostNetwork: false,
                HostPID: false,
                HostIPC: false,
                ShareProcessNamespace: *bool nil,
                SecurityContext: *(*"k8s.io/api/core/v1.PodSecurityContext")(0x4000bb2a10),
                ImagePullSecrets: []k8s.io/api/core/v1.LocalObjectReference len: 0, cap: 0, nil,
                Hostname: "test-job-default-nginx-4",
                Subdomain: "test-job",
                Affinity: *k8s.io/api/core/v1.Affinity nil,
                SchedulerName: "volcano",
                Tolerations: []k8s.io/api/core/v1.Toleration len: 2, cap: 2, [
                        (*"k8s.io/api/core/v1.Toleration")(0x4000bd33b0),
                        (*"k8s.io/api/core/v1.Toleration")(0x4000bd33f8),
                ],
                HostAliases: []k8s.io/api/core/v1.HostAlias len: 0, cap: 0, nil,
                PriorityClassName: "",
                Priority: *0,
                DNSConfig: *k8s.io/api/core/v1.PodDNSConfig nil,
                ReadinessGates: []k8s.io/api/core/v1.PodReadinessGate len: 0, cap: 0, nil,
                RuntimeClassName: *string nil,
                EnableServiceLinks: *true,
                PreemptionPolicy: *k8s.io/api/core/v1.PreemptionPolicy nil,
                Overhead: k8s.io/api/core/v1.ResourceList nil,
                TopologySpreadConstraints: []k8s.io/api/core/v1.TopologySpreadConstraint len: 0, cap: 0, nil,},
        Status: k8s.io/api/core/v1.PodStatus {
                Phase: "Pending",
                Conditions: []k8s.io/api/core/v1.PodCondition len: 0, cap: 0, nil,
                Message: "",
                Reason: "",
                NominatedNodeName: "",
                HostIP: "",
                PodIP: "",
                PodIPs: []k8s.io/api/core/v1.PodIP len: 0, cap: 0, nil,
                StartTime: *k8s.io/apimachinery/pkg/apis/meta/v1.Time nil,
                InitContainerStatuses: []k8s.io/api/core/v1.ContainerStatus len: 0, cap: 0, nil,
                ContainerStatuses: []k8s.io/api/core/v1.ContainerStatus len: 0, cap: 0, nil,
                QOSClass: "Burstable",
                EphemeralContainerStatuses: []k8s.io/api/core/v1.ContainerStatus len: 0, cap: 0, nil,},}
(dlv) c
> volcano.sh/volcano/pkg/scheduler/framework.(*Statement).allocate() /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/framework/statement.go:284 (hits goroutine(188):2 total:2) (PC: 0xebbb80)
Warning: debugging optimized function
(dlv) p task
*volcano.sh/volcano/pkg/scheduler/api.TaskInfo {
        UID: "34dcf318-82bf-44ca-a63d-e559f7462b6d",
        Job: "default/test-job",
        Name: "test-job-default-nginx-2",
        Namespace: "default",
        Resreq: *volcano.sh/volcano/pkg/scheduler/api.Resource {
                MilliCPU: 1000,
                Memory: 0,
                ScalarResources: map[k8s.io/api/core/v1.ResourceName]float64 nil,
                MaxTaskNum: 0,},
        InitResreq: *volcano.sh/volcano/pkg/scheduler/api.Resource {
                MilliCPU: 1000,
                Memory: 0,
                ScalarResources: map[k8s.io/api/core/v1.ResourceName]float64 nil,
                MaxTaskNum: 0,},
        NodeName: "bogon",
        Status: Allocated (2),
        Priority: 0,
        VolumeReady: true,
        Pod: *k8s.io/api/core/v1.Pod {
                TypeMeta: (*"k8s.io/apimachinery/pkg/apis/meta/v1.TypeMeta")(0x400085f400),
                ObjectMeta: (*"k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta")(0x400085f420),
                Spec: (*"k8s.io/api/core/v1.PodSpec")(0x400085f518),
                Status: (*"k8s.io/api/core/v1.PodStatus")(0x400085f6f0),},}
(dlv) c
> volcano.sh/volcano/pkg/scheduler/framework.(*Statement).allocate() /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/framework/statement.go:284 (hits goroutine(188):3 total:3) (PC: 0xebbb80)
Warning: debugging optimized function
(dlv) p task
*volcano.sh/volcano/pkg/scheduler/api.TaskInfo {
        UID: "3b84997f-f761-4bbc-b949-f98d8d61a214",
        Job: "default/test-job",
        Name: "test-job-default-nginx-0",
        Namespace: "default",
        Resreq: *volcano.sh/volcano/pkg/scheduler/api.Resource {
                MilliCPU: 1000,
                Memory: 0,
                ScalarResources: map[k8s.io/api/core/v1.ResourceName]float64 nil,
                MaxTaskNum: 0,},
        InitResreq: *volcano.sh/volcano/pkg/scheduler/api.Resource {
                MilliCPU: 1000,
                Memory: 0,
                ScalarResources: map[k8s.io/api/core/v1.ResourceName]float64 nil,
                MaxTaskNum: 0,},
        NodeName: "bogon",
        Status: Allocated (2),
        Priority: 0,
        VolumeReady: true,
        Pod: *k8s.io/api/core/v1.Pod {
                TypeMeta: (*"k8s.io/apimachinery/pkg/apis/meta/v1.TypeMeta")(0x400085ec00),
                ObjectMeta: (*"k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta")(0x400085ec20),
                Spec: (*"k8s.io/api/core/v1.PodSpec")(0x400085ed18),
                Status: (*"k8s.io/api/core/v1.PodStatus")(0x400085eef0),},}
(dlv) 

 

 

Statement Commit

pkg/scheduler/framework/statement.go

func (s *Statement) Commit() {
    for _, op := range s.operations {
        switch op.name {
        case Evict:
      ...
        case Pipeline:
            s.pipeline(op.task)
        case Allocate:
            err := s.allocate(op.task)
      ...
        }
    }
}
func (s *Statement) allocate(task *api.TaskInfo) error {
   if err := s.ssn.cache.BindVolumes(task); err != nil {
      return err
   }

   if err := s.ssn.cache.Bind(task, task.NodeName); err != nil {
      return err
   }

   ... // Update status in session
   return nil
}

 

[root@bogon delve]# dlv attach 38678
Type 'help' for list of commands.
(dlv) b Commit
Breakpoint 1 (enabled) set at 0xebc7f0 for volcano.sh/volcano/pkg/scheduler/framework.(*Statement).Commit() /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/framework/statement.go:370
(dlv) c
> volcano.sh/volcano/pkg/scheduler/framework.(*Statement).Commit() /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/framework/statement.go:370 (hits goroutine(188):1 total:1) (PC: 0xebc7f0)
Warning: debugging optimized function
(dlv) bt
0  0x0000000000ebc7f0 in volcano.sh/volcano/pkg/scheduler/framework.(*Statement).Commit
   at /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/framework/statement.go:370
1  0x0000000000f09778 in volcano.sh/volcano/pkg/scheduler/actions/allocate.(*Action).Execute
   at /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/actions/allocate/allocate.go:247
2  0x0000000000ee6fe8 in volcano.sh/volcano/pkg/scheduler.(*Scheduler).runOnce
   at /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/scheduler.go:81
3  0x0000000000ee7818 in volcano.sh/volcano/pkg/scheduler.(*Scheduler).runOnce-fm
   at /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/scheduler.go:69
4  0x0000000000339ae4 in k8s.io/apimachinery/pkg/util/wait.BackoffUntil.func1
   at /usr/wulei/projects/src/volcano.sh/volcano/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:155
5  0x0000000000338b54 in k8s.io/apimachinery/pkg/util/wait.BackoffUntil
   at /usr/wulei/projects/src/volcano.sh/volcano/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:156
6  0x0000000000338ac8 in k8s.io/apimachinery/pkg/util/wait.JitterUntil
   at /usr/wulei/projects/src/volcano.sh/volcano/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:133
7  0x0000000000338a28 in k8s.io/apimachinery/pkg/util/wait.Until
   at /usr/wulei/projects/src/volcano.sh/volcano/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:90
8  0x0000000000073ff4 in runtime.goexit
   at /usr/local/go/src/runtime/asm_arm64.s:1148
(dlv) s
> volcano.sh/volcano/pkg/scheduler/framework.(*Statement).Commit() /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/framework/statement.go:371 (PC: 0xebc7fc)
Warning: debugging optimized function
(dlv) n
> volcano.sh/volcano/pkg/scheduler/framework.(*Statement).Commit() /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/framework/statement.go:372 (PC: 0xebc82c)
Warning: debugging optimized function
(dlv) p s.operations
[]volcano.sh/volcano/pkg/scheduler/framework.operation len: 3, cap: 4, [
        {
                name: 2,
                task: *(*"volcano.sh/volcano/pkg/scheduler/api.TaskInfo")(0x40005a7780),
                reason: "",},
        {
                name: 2,
                task: *(*"volcano.sh/volcano/pkg/scheduler/api.TaskInfo")(0x40005a7680),
                reason: "",},
        {
                name: 2,
                task: *(*"volcano.sh/volcano/pkg/scheduler/api.TaskInfo")(0x40005a7600),
                reason: "",},
]
(dlv) p s.operations[0]
volcano.sh/volcano/pkg/scheduler/framework.operation {
        name: 2,
        task: *volcano.sh/volcano/pkg/scheduler/api.TaskInfo {
                UID: "23b04f91-4d17-43a9-8a1e-600107f0d9ac",
                Job: "default/test-job",
                Name: "test-job-default-nginx-4",
                Namespace: "default",
                Resreq: *(*"volcano.sh/volcano/pkg/scheduler/api.Resource")(0x4000911e60),
                InitResreq: *(*"volcano.sh/volcano/pkg/scheduler/api.Resource")(0x4000911e80),
                NodeName: "bogon",
                Status: Allocated (2),
                Priority: 0,
                VolumeReady: true,
                Pod: *(*"k8s.io/api/core/v1.Pod")(0x40005e2800),},
        reason: "",}
(dlv) p s.operations[1]
volcano.sh/volcano/pkg/scheduler/framework.operation {
        name: 2,
        task: *volcano.sh/volcano/pkg/scheduler/api.TaskInfo {
                UID: "34dcf318-82bf-44ca-a63d-e559f7462b6d",
                Job: "default/test-job",
                Name: "test-job-default-nginx-2",
                Namespace: "default",
                Resreq: *(*"volcano.sh/volcano/pkg/scheduler/api.Resource")(0x4000911d60),
                InitResreq: *(*"volcano.sh/volcano/pkg/scheduler/api.Resource")(0x4000911da0),
                NodeName: "bogon",
                Status: Allocated (2),
                Priority: 0,
                VolumeReady: true,
                Pod: *(*"k8s.io/api/core/v1.Pod")(0x400085f400),},
        reason: "",}
(dlv) p s.operations[1].Pod
Command failed:  has no member Pod
(dlv) p s.operations[1].task.Pod
*k8s.io/api/core/v1.Pod {
        TypeMeta: k8s.io/apimachinery/pkg/apis/meta/v1.TypeMeta {Kind: "", APIVersion: ""},
        ObjectMeta: k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta {
                Name: "test-job-default-nginx-2",
                GenerateName: "",
                Namespace: "default",
                SelfLink: "/api/v1/namespaces/default/pods/test-job-default-nginx-2",
                UID: "34dcf318-82bf-44ca-a63d-e559f7462b6d",
                ResourceVersion: "2571667",
                Generation: 0,
                CreationTimestamp: (*"k8s.io/apimachinery/pkg/apis/meta/v1.Time")(0x400085f488),
                DeletionTimestamp: *k8s.io/apimachinery/pkg/apis/meta/v1.Time nil,
                DeletionGracePeriodSeconds: *int64 nil,
                Labels: map[string]string [...],
                Annotations: map[string]string [...],
                OwnerReferences: []k8s.io/apimachinery/pkg/apis/meta/v1.OwnerReference len: 1, cap: 1, [
                        (*"k8s.io/apimachinery/pkg/apis/meta/v1.OwnerReference")(0x40009b8c80),
                ],
                Finalizers: []string len: 0, cap: 0, nil,
                ClusterName: "",
                ManagedFields: []k8s.io/apimachinery/pkg/apis/meta/v1.ManagedFieldsEntry len: 1, cap: 1, [
                        (*"k8s.io/apimachinery/pkg/apis/meta/v1.ManagedFieldsEntry")(0x40009b8cd0),
                ],},
        Spec: k8s.io/api/core/v1.PodSpec {
                Volumes: []k8s.io/api/core/v1.Volume len: 3, cap: 4, [
                        (*"k8s.io/api/core/v1.Volume")(0x400085f800),
                        (*"k8s.io/api/core/v1.Volume")(0x400085f8f0),
                        (*"k8s.io/api/core/v1.Volume")(0x400085f9e0),
                ],
                InitContainers: []k8s.io/api/core/v1.Container len: 0, cap: 0, nil,
                Containers: []k8s.io/api/core/v1.Container len: 1, cap: 1, [
                        (*"k8s.io/api/core/v1.Container")(0x400051e000),
                ],
                EphemeralContainers: []k8s.io/api/core/v1.EphemeralContainer len: 0, cap: 0, nil,
                RestartPolicy: "OnFailure",
                TerminationGracePeriodSeconds: *30,
                ActiveDeadlineSeconds: *int64 nil,
                DNSPolicy: "ClusterFirst",
                NodeSelector: map[string]string nil,
                ServiceAccountName: "default",
                DeprecatedServiceAccount: "default",
                AutomountServiceAccountToken: *bool nil,
                NodeName: "",
                HostNetwork: false,
                HostPID: false,
                HostIPC: false,
                ShareProcessNamespace: *bool nil,
                SecurityContext: *(*"k8s.io/api/core/v1.PodSecurityContext")(0x4000bb2930),
                ImagePullSecrets: []k8s.io/api/core/v1.LocalObjectReference len: 0, cap: 0, nil,
                Hostname: "test-job-default-nginx-2",
                Subdomain: "test-job",
                Affinity: *k8s.io/api/core/v1.Affinity nil,
                SchedulerName: "volcano",
                Tolerations: []k8s.io/api/core/v1.Toleration len: 2, cap: 2, [
                        (*"k8s.io/api/core/v1.Toleration")(0x4000bd3290),
                        (*"k8s.io/api/core/v1.Toleration")(0x4000bd32d8),
                ],
                HostAliases: []k8s.io/api/core/v1.HostAlias len: 0, cap: 0, nil,
                PriorityClassName: "",
                Priority: *0,
                DNSConfig: *k8s.io/api/core/v1.PodDNSConfig nil,
                ReadinessGates: []k8s.io/api/core/v1.PodReadinessGate len: 0, cap: 0, nil,
                RuntimeClassName: *string nil,
                EnableServiceLinks: *true,
                PreemptionPolicy: *k8s.io/api/core/v1.PreemptionPolicy nil,
                Overhead: k8s.io/api/core/v1.ResourceList nil,
                TopologySpreadConstraints: []k8s.io/api/core/v1.TopologySpreadConstraint len: 0, cap: 0, nil,},
        Status: k8s.io/api/core/v1.PodStatus {
                Phase: "Pending",
                Conditions: []k8s.io/api/core/v1.PodCondition len: 0, cap: 0, nil,
                Message: "",
                Reason: "",
                NominatedNodeName: "",
                HostIP: "",
                PodIP: "",
                PodIPs: []k8s.io/api/core/v1.PodIP len: 0, cap: 0, nil,
                StartTime: *k8s.io/apimachinery/pkg/apis/meta/v1.Time nil,
                InitContainerStatuses: []k8s.io/api/core/v1.ContainerStatus len: 0, cap: 0, nil,
                ContainerStatuses: []k8s.io/api/core/v1.ContainerStatus len: 0, cap: 0, nil,
                QOSClass: "Burstable",
                EphemeralContainerStatuses: []k8s.io/api/core/v1.ContainerStatus len: 0, cap: 0, nil,},}
(dlv) p s.operations[1].name
2
(dlv) p s.operations[2]
volcano.sh/volcano/pkg/scheduler/framework.operation {
        name: 2,
        task: *volcano.sh/volcano/pkg/scheduler/api.TaskInfo {
                UID: "3b84997f-f761-4bbc-b949-f98d8d61a214",
                Job: "default/test-job",
                Name: "test-job-default-nginx-0",
                Namespace: "default",
                Resreq: *(*"volcano.sh/volcano/pkg/scheduler/api.Resource")(0x4000911ce0),
                InitResreq: *(*"volcano.sh/volcano/pkg/scheduler/api.Resource")(0x4000911d20),
                NodeName: "bogon",
                Status: Allocated (2),
                Priority: 0,
                VolumeReady: true,
                Pod: *(*"k8s.io/api/core/v1.Pod")(0x400085ec00),},
        reason: "",}
(dlv) b allocate
Breakpoint 2 (enabled) set at 0xebbb80 for volcano.sh/volcano/pkg/scheduler/framework.(*Statement).allocate() /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/framework/statement.go:284
(dlv) c
> volcano.sh/volcano/pkg/scheduler/framework.(*Statement).allocate() /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/framework/statement.go:284 (hits goroutine(188):1 total:1) (PC: 0xebbb80)
Warning: debugging optimized function
(dlv) p task
*volcano.sh/volcano/pkg/scheduler/api.TaskInfo {
        UID: "23b04f91-4d17-43a9-8a1e-600107f0d9ac",
        Job: "default/test-job",
        Name: "test-job-default-nginx-4",
        Namespace: "default",
        Resreq: *volcano.sh/volcano/pkg/scheduler/api.Resource {
                MilliCPU: 1000,
                Memory: 0,
                ScalarResources: map[k8s.io/api/core/v1.ResourceName]float64 nil,
                MaxTaskNum: 0,},
        InitResreq: *volcano.sh/volcano/pkg/scheduler/api.Resource {
                MilliCPU: 1000,
                Memory: 0,
                ScalarResources: map[k8s.io/api/core/v1.ResourceName]float64 nil,
                MaxTaskNum: 0,},
        NodeName: "bogon",
        Status: Allocated (2),
        Priority: 0,
        VolumeReady: true,
        Pod: *k8s.io/api/core/v1.Pod {
                TypeMeta: (*"k8s.io/apimachinery/pkg/apis/meta/v1.TypeMeta")(0x40005e2800),
                ObjectMeta: (*"k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta")(0x40005e2820),
                Spec: (*"k8s.io/api/core/v1.PodSpec")(0x40005e2918),
                Status: (*"k8s.io/api/core/v1.PodStatus")(0x40005e2af0),},}
(dlv) p task.Pod
*k8s.io/api/core/v1.Pod {
        TypeMeta: k8s.io/apimachinery/pkg/apis/meta/v1.TypeMeta {Kind: "", APIVersion: ""},
        ObjectMeta: k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta {
                Name: "test-job-default-nginx-4",
                GenerateName: "",
                Namespace: "default",
                SelfLink: "/api/v1/namespaces/default/pods/test-job-default-nginx-4",
                UID: "23b04f91-4d17-43a9-8a1e-600107f0d9ac",
                ResourceVersion: "2571669",
                Generation: 0,
                CreationTimestamp: (*"k8s.io/apimachinery/pkg/apis/meta/v1.Time")(0x40005e2888),
                DeletionTimestamp: *k8s.io/apimachinery/pkg/apis/meta/v1.Time nil,
                DeletionGracePeriodSeconds: *int64 nil,
                Labels: map[string]string [...],
                Annotations: map[string]string [...],
                OwnerReferences: []k8s.io/apimachinery/pkg/apis/meta/v1.OwnerReference len: 1, cap: 1, [
                        (*"k8s.io/apimachinery/pkg/apis/meta/v1.OwnerReference")(0x40009b9040),
                ],
                Finalizers: []string len: 0, cap: 0, nil,
                ClusterName: "",
                ManagedFields: []k8s.io/apimachinery/pkg/apis/meta/v1.ManagedFieldsEntry len: 1, cap: 1, [
                        (*"k8s.io/apimachinery/pkg/apis/meta/v1.ManagedFieldsEntry")(0x40009b9090),
                ],},
        Spec: k8s.io/api/core/v1.PodSpec {
                Volumes: []k8s.io/api/core/v1.Volume len: 3, cap: 4, [
                        (*"k8s.io/api/core/v1.Volume")(0x40005e3000),
                        (*"k8s.io/api/core/v1.Volume")(0x40005e30f0),
                        (*"k8s.io/api/core/v1.Volume")(0x40005e31e0),
                ],
                InitContainers: []k8s.io/api/core/v1.Container len: 0, cap: 0, nil,
                Containers: []k8s.io/api/core/v1.Container len: 1, cap: 1, [
                        (*"k8s.io/api/core/v1.Container")(0x400051e2c0),
                ],
                EphemeralContainers: []k8s.io/api/core/v1.EphemeralContainer len: 0, cap: 0, nil,
                RestartPolicy: "OnFailure",
                TerminationGracePeriodSeconds: *30,
                ActiveDeadlineSeconds: *int64 nil,
                DNSPolicy: "ClusterFirst",
                NodeSelector: map[string]string nil,
                ServiceAccountName: "default",
                DeprecatedServiceAccount: "default",
                AutomountServiceAccountToken: *bool nil,
                NodeName: "",
                HostNetwork: false,
                HostPID: false,
                HostIPC: false,
                ShareProcessNamespace: *bool nil,
                SecurityContext: *(*"k8s.io/api/core/v1.PodSecurityContext")(0x4000bb2a10),
                ImagePullSecrets: []k8s.io/api/core/v1.LocalObjectReference len: 0, cap: 0, nil,
                Hostname: "test-job-default-nginx-4",
                Subdomain: "test-job",
                Affinity: *k8s.io/api/core/v1.Affinity nil,
                SchedulerName: "volcano",
                Tolerations: []k8s.io/api/core/v1.Toleration len: 2, cap: 2, [
                        (*"k8s.io/api/core/v1.Toleration")(0x4000bd33b0),
                        (*"k8s.io/api/core/v1.Toleration")(0x4000bd33f8),
                ],
                HostAliases: []k8s.io/api/core/v1.HostAlias len: 0, cap: 0, nil,
                PriorityClassName: "",
                Priority: *0,
                DNSConfig: *k8s.io/api/core/v1.PodDNSConfig nil,
                ReadinessGates: []k8s.io/api/core/v1.PodReadinessGate len: 0, cap: 0, nil,
                RuntimeClassName: *string nil,
                EnableServiceLinks: *true,
                PreemptionPolicy: *k8s.io/api/core/v1.PreemptionPolicy nil,
                Overhead: k8s.io/api/core/v1.ResourceList nil,
                TopologySpreadConstraints: []k8s.io/api/core/v1.TopologySpreadConstraint len: 0, cap: 0, nil,},
        Status: k8s.io/api/core/v1.PodStatus {
                Phase: "Pending",
                Conditions: []k8s.io/api/core/v1.PodCondition len: 0, cap: 0, nil,
                Message: "",
                Reason: "",
                NominatedNodeName: "",
                HostIP: "",
                PodIP: "",
                PodIPs: []k8s.io/api/core/v1.PodIP len: 0, cap: 0, nil,
                StartTime: *k8s.io/apimachinery/pkg/apis/meta/v1.Time nil,
                InitContainerStatuses: []k8s.io/api/core/v1.ContainerStatus len: 0, cap: 0, nil,
                ContainerStatuses: []k8s.io/api/core/v1.ContainerStatus len: 0, cap: 0, nil,
                QOSClass: "Burstable",
                EphemeralContainerStatuses: []k8s.io/api/core/v1.ContainerStatus len: 0, cap: 0, nil,},}
(dlv) c
> volcano.sh/volcano/pkg/scheduler/framework.(*Statement).allocate() /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/framework/statement.go:284 (hits goroutine(188):2 total:2) (PC: 0xebbb80)
Warning: debugging optimized function
(dlv) p task
*volcano.sh/volcano/pkg/scheduler/api.TaskInfo {
        UID: "34dcf318-82bf-44ca-a63d-e559f7462b6d",
        Job: "default/test-job",
        Name: "test-job-default-nginx-2",
        Namespace: "default",
        Resreq: *volcano.sh/volcano/pkg/scheduler/api.Resource {
                MilliCPU: 1000,
                Memory: 0,
                ScalarResources: map[k8s.io/api/core/v1.ResourceName]float64 nil,
                MaxTaskNum: 0,},
        InitResreq: *volcano.sh/volcano/pkg/scheduler/api.Resource {
                MilliCPU: 1000,
                Memory: 0,
                ScalarResources: map[k8s.io/api/core/v1.ResourceName]float64 nil,
                MaxTaskNum: 0,},
        NodeName: "bogon",
        Status: Allocated (2),
        Priority: 0,
        VolumeReady: true,
        Pod: *k8s.io/api/core/v1.Pod {
                TypeMeta: (*"k8s.io/apimachinery/pkg/apis/meta/v1.TypeMeta")(0x400085f400),
                ObjectMeta: (*"k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta")(0x400085f420),
                Spec: (*"k8s.io/api/core/v1.PodSpec")(0x400085f518),
                Status: (*"k8s.io/api/core/v1.PodStatus")(0x400085f6f0),},}
(dlv) c
> volcano.sh/volcano/pkg/scheduler/framework.(*Statement).allocate() /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/framework/statement.go:284 (hits goroutine(188):3 total:3) (PC: 0xebbb80)
Warning: debugging optimized function
(dlv) p task
*volcano.sh/volcano/pkg/scheduler/api.TaskInfo {
        UID: "3b84997f-f761-4bbc-b949-f98d8d61a214",
        Job: "default/test-job",
        Name: "test-job-default-nginx-0",
        Namespace: "default",
        Resreq: *volcano.sh/volcano/pkg/scheduler/api.Resource {
                MilliCPU: 1000,
                Memory: 0,
                ScalarResources: map[k8s.io/api/core/v1.ResourceName]float64 nil,
                MaxTaskNum: 0,},
        InitResreq: *volcano.sh/volcano/pkg/scheduler/api.Resource {
                MilliCPU: 1000,
                Memory: 0,
                ScalarResources: map[k8s.io/api/core/v1.ResourceName]float64 nil,
                MaxTaskNum: 0,},
        NodeName: "bogon",
        Status: Allocated (2),
        Priority: 0,
        VolumeReady: true,
        Pod: *k8s.io/api/core/v1.Pod {
                TypeMeta: (*"k8s.io/apimachinery/pkg/apis/meta/v1.TypeMeta")(0x400085ec00),
                ObjectMeta: (*"k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta")(0x400085ec20),
                Spec: (*"k8s.io/api/core/v1.PodSpec")(0x400085ed18),
                Status: (*"k8s.io/api/core/v1.PodStatus")(0x400085eef0),},}
(dlv) 

 

 

node选择 PredicateNodes PrioritizeNode BestNodeFn

[root@bogon delve]# dlv attach 38678
Type 'help' for list of commands.
(dlv) b PredicateNodes
Breakpoint 1 (enabled) set at 0xf06870 for volcano.sh/volcano/pkg/scheduler/util.PredicateNodes() /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/util/scheduler_helper.go:65
(dlv) b PrioritizeNode
Command failed: location "PrioritizeNode" not found
(dlv) b PrioritizeNodes
Breakpoint 2 (enabled) set at 0xf06c40 for volcano.sh/volcano/pkg/scheduler/util.PrioritizeNodes() /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/util/scheduler_helper.go:121
(dlv) b BestNodeFn
Breakpoint 3 (enabled) set at 0xeb8c20 for volcano.sh/volcano/pkg/scheduler/framework.(*Session).BestNodeFn() /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/framework/session_plugins.go:428
(dlv) b SelectBestNode
Breakpoint 4 (enabled) set at 0xf075e0 for volcano.sh/volcano/pkg/scheduler/util.SelectBestNode() /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/util/scheduler_helper.go:201
(dlv) b Pipeline
Command failed: Location "Pipeline" ambiguous: volcano.sh/volcano/pkg/scheduler/framework.(*Session).Pipeline, volcano.sh/volcano/pkg/scheduler/framework.(*Statement).Pipeline…
(dlv) b framework.(*Statement).Pipeline
Breakpoint 5 (enabled) set at 0xeba3a0 for volcano.sh/volcano/pkg/scheduler/framework.(*Statement).Pipeline() /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/framework/statement.go:146
(dlv) c
> volcano.sh/volcano/pkg/scheduler/util.PredicateNodes() /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/util/scheduler_helper.go:65 (hits goroutine(188):1 total:1) (PC: 0xf06870)
Warning: debugging optimized function
(dlv) bt
0  0x0000000000f06870 in volcano.sh/volcano/pkg/scheduler/util.PredicateNodes
   at /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/util/scheduler_helper.go:65
1  0x0000000000f094d4 in volcano.sh/volcano/pkg/scheduler/actions/allocate.(*Action).Execute
   at /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/actions/allocate/allocate.go:189
2  0x0000000000ee6fe8 in volcano.sh/volcano/pkg/scheduler.(*Scheduler).runOnce
   at /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/scheduler.go:81
3  0x0000000000ee7818 in volcano.sh/volcano/pkg/scheduler.(*Scheduler).runOnce-fm
   at /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/scheduler.go:69
4  0x0000000000339ae4 in k8s.io/apimachinery/pkg/util/wait.BackoffUntil.func1
   at /usr/wulei/projects/src/volcano.sh/volcano/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:155
5  0x0000000000338b54 in k8s.io/apimachinery/pkg/util/wait.BackoffUntil
   at /usr/wulei/projects/src/volcano.sh/volcano/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:156
6  0x0000000000338ac8 in k8s.io/apimachinery/pkg/util/wait.JitterUntil
   at /usr/wulei/projects/src/volcano.sh/volcano/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:133
7  0x0000000000338a28 in k8s.io/apimachinery/pkg/util/wait.Until
   at /usr/wulei/projects/src/volcano.sh/volcano/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:90
8  0x0000000000073ff4 in runtime.goexit
   at /usr/local/go/src/runtime/asm_arm64.s:1148
(dlv) p task
*volcano.sh/volcano/pkg/scheduler/api.TaskInfo {
        UID: "25653abe-1cc9-436b-b4a1-ba0039e78fd4",
        Job: "default/test-job",
        Name: "test-job-default-nginx-1",
        Namespace: "default",
        Resreq: *volcano.sh/volcano/pkg/scheduler/api.Resource {
                MilliCPU: 1000,
                Memory: 0,
                ScalarResources: map[k8s.io/api/core/v1.ResourceName]float64 nil,
                MaxTaskNum: 0,},
        InitResreq: *volcano.sh/volcano/pkg/scheduler/api.Resource {
                MilliCPU: 1000,
                Memory: 0,
                ScalarResources: map[k8s.io/api/core/v1.ResourceName]float64 nil,
                MaxTaskNum: 0,},
        NodeName: "",
        Status: Pending (1),
        Priority: 0,
        VolumeReady: false,
        Pod: *k8s.io/api/core/v1.Pod {
                TypeMeta: (*"k8s.io/apimachinery/pkg/apis/meta/v1.TypeMeta")(0x4000d7fc00),
                ObjectMeta: (*"k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta")(0x4000d7fc20),
                Spec: (*"k8s.io/api/core/v1.PodSpec")(0x4000d7fd18),
                Status: (*"k8s.io/api/core/v1.PodStatus")(0x4000d7fef0),},}
(dlv) p nodes
[]*volcano.sh/volcano/pkg/scheduler/api.NodeInfo len: 4, cap: 4, [
        *{
                Name: "cloud",
                Node: *(*"k8s.io/api/core/v1.Node")(0x40005dc000),
                State: (*"volcano.sh/volcano/pkg/scheduler/api.NodeState")(0x4000624498),
                Releasing: *(*"volcano.sh/volcano/pkg/scheduler/api.Resource")(0x40009aeb60),
                Pipelined: *(*"volcano.sh/volcano/pkg/scheduler/api.Resource")(0x40009aeb80),
                Idle: *(*"volcano.sh/volcano/pkg/scheduler/api.Resource")(0x40009aec20),
                Used: *(*"volcano.sh/volcano/pkg/scheduler/api.Resource")(0x40009aebc0),
                Allocatable: *(*"volcano.sh/volcano/pkg/scheduler/api.Resource")(0x40009aec60),
                Capability: *(*"volcano.sh/volcano/pkg/scheduler/api.Resource")(0x40009aeca0),
                Tasks: map[volcano.sh/volcano/pkg/scheduler/api.TaskID]*volcano.sh/volcano/pkg/scheduler/api.TaskInfo [...],
                Others: map[string]interface {} nil,
                GPUDevices: map[int]*volcano.sh/volcano/pkg/scheduler/api.GPUDevice [],},
        *{
                Name: "ubuntu",
                Node: *(*"k8s.io/api/core/v1.Node")(0x4000c3e300),
                State: (*"volcano.sh/volcano/pkg/scheduler/api.NodeState")(0x4000624b18),
                Releasing: *(*"volcano.sh/volcano/pkg/scheduler/api.Resource")(0x40009aeee0),
                Pipelined: *(*"volcano.sh/volcano/pkg/scheduler/api.Resource")(0x40009aef00),
                Idle: *(*"volcano.sh/volcano/pkg/scheduler/api.Resource")(0x40009af020),
                Used: *(*"volcano.sh/volcano/pkg/scheduler/api.Resource")(0x40009aefa0),
                Allocatable: *(*"volcano.sh/volcano/pkg/scheduler/api.Resource")(0x40009af040),
                Capability: *(*"volcano.sh/volcano/pkg/scheduler/api.Resource")(0x40009af060),
                Tasks: map[volcano.sh/volcano/pkg/scheduler/api.TaskID]*volcano.sh/volcano/pkg/scheduler/api.TaskInfo [...],
                Others: map[string]interface {} nil,
                GPUDevices: map[int]*volcano.sh/volcano/pkg/scheduler/api.GPUDevice [],},
        *{
                Name: "bogon",
                Node: *(*"k8s.io/api/core/v1.Node")(0x400000b500),
                State: (*"volcano.sh/volcano/pkg/scheduler/api.NodeState")(0x400053a318),
                Releasing: *(*"volcano.sh/volcano/pkg/scheduler/api.Resource")(0x40009ae540),
                Pipelined: *(*"volcano.sh/volcano/pkg/scheduler/api.Resource")(0x40009ae560),
                Idle: *(*"volcano.sh/volcano/pkg/scheduler/api.Resource")(0x40009ae600),
                Used: *(*"volcano.sh/volcano/pkg/scheduler/api.Resource")(0x40009ae5a0),
                Allocatable: *(*"volcano.sh/volcano/pkg/scheduler/api.Resource")(0x40009ae620),
                Capability: *(*"volcano.sh/volcano/pkg/scheduler/api.Resource")(0x40009ae640),
                Tasks: map[volcano.sh/volcano/pkg/scheduler/api.TaskID]*volcano.sh/volcano/pkg/scheduler/api.TaskInfo [...],
                Others: map[string]interface {} nil,
                GPUDevices: map[int]*volcano.sh/volcano/pkg/scheduler/api.GPUDevice [],},
        *{
                Name: "centos7",
                Node: *(*"k8s.io/api/core/v1.Node")(0x40005ddb00),
                State: (*"volcano.sh/volcano/pkg/scheduler/api.NodeState")(0x400053b298),
                Releasing: *(*"volcano.sh/volcano/pkg/scheduler/api.Resource")(0x40009ae8a0),
                Pipelined: *(*"volcano.sh/volcano/pkg/scheduler/api.Resource")(0x40009ae8c0),
                Idle: *(*"volcano.sh/volcano/pkg/scheduler/api.Resource")(0x40009ae960),
                Used: *(*"volcano.sh/volcano/pkg/scheduler/api.Resource")(0x40009ae900),
                Allocatable: *(*"volcano.sh/volcano/pkg/scheduler/api.Resource")(0x40009ae980),
                Capability: *(*"volcano.sh/volcano/pkg/scheduler/api.Resource")(0x40009ae9a0),
                Tasks: map[volcano.sh/volcano/pkg/scheduler/api.TaskID]*volcano.sh/volcano/pkg/scheduler/api.TaskInfo [...],
                Others: map[string]interface {} nil,
                GPUDevices: map[int]*volcano.sh/volcano/pkg/scheduler/api.GPUDevice [],},
]
(dlv) c
> volcano.sh/volcano/pkg/scheduler/util.PrioritizeNodes() /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/util/scheduler_helper.go:121 (hits goroutine(188):1 total:1) (PC: 0xf06c40)
Warning: debugging optimized function
(dlv) bt
0  0x0000000000f06c40 in volcano.sh/volcano/pkg/scheduler/util.PrioritizeNodes
   at /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/util/scheduler_helper.go:121
1  0x0000000000f095a4 in volcano.sh/volcano/pkg/scheduler/actions/allocate.(*Action).Execute
   at /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/actions/allocate/allocate.go:207
2  0x0000000000ee6fe8 in volcano.sh/volcano/pkg/scheduler.(*Scheduler).runOnce
   at /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/scheduler.go:81
3  0x0000000000ee7818 in volcano.sh/volcano/pkg/scheduler.(*Scheduler).runOnce-fm
   at /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/scheduler.go:69
4  0x0000000000339ae4 in k8s.io/apimachinery/pkg/util/wait.BackoffUntil.func1
   at /usr/wulei/projects/src/volcano.sh/volcano/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:155
5  0x0000000000338b54 in k8s.io/apimachinery/pkg/util/wait.BackoffUntil
   at /usr/wulei/projects/src/volcano.sh/volcano/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:156
6  0x0000000000338ac8 in k8s.io/apimachinery/pkg/util/wait.JitterUntil
   at /usr/wulei/projects/src/volcano.sh/volcano/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:133
7  0x0000000000338a28 in k8s.io/apimachinery/pkg/util/wait.Until
   at /usr/wulei/projects/src/volcano.sh/volcano/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:90
8  0x0000000000073ff4 in runtime.goexit
   at /usr/local/go/src/runtime/asm_arm64.s:1148
(dlv) c
> volcano.sh/volcano/pkg/scheduler/framework.(*Session).BestNodeFn() /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/framework/session_plugins.go:428 (hits goroutine(188):1 total:1) (PC: 0xeb8c20)
Warning: debugging optimized function
(dlv) bt
0  0x0000000000eb8c20 in volcano.sh/volcano/pkg/scheduler/framework.(*Session).BestNodeFn
   at /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/framework/session_plugins.go:428
1  0x0000000000f095c4 in volcano.sh/volcano/pkg/scheduler/actions/allocate.(*Action).Execute
   at /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/actions/allocate/allocate.go:209
2  0x0000000000ee6fe8 in volcano.sh/volcano/pkg/scheduler.(*Scheduler).runOnce
   at /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/scheduler.go:81
3  0x0000000000ee7818 in volcano.sh/volcano/pkg/scheduler.(*Scheduler).runOnce-fm
   at /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/scheduler.go:69
4  0x0000000000339ae4 in k8s.io/apimachinery/pkg/util/wait.BackoffUntil.func1
   at /usr/wulei/projects/src/volcano.sh/volcano/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:155
5  0x0000000000338b54 in k8s.io/apimachinery/pkg/util/wait.BackoffUntil
   at /usr/wulei/projects/src/volcano.sh/volcano/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:156
6  0x0000000000338ac8 in k8s.io/apimachinery/pkg/util/wait.JitterUntil
   at /usr/wulei/projects/src/volcano.sh/volcano/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:133
7  0x0000000000338a28 in k8s.io/apimachinery/pkg/util/wait.Until
   at /usr/wulei/projects/src/volcano.sh/volcano/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:90
8  0x0000000000073ff4 in runtime.goexit
   at /usr/local/go/src/runtime/asm_arm64.s:1148
(dlv) c
> volcano.sh/volcano/pkg/scheduler/util.SelectBestNode() /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/util/scheduler_helper.go:201 (hits goroutine(188):1 total:1) (PC: 0xf075e0)
Warning: debugging optimized function
(dlv) bt
0  0x0000000000f075e0 in volcano.sh/volcano/pkg/scheduler/util.SelectBestNode
   at /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/util/scheduler_helper.go:201
1  0x0000000000f09dcc in volcano.sh/volcano/pkg/scheduler/actions/allocate.(*Action).Execute
   at /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/actions/allocate/allocate.go:211
2  0x0000000000ee6fe8 in volcano.sh/volcano/pkg/scheduler.(*Scheduler).runOnce
   at /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/scheduler.go:81
3  0x0000000000ee7818 in volcano.sh/volcano/pkg/scheduler.(*Scheduler).runOnce-fm
   at /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/scheduler.go:69
4  0x0000000000339ae4 in k8s.io/apimachinery/pkg/util/wait.BackoffUntil.func1
   at /usr/wulei/projects/src/volcano.sh/volcano/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:155
5  0x0000000000338b54 in k8s.io/apimachinery/pkg/util/wait.BackoffUntil
   at /usr/wulei/projects/src/volcano.sh/volcano/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:156
6  0x0000000000338ac8 in k8s.io/apimachinery/pkg/util/wait.JitterUntil
   at /usr/wulei/projects/src/volcano.sh/volcano/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:133
7  0x0000000000338a28 in k8s.io/apimachinery/pkg/util/wait.Until
   at /usr/wulei/projects/src/volcano.sh/volcano/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:90
8  0x0000000000073ff4 in runtime.goexit
   at /usr/local/go/src/runtime/asm_arm64.s:1148
(dlv) c
> volcano.sh/volcano/pkg/scheduler/util.PredicateNodes() /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/util/scheduler_helper.go:65 (hits goroutine(188):2 total:2) (PC: 0xf06870)
Warning: debugging optimized function
(dlv) bt
0  0x0000000000f06870 in volcano.sh/volcano/pkg/scheduler/util.PredicateNodes
   at /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/util/scheduler_helper.go:65
1  0x0000000000f094d4 in volcano.sh/volcano/pkg/scheduler/actions/allocate.(*Action).Execute
   at /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/actions/allocate/allocate.go:189
2  0x0000000000ee6fe8 in volcano.sh/volcano/pkg/scheduler.(*Scheduler).runOnce
   at /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/scheduler.go:81
3  0x0000000000ee7818 in volcano.sh/volcano/pkg/scheduler.(*Scheduler).runOnce-fm
   at /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/scheduler.go:69
4  0x0000000000339ae4 in k8s.io/apimachinery/pkg/util/wait.BackoffUntil.func1
   at /usr/wulei/projects/src/volcano.sh/volcano/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:155
5  0x0000000000338b54 in k8s.io/apimachinery/pkg/util/wait.BackoffUntil
   at /usr/wulei/projects/src/volcano.sh/volcano/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:156
6  0x0000000000338ac8 in k8s.io/apimachinery/pkg/util/wait.JitterUntil
   at /usr/wulei/projects/src/volcano.sh/volcano/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:133
7  0x0000000000338a28 in k8s.io/apimachinery/pkg/util/wait.Until
   at /usr/wulei/projects/src/volcano.sh/volcano/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:90
8  0x0000000000073ff4 in runtime.goexit
   at /usr/local/go/src/runtime/asm_arm64.s:1148
(dlv) 

 

Queues

 

        podGroupStatus: map[volcano.sh/volcano/pkg/scheduler/api.JobID]volcano.sh/volcano/pkg/apis/scheduling.PodGroupStatus [],
        Jobs: map[volcano.sh/volcano/pkg/scheduler/api.JobID]*volcano.sh/volcano/pkg/scheduler/api.JobInfo [
                "default/test-job": *(*"volcano.sh/volcano/pkg/scheduler/api.JobInfo")(0x40000140b0), 
        ],
        Nodes: map[string]*volcano.sh/volcano/pkg/scheduler/api.NodeInfo [
                "centos7": *(*"volcano.sh/volcano/pkg/scheduler/api.NodeInfo")(0x4000174a00), 
                "cloud": *(*"volcano.sh/volcano/pkg/scheduler/api.NodeInfo")(0x4000175180), 
                "ubuntu": *(*"volcano.sh/volcano/pkg/scheduler/api.NodeInfo")(0x4000175f80), 
                "bogon": *(*"volcano.sh/volcano/pkg/scheduler/api.NodeInfo")(0x400098a500), 
        ],
        Queues: map[volcano.sh/volcano/pkg/scheduler/api.QueueID]*volcano.sh/volcano/pkg/scheduler/api.QueueInfo [
                "test": *(*"volcano.sh/volcano/pkg/scheduler/api.QueueInfo")(0x4000c24840), 
                "default": *(*"volcano.sh/volcano/pkg/scheduler/api.QueueInfo")(0x4000c24870), 
        ],
        NamespaceInfo: map[volcano.sh/volcano/pkg/scheduler/api.NamespaceName]*volcano.sh/volcano/pkg/scheduler/api.NamespaceInfo [],
        Tiers: []volcano.sh/volcano/pkg/scheduler/conf.Tier len: 2, cap: 2, [
                (*"volcano.sh/volcano/pkg/scheduler/conf.Tier")(0x400034ade0),
                (*"volcano.sh/volcano/pkg/scheduler/conf.Tier")(0x400034adf8),
        ],

 

(dlv) p ssn.Queues["test"]
*volcano.sh/volcano/pkg/scheduler/api.QueueInfo {
        UID: "test",
        Name: "test",
        Weight: 1,
        Queue: *volcano.sh/volcano/pkg/apis/scheduling.Queue {
                TypeMeta: (*"k8s.io/apimachinery/pkg/apis/meta/v1.TypeMeta")(0x400044d600),
                ObjectMeta: (*"k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta")(0x400044d620),
                Spec: (*"volcano.sh/volcano/pkg/apis/scheduling.QueueSpec")(0x400044d718),
                Status: (*"volcano.sh/volcano/pkg/apis/scheduling.QueueStatus")(0x400044d740),},}
(dlv) p ssn.Queues["test"].Queue.ObjectMeta
k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta {
        Name: "test",
        GenerateName: "",
        Namespace: "",
        SelfLink: "/apis/scheduling.volcano.sh/v1beta1/queues/test",
        UID: "44ddd84e-6143-4714-aabb-6af4396d3f41",
        ResourceVersion: "1343999",
        Generation: 1,
        CreationTimestamp: k8s.io/apimachinery/pkg/apis/meta/v1.Time {
                Time: (*time.Time)(0x400044d688),},
        DeletionTimestamp: *k8s.io/apimachinery/pkg/apis/meta/v1.Time nil,
        DeletionGracePeriodSeconds: *int64 nil,
        Labels: map[string]string nil,
        Annotations: map[string]string [
                "kubectl.kubernetes.io/last-applied-configuration": "{\"apiVersion\":\"scheduling.volcano.sh/v1beta1\",\"kind\":\"Queue\",\"me...+105 more", 
        ],
        OwnerReferences: []k8s.io/apimachinery/pkg/apis/meta/v1.OwnerReference len: 0, cap: 0, nil,
        Finalizers: []string len: 0, cap: 0, nil,
        ClusterName: "",
        ManagedFields: []k8s.io/apimachinery/pkg/apis/meta/v1.ManagedFieldsEntry len: 2, cap: 2, [
                (*"k8s.io/apimachinery/pkg/apis/meta/v1.ManagedFieldsEntry")(0x40003800a0),
                (*"k8s.io/apimachinery/pkg/apis/meta/v1.ManagedFieldsEntry")(0x40003800f0),
        ],}
(dlv) p ssn.Queues["test"].Queue.Spec
volcano.sh/volcano/pkg/apis/scheduling.QueueSpec {
        Weight: 1,
        Capability: k8s.io/api/core/v1.ResourceList [
                "cpu": (*"k8s.io/apimachinery/pkg/api/resource.Quantity")(0x4000224588), 
        ],
        State: "",
        Reclaimable: *false,}
(dlv) p ssn.Queues["default"].Queue.Spec
volcano.sh/volcano/pkg/apis/scheduling.QueueSpec {
        Weight: 1,
        Capability: k8s.io/api/core/v1.ResourceList nil,
        State: "",
        Reclaimable: *true,}
(dlv) p ssn.Queues["default"].Queue.ObjectMeta
k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta {
        Name: "default",
        GenerateName: "",
        Namespace: "",
        SelfLink: "/apis/scheduling.volcano.sh/v1beta1/queues/default",
        UID: "3ceaa093-3278-437e-831a-e5d6681cab27",
        ResourceVersion: "2578826",
        Generation: 1,
        CreationTimestamp: k8s.io/apimachinery/pkg/apis/meta/v1.Time {
                Time: (*time.Time)(0x4001128a28),},
        DeletionTimestamp: *k8s.io/apimachinery/pkg/apis/meta/v1.Time nil,
        DeletionGracePeriodSeconds: *int64 nil,
        Labels: map[string]string nil,
        Annotations: map[string]string nil,
        OwnerReferences: []k8s.io/apimachinery/pkg/apis/meta/v1.OwnerReference len: 0, cap: 0, nil,
        Finalizers: []string len: 0, cap: 0, nil,
        ClusterName: "",
        ManagedFields: []k8s.io/apimachinery/pkg/apis/meta/v1.ManagedFieldsEntry len: 2, cap: 2, [
                (*"k8s.io/apimachinery/pkg/apis/meta/v1.ManagedFieldsEntry")(0x40007c08c0),
                (*"k8s.io/apimachinery/pkg/apis/meta/v1.ManagedFieldsEntry")(0x40007c0910),
        ],}
(dlv) p ssn.Jobs["default/test-job"]
*volcano.sh/volcano/pkg/scheduler/api.JobInfo {
        UID: "default/test-job",
        Name: "test-job",
        Namespace: "default",
        Queue: "default",
        Priority: 0,
        MinAvailable: 3,
        NodesFitDelta: volcano.sh/volcano/pkg/scheduler/api.NodeResourceMap [],
        JobFitErrors: "",
        NodesFitErrors: map[volcano.sh/volcano/pkg/scheduler/api.TaskID]*volcano.sh/volcano/pkg/scheduler/api.FitErrors [],
        TaskStatusIndex: map[volcano.sh/volcano/pkg/scheduler/api.TaskStatus]volcano.sh/volcano/pkg/scheduler/api.tasksMap [],
        Tasks: volcano.sh/volcano/pkg/scheduler/api.tasksMap [],
        Allocated: *volcano.sh/volcano/pkg/scheduler/api.Resource {
                MilliCPU: 0,
                Memory: 0,
                ScalarResources: map[k8s.io/api/core/v1.ResourceName]float64 nil,
                MaxTaskNum: 0,},
        TotalRequest: *volcano.sh/volcano/pkg/scheduler/api.Resource {
                MilliCPU: 0,
                Memory: 0,
                ScalarResources: map[k8s.io/api/core/v1.ResourceName]float64 nil,
                MaxTaskNum: 0,},
        CreationTimestamp: k8s.io/apimachinery/pkg/apis/meta/v1.Time {
                Time: (*time.Time)(0x4000014138),},
        PodGroup: *volcano.sh/volcano/pkg/scheduler/api.PodGroup {
                PodGroup: (*"volcano.sh/volcano/pkg/apis/scheduling.PodGroup")(0x400041a000),
                Version: "v1beta1",},}
(dlv) p ssn.Jobs["default/test-job"].Queue
"default"

 

优先级队列  namespaceOrderFns

container/heap实现优先级队列

   namespaceOrderFns: map[string]volcano.sh/volcano/pkg/scheduler/api.CompareFn [
                "drf": volcano.sh/volcano/pkg/scheduler/plugins/drf.(*drfPlugin).OnSessionOpen.func3, 
        ],
func (alloc *Action) Execute(ssn *framework.Session) {
    klog.V(3).Infof("Enter Allocate ...")
    defer klog.V(3).Infof("Leaving Allocate ...")

    // the allocation for pod may have many stages
    // 1. pick a namespace named N (using ssn.NamespaceOrderFn)
    // 2. pick a queue named Q from N (using ssn.QueueOrderFn)
    // 3. pick a job named J from Q (using ssn.JobOrderFn)
    // 4. pick a task T from J (using ssn.TaskOrderFn)
    // 5. use predicateFn to filter out node that T can not be allocated on.
    // 6. use ssn.NodeOrderFn to judge the best node and assign it to T

    namespaces := util.NewPriorityQueue(ssn.NamespaceOrderFn)

    // jobsMap is map[api.NamespaceName]map[api.QueueID]PriorityQueue(*api.JobInfo)
    // used to find job with highest priority in given queue and namespace
    jobsMap := map[api.NamespaceName]map[api.QueueID]*util.PriorityQueue{}

    for _, job := range ssn.Jobs {
        if job.PodGroup.Status.Phase == scheduling.PodGroupPending {
            continue
        }
        if vr := ssn.JobValid(job); vr != nil && !vr.Pass {
            klog.V(4).Infof("Job <%s/%s> Queue <%s> skip allocate, reason: %v, message %v", job.Namespace, job.Name, job.Queue, vr.Reason, vr.Message)
            continue
        }

        if _, found := ssn.Queues[job.Queue]; !found {
            klog.Warningf("Skip adding Job <%s/%s> because its queue %s is not found",
                job.Namespace, job.Name, job.Queue)
            continue
        }

        namespace := api.NamespaceName(job.Namespace)
        queueMap, found := jobsMap[namespace]
        if !found {
            namespaces.Push(namespace)

            queueMap = make(map[api.QueueID]*util.PriorityQueue)
            jobsMap[namespace] = queueMap
        }

        jobs, found := queueMap[job.Queue]
        if !found {
            jobs = util.NewPriorityQueue(ssn.JobOrderFn)
            queueMap[job.Queue] = jobs
        }

        klog.V(4).Infof("Added Job <%s/%s> into Queue <%s>", job.Namespace, job.Name, job.Queue)
        jobs.Push(job)
    }

 

package util

import (
    "container/heap"

    "volcano.sh/volcano/pkg/scheduler/api"
)

//PriorityQueue implements a scheduling queue.
type PriorityQueue struct {
    queue priorityQueue
}

type priorityQueue struct {
    items  []interface{}
    lessFn api.LessFn
}

// NewPriorityQueue returns a PriorityQueue
func NewPriorityQueue(lessFn api.LessFn) *PriorityQueue {
    return &PriorityQueue{
        queue: priorityQueue{
            items:  make([]interface{}, 0),
            lessFn: lessFn,
        },
    }
}

 

framework.(*Session).JobReady

 

root@bogon ~]# dlv attach 50283 
Type 'help' for list of commands.
(dlv) b dispatch
Command failed: Location "dispatch" ambiguous: github.com/emicklei/go-restful.(*Container).dispatch, volcano.sh/volcano/pkg/scheduler/framework.(*Session).dispatch…
(dlv) b framework.(*Session).dispatch
Breakpoint 1 (enabled) set at 0xeb5520 for volcano.sh/volcano/pkg/scheduler/framework.(*Session).dispatch() /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/framework/session.go:310
(dlv) b jobReady
Command failed: location "jobReady" not found
(dlv) b JobReady
Breakpoint 2 (enabled) set at 0xeb78a0 for volcano.sh/volcano/pkg/scheduler/framework.(*Session).JobReady() /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/framework/session_plugins.go:213
(dlv) c
> volcano.sh/volcano/pkg/scheduler/framework.(*Session).JobReady() /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/framework/session_plugins.go:213 (hits goroutine(337):1 total:1) (PC: 0xeb78a0)
Warning: debugging optimized function
(dlv) bt
0  0x0000000000eb78a0 in volcano.sh/volcano/pkg/scheduler/framework.(*Session).JobReady
   at /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/framework/session_plugins.go:213
1  0x0000000000f096fc in volcano.sh/volcano/pkg/scheduler/actions/allocate.(*Action).Execute
   at /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/actions/allocate/allocate.go:240
2  0x0000000000ee6fe8 in volcano.sh/volcano/pkg/scheduler.(*Scheduler).runOnce
   at /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/scheduler.go:81
3  0x0000000000ee7818 in volcano.sh/volcano/pkg/scheduler.(*Scheduler).runOnce-fm
   at /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/scheduler.go:69
4  0x0000000000339ae4 in k8s.io/apimachinery/pkg/util/wait.BackoffUntil.func1
   at /usr/wulei/projects/src/volcano.sh/volcano/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:155
5  0x0000000000338b54 in k8s.io/apimachinery/pkg/util/wait.BackoffUntil
   at /usr/wulei/projects/src/volcano.sh/volcano/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:156
6  0x0000000000338ac8 in k8s.io/apimachinery/pkg/util/wait.JitterUntil
   at /usr/wulei/projects/src/volcano.sh/volcano/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:133
7  0x0000000000338a28 in k8s.io/apimachinery/pkg/util/wait.Until
   at /usr/wulei/projects/src/volcano.sh/volcano/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:90
8  0x0000000000073ff4 in runtime.goexit
   at /usr/local/go/src/runtime/asm_arm64.s:1148
(dlv) p obj
interface {}(*volcano.sh/volcano/pkg/scheduler/api.JobInfo) *{
        UID: "default/test-job",
        Name: "test-job",
        Namespace: "default",
        Queue: "default",
        Priority: 0,
        MinAvailable: 3,
        NodesFitDelta: volcano.sh/volcano/pkg/scheduler/api.NodeResourceMap [],
        JobFitErrors: "",
        NodesFitErrors: map[volcano.sh/volcano/pkg/scheduler/api.TaskID]*volcano.sh/volcano/pkg/scheduler/api.FitErrors [],
        TaskStatusIndex: map[volcano.sh/volcano/pkg/scheduler/api.TaskStatus]volcano.sh/volcano/pkg/scheduler/api.tasksMap [
                Pending (1): [...], 
                Allocated (2): [...], 
        ],
        Tasks: volcano.sh/volcano/pkg/scheduler/api.tasksMap [
                "85b6432c-5960-4d24-b9dc-028818830145": *(*"volcano.sh/volcano/pkg/scheduler/api.TaskInfo")(0x40007d0e80), 
                "a69afd83-8e3c-4ba6-83b5-c4166368fac1": *(*"volcano.sh/volcano/pkg/scheduler/api.TaskInfo")(0x40007d1100), 
                "c7f50837-fdaa-4e3c-a583-ea679ec2a621": *(*"volcano.sh/volcano/pkg/scheduler/api.TaskInfo")(0x40007d1200), 
                "04267fd7-3ffa-47e8-8e24-6b204994941f": *(*"volcano.sh/volcano/pkg/scheduler/api.TaskInfo")(0x40007d1300), 
                "f7ccfd37-6c7c-4020-9b2b-51d1d134f17f": *(*"volcano.sh/volcano/pkg/scheduler/api.TaskInfo")(0x40007d1400), 
                "8eb8ae0f-5583-4c46-8017-2f500fa397cb": *(*"volcano.sh/volcano/pkg/scheduler/api.TaskInfo")(0x40007d1480), 
        ],
        Allocated: *volcano.sh/volcano/pkg/scheduler/api.Resource {
                MilliCPU: 1000,
                Memory: 0,
                ScalarResources: map[k8s.io/api/core/v1.ResourceName]float64 nil,
                MaxTaskNum: 0,},
        TotalRequest: *volcano.sh/volcano/pkg/scheduler/api.Resource {
                MilliCPU: 6000,
                Memory: 0,
                ScalarResources: map[k8s.io/api/core/v1.ResourceName]float64 nil,
                MaxTaskNum: 0,},
        CreationTimestamp: k8s.io/apimachinery/pkg/apis/meta/v1.Time {
                Time: (*time.Time)(0x40007c6088),},
        PodGroup: *volcano.sh/volcano/pkg/scheduler/api.PodGroup {
                PodGroup: (*"volcano.sh/volcano/pkg/apis/scheduling.PodGroup")(0x4000929040),
                Version: "v1beta1",},}
(dlv) s
> volcano.sh/volcano/pkg/scheduler/framework.(*Session).JobReady() /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/framework/session_plugins.go:214 (PC: 0xeb78b4)
Warning: debugging optimized function
(dlv) p obj.(*"volcano.sh/volcano/pkg/scheduler/api.JobInfo")
Command failed: 1:7: expected type, found "volcano.sh/volcano/pkg/scheduler/api.JobInfo"
(dlv) p obj.(*"volcano.sh/volcano/pkg/scheduler/api.JobInfo"{})
Command failed: 1:7: expected type, found "volcano.sh/volcano/pkg/scheduler/api.JobInfo"
(dlv) p obj.*(*"volcano.sh/volcano/pkg/scheduler/api.JobInfo")
Command failed: 1:5: expected selector or type assertion, found '*'
(dlv) p obj(*"volcano.sh/volcano/pkg/scheduler/api.JobInfo")
Command failed: expression ""volcano.sh/volcano/pkg/scheduler/api.JobInfo"" (string) can not be dereferenced
(dlv) p obj.(*"volcano.sh/volcano/pkg/scheduler/api.JobInfo")
Command failed: 1:7: expected type, found "volcano.sh/volcano/pkg/scheduler/api.JobInfo"
(dlv) p obj.("volcano.sh/volcano/pkg/scheduler/api.JobInfo)
Command failed: 1:6: string literal not terminated
(dlv) p obj.("volcano.sh/volcano/pkg/scheduler/api.JobInfo")
Command failed: 1:6: expected type, found "volcano.sh/volcano/pkg/scheduler/api.JobInfo"
(dlv) p obj.("*volcano.sh/volcano/pkg/scheduler/api.JobInfo")
Command failed: 1:6: expected type, found "*volcano.sh/volcano/pkg/scheduler/api.JobInfo"
(dlv) p obj["Tasks"]
Command failed: expression "obj" (interface {}) does not support indexing
(dlv) p obj.(type)
Command failed: no type entry found, use 'types' for a list of valid types
(dlv) s
> volcano.sh/volcano/pkg/scheduler/framework.(*Session).JobReady() /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/framework/session_plugins.go:215 (PC: 0xeb7944)
Warning: debugging optimized function
(dlv) p ssn.Tiers
[]volcano.sh/volcano/pkg/scheduler/conf.Tier len: 2, cap: 2, [
        {
                Plugins: []volcano.sh/volcano/pkg/scheduler/conf.PluginOption len: 3, cap: 3, [
                        (*"volcano.sh/volcano/pkg/scheduler/conf.PluginOption")(0x4000512000),
                        (*"volcano.sh/volcano/pkg/scheduler/conf.PluginOption")(0x4000512070),
                        (*"volcano.sh/volcano/pkg/scheduler/conf.PluginOption")(0x40005120e0),
                ],},
        {
                Plugins: []volcano.sh/volcano/pkg/scheduler/conf.PluginOption len: 5, cap: 5, [
                        (*"volcano.sh/volcano/pkg/scheduler/conf.PluginOption")(0x400022a240),
                        (*"volcano.sh/volcano/pkg/scheduler/conf.PluginOption")(0x400022a2b0),
                        (*"volcano.sh/volcano/pkg/scheduler/conf.PluginOption")(0x400022a320),
                        (*"volcano.sh/volcano/pkg/scheduler/conf.PluginOption")(0x400022a390),
                        (*"volcano.sh/volcano/pkg/scheduler/conf.PluginOption")(0x400022a400),
                ],},
]
(dlv) p ssn.Tiers[0].Plugins[0]
volcano.sh/volcano/pkg/scheduler/conf.PluginOption {
        Name: "priority",
        EnabledJobOrder: *true,
        EnabledNamespaceOrder: *true,
        EnabledJobReady: *true,
        EnabledJobPipelined: *true,
        EnabledTaskOrder: *true,
        EnabledPreemptable: *true,
        EnabledReclaimable: *true,
        EnabledQueueOrder: *true,
        EnabledPredicate: *true,
        EnabledBestNode: *true,
        EnabledNodeOrder: *true,
        Arguments: map[string]string nil,}
(dlv) p ssn.Tiers[0].Plugins[1]
volcano.sh/volcano/pkg/scheduler/conf.PluginOption {
        Name: "gang",
        EnabledJobOrder: *true,
        EnabledNamespaceOrder: *true,
        EnabledJobReady: *true,
        EnabledJobPipelined: *true,
        EnabledTaskOrder: *true,
        EnabledPreemptable: *true,
        EnabledReclaimable: *true,
        EnabledQueueOrder: *true,
        EnabledPredicate: *true,
        EnabledBestNode: *true,
        EnabledNodeOrder: *true,
        Arguments: map[string]string nil,}
(dlv) p ssn.Tiers[0].Plugins[2]
volcano.sh/volcano/pkg/scheduler/conf.PluginOption {
        Name: "conformance",
        EnabledJobOrder: *true,
        EnabledNamespaceOrder: *true,
        EnabledJobReady: *true,
        EnabledJobPipelined: *true,
        EnabledTaskOrder: *true,
        EnabledPreemptable: *true,
        EnabledReclaimable: *true,
        EnabledQueueOrder: *true,
        EnabledPredicate: *true,
        EnabledBestNode: *true,
        EnabledNodeOrder: *true,
        Arguments: map[string]string nil,}
(dlv) p ssn.Tiers[0].Plugins[2].name
Command failed:  has no member name
(dlv) p ssn.Tiers[0].Plugins[2].Name
"conformance"
(dlv) p ssn.Tiers[1].Plugins[0].Name
"drf"
(dlv) p ssn.Tiers[1].Plugins[0]
volcano.sh/volcano/pkg/scheduler/conf.PluginOption {
        Name: "drf",
        EnabledJobOrder: *true,
        EnabledNamespaceOrder: *true,
        EnabledJobReady: *true,
        EnabledJobPipelined: *true,
        EnabledTaskOrder: *true,
        EnabledPreemptable: *true,
        EnabledReclaimable: *true,
        EnabledQueueOrder: *true,
        EnabledPredicate: *true,
        EnabledBestNode: *true,
        EnabledNodeOrder: *true,
        Arguments: map[string]string nil,}
(dlv) p ssn.Tiers[1].Plugins[1]
volcano.sh/volcano/pkg/scheduler/conf.PluginOption {
        Name: "predicates",
        EnabledJobOrder: *true,
        EnabledNamespaceOrder: *true,
        EnabledJobReady: *true,
        EnabledJobPipelined: *true,
        EnabledTaskOrder: *true,
        EnabledPreemptable: *true,
        EnabledReclaimable: *true,
        EnabledQueueOrder: *true,
        EnabledPredicate: *true,
        EnabledBestNode: *true,
        EnabledNodeOrder: *true,
        Arguments: map[string]string nil,}
(dlv) p ssn.Tiers[1].Plugins[2]
volcano.sh/volcano/pkg/scheduler/conf.PluginOption {
        Name: "proportion",
        EnabledJobOrder: *true,
        EnabledNamespaceOrder: *true,
        EnabledJobReady: *true,
        EnabledJobPipelined: *true,
        EnabledTaskOrder: *true,
        EnabledPreemptable: *true,
        EnabledReclaimable: *true,
        EnabledQueueOrder: *true,
        EnabledPredicate: *true,
        EnabledBestNode: *true,
        EnabledNodeOrder: *true,
        Arguments: map[string]string nil,}
(dlv) p ssn.Tiers[1].Plugins[3]
volcano.sh/volcano/pkg/scheduler/conf.PluginOption {
        Name: "nodeorder",
        EnabledJobOrder: *true,
        EnabledNamespaceOrder: *true,
        EnabledJobReady: *true,
        EnabledJobPipelined: *true,
        EnabledTaskOrder: *true,
        EnabledPreemptable: *true,
        EnabledReclaimable: *true,
        EnabledQueueOrder: *true,
        EnabledPredicate: *true,
        EnabledBestNode: *true,
        EnabledNodeOrder: *true,
        Arguments: map[string]string nil,}
(dlv) p ssn.Tiers[1].Plugins[4]
volcano.sh/volcano/pkg/scheduler/conf.PluginOption {
        Name: "binpack",
        EnabledJobOrder: *true,
        EnabledNamespaceOrder: *true,
        EnabledJobReady: *true,
        EnabledJobPipelined: *true,
        EnabledTaskOrder: *true,
        EnabledPreemptable: *true,
        EnabledReclaimable: *true,
        EnabledQueueOrder: *true,
        EnabledPredicate: *true,
        EnabledBestNode: *true,
        EnabledNodeOrder: *true,
        Arguments: map[string]string nil,}
(dlv) c
> volcano.sh/volcano/pkg/scheduler/framework.(*Session).JobReady() /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/framework/session_plugins.go:213 (hits goroutine(337):2 total:2) (PC: 0xeb78a0)
Warning: debugging optimized function
(dlv) bt
0  0x0000000000eb78a0 in volcano.sh/volcano/pkg/scheduler/framework.(*Session).JobReady
   at /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/framework/session_plugins.go:213
1  0x0000000000f096fc in volcano.sh/volcano/pkg/scheduler/actions/allocate.(*Action).Execute
   at /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/actions/allocate/allocate.go:240
2  0x0000000000ee6fe8 in volcano.sh/volcano/pkg/scheduler.(*Scheduler).runOnce
   at /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/scheduler.go:81
3  0x0000000000ee7818 in volcano.sh/volcano/pkg/scheduler.(*Scheduler).runOnce-fm
   at /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/scheduler.go:69
4  0x0000000000339ae4 in k8s.io/apimachinery/pkg/util/wait.BackoffUntil.func1
   at /usr/wulei/projects/src/volcano.sh/volcano/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:155
5  0x0000000000338b54 in k8s.io/apimachinery/pkg/util/wait.BackoffUntil
   at /usr/wulei/projects/src/volcano.sh/volcano/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:156
6  0x0000000000338ac8 in k8s.io/apimachinery/pkg/util/wait.JitterUntil
   at /usr/wulei/projects/src/volcano.sh/volcano/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:133
7  0x0000000000338a28 in k8s.io/apimachinery/pkg/util/wait.Until
   at /usr/wulei/projects/src/volcano.sh/volcano/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:90
8  0x0000000000073ff4 in runtime.goexit
   at /usr/local/go/src/runtime/asm_arm64.s:1148
(dlv) p obj
interface {}(*volcano.sh/volcano/pkg/scheduler/api.JobInfo) *{
        UID: "default/test-job",
        Name: "test-job",
        Namespace: "default",
        Queue: "default",
        Priority: 0,
        MinAvailable: 3,
        NodesFitDelta: volcano.sh/volcano/pkg/scheduler/api.NodeResourceMap [],
        JobFitErrors: "",
        NodesFitErrors: map[volcano.sh/volcano/pkg/scheduler/api.TaskID]*volcano.sh/volcano/pkg/scheduler/api.FitErrors [],
        TaskStatusIndex: map[volcano.sh/volcano/pkg/scheduler/api.TaskStatus]volcano.sh/volcano/pkg/scheduler/api.tasksMap [
                Pending (1): [...], 
                Allocated (2): [...], 
        ],
        Tasks: volcano.sh/volcano/pkg/scheduler/api.tasksMap [
                "85b6432c-5960-4d24-b9dc-028818830145": *(*"volcano.sh/volcano/pkg/scheduler/api.TaskInfo")(0x40007d0e80), 
                "a69afd83-8e3c-4ba6-83b5-c4166368fac1": *(*"volcano.sh/volcano/pkg/scheduler/api.TaskInfo")(0x40007d1100), 
                "c7f50837-fdaa-4e3c-a583-ea679ec2a621": *(*"volcano.sh/volcano/pkg/scheduler/api.TaskInfo")(0x40007d1200), 
                "04267fd7-3ffa-47e8-8e24-6b204994941f": *(*"volcano.sh/volcano/pkg/scheduler/api.TaskInfo")(0x40007d1300), 
                "f7ccfd37-6c7c-4020-9b2b-51d1d134f17f": *(*"volcano.sh/volcano/pkg/scheduler/api.TaskInfo")(0x40007d1400), 
                "8eb8ae0f-5583-4c46-8017-2f500fa397cb": *(*"volcano.sh/volcano/pkg/scheduler/api.TaskInfo")(0x40007d1480), 
        ],
        Allocated: *volcano.sh/volcano/pkg/scheduler/api.Resource {
                MilliCPU: 2000,
                Memory: 0,
                ScalarResources: map[k8s.io/api/core/v1.ResourceName]float64 nil,
                MaxTaskNum: 0,},
        TotalRequest: *volcano.sh/volcano/pkg/scheduler/api.Resource {
                MilliCPU: 6000,
                Memory: 0,
                ScalarResources: map[k8s.io/api/core/v1.ResourceName]float64 nil,
                MaxTaskNum: 0,},
        CreationTimestamp: k8s.io/apimachinery/pkg/apis/meta/v1.Time {
                Time: (*time.Time)(0x40007c6088),},
        PodGroup: *volcano.sh/volcano/pkg/scheduler/api.PodGroup {
                PodGroup: (*"volcano.sh/volcano/pkg/apis/scheduling.PodGroup")(0x4000929040),
                Version: "v1beta1",},}
(dlv) c
> volcano.sh/volcano/pkg/scheduler/framework.(*Session).JobReady() /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/framework/session_plugins.go:213 (hits goroutine(337):3 total:3) (PC: 0xeb78a0)
Warning: debugging optimized function
(dlv) bt
0  0x0000000000eb78a0 in volcano.sh/volcano/pkg/scheduler/framework.(*Session).JobReady
   at /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/framework/session_plugins.go:213
1  0x0000000000f096fc in volcano.sh/volcano/pkg/scheduler/actions/allocate.(*Action).Execute
   at /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/actions/allocate/allocate.go:240
2  0x0000000000ee6fe8 in volcano.sh/volcano/pkg/scheduler.(*Scheduler).runOnce
   at /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/scheduler.go:81
3  0x0000000000ee7818 in volcano.sh/volcano/pkg/scheduler.(*Scheduler).runOnce-fm
   at /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/scheduler.go:69
4  0x0000000000339ae4 in k8s.io/apimachinery/pkg/util/wait.BackoffUntil.func1
   at /usr/wulei/projects/src/volcano.sh/volcano/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:155
5  0x0000000000338b54 in k8s.io/apimachinery/pkg/util/wait.BackoffUntil
   at /usr/wulei/projects/src/volcano.sh/volcano/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:156
6  0x0000000000338ac8 in k8s.io/apimachinery/pkg/util/wait.JitterUntil
   at /usr/wulei/projects/src/volcano.sh/volcano/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:133
7  0x0000000000338a28 in k8s.io/apimachinery/pkg/util/wait.Until
   at /usr/wulei/projects/src/volcano.sh/volcano/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:90
8  0x0000000000073ff4 in runtime.goexit
   at /usr/local/go/src/runtime/asm_arm64.s:1148
(dlv) c
> volcano.sh/volcano/pkg/scheduler/framework.(*Session).JobReady() /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/framework/session_plugins.go:213 (hits goroutine(337):4 total:4) (PC: 0xeb78a0)
Warning: debugging optimized function
(dlv) c
> volcano.sh/volcano/pkg/scheduler/framework.(*Session).JobReady() /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/framework/session_plugins.go:213 (hits goroutine(337):5 total:5) (PC: 0xeb78a0)
Warning: debugging optimized function
(dlv) c
> volcano.sh/volcano/pkg/scheduler/framework.(*Session).JobReady() /usr/wulei/projects/src/volcano.sh/volcano/pkg/scheduler/framework/session_plugins.go:213 (hits goroutine(337):6 total:6) (PC: 0xeb78a0)
Warning: debugging optimized function
(dlv) c

 

 ssn.dispatch

func (ssn *Session) Allocate(task *api.TaskInfo, hostname string) error {
    if err := ssn.cache.AllocateVolumes(task, hostname); err != nil {
        return err
    }
 
    // 这里这是更新task的状态。
    // Only update status in session
    job, found := ssn.Jobs[task.Job]
    if found {
        if err := job.UpdateTaskStatus(task, api.Allocated); err != nil {
            glog.Errorf("Failed to update task <%v/%v> status to %v in Session <%v>: %v",
                task.Namespace, task.Name, api.Allocated, ssn.UID, err)
            return err
        }
    } else {
        glog.Errorf("Failed to found Job <%s> in Session <%s> index when binding.",
            task.Job, ssn.UID)
        return fmt.Errorf("failed to find job %s", task.Job)
    }
 
    task.NodeName = hostname
 
    if node, found := ssn.Nodes[hostname]; found {
        if err := node.AddTask(task); err != nil {
            glog.Errorf("Failed to add task <%v/%v> to node <%v> in Session <%v>: %v",
                task.Namespace, task.Name, hostname, ssn.UID, err)
            return err
        }
        glog.V(3).Infof("After allocated Task <%v/%v> to Node <%v>: idle <%v>, used <%v>, releasing <%v>",
            task.Namespace, task.Name, node.Name, node.Idle, node.Used, node.Releasing)
    } else {
        glog.Errorf("Failed to found Node <%s> in Session <%s> index when binding.",
            hostname, ssn.UID)
        return fmt.Errorf("failed to find node %s", hostname)
    }
 
    //gang.go中有,这里是真正的绑定了,当jobReady时,调用dispatch函数对所有的Allocated的task进行绑定。
    // dispatch就在该函数的下面。内容也很直观,就是调用k8s的接口,真正的绑定pod
    if ssn.JobReady(job) {
        for _, task := range job.TaskStatusIndex[api.Allocated] {
            if err := ssn.dispatch(task); err != nil {                    // 如果job准备好了,就直接真正绑定所有准备好的任务??
                glog.Errorf("Failed to dispatch task <%v/%v>: %v",
                    task.Namespace, task.Name, err)
                return err
            }
        }
    }
 
    return nil
}

 

volcano代码分析

Volcano 调度器源码分析(scheduler 03)

 

部署自己的volcano

posted on 2021-07-12 15:08  tycoon3  阅读(257)  评论(0)    收藏  举报

导航