fix(region): cpu numa pin guest sched start (#20937)

This commit is contained in:
wanyaoqi
2024-07-31 21:36:09 +08:00
committed by GitHub
parent 1eb6405e75
commit 39b7ce5864
2 changed files with 27 additions and 14 deletions
+6 -3
View File
@@ -588,7 +588,7 @@ func (self *SGuest) StartMigrateTask(
data.Set("guest_status", jsonutils.NewString(guestStatus))
dedicateMigrateTask := "GuestMigrateTask"
if self.GetHypervisor() != api.HYPERVISOR_KVM {
if !utils.IsInStringArray(self.GetHypervisor(), []string{api.HYPERVISOR_KVM, api.HYPERVISOR_POD}) {
dedicateMigrateTask = "ManagedGuestMigrateTask" //托管私有云
}
self.SetStatus(ctx, userCred, vmStatus, "")
@@ -1558,8 +1558,11 @@ func (self *SGuest) StartGueststartTask(
data *jsonutils.JSONDict, parentTaskId string,
) error {
schedStart := self.Hypervisor == api.HYPERVISOR_KVM && self.guestDisksStorageTypeIsShared()
if options.Options.IgnoreNonrunningGuests && self.CpuNumaPin != nil {
schedStart = true
if options.Options.IgnoreNonrunningGuests {
host := HostManager.FetchHostById(self.HostId)
if host != nil && host.EnableNumaAllocate {
schedStart = true
}
}
if schedStart {
+21 -11
View File
@@ -152,32 +152,32 @@ func (self *GuestSchedStartTask) OnInit(ctx context.Context, obj db.IStandaloneM
}
func (self *GuestSchedStartTask) StartScheduler(ctx context.Context, guest *models.SGuest) {
if guest.CpuNumaPin != nil {
self.ScheduleFailed(ctx, guest)
host, _ := guest.GetHost()
if host.EnableNumaAllocate {
self.ScheduleFailed(ctx, guest, true)
return
}
host, _ := guest.GetHost()
if request := host.GetRunningGuestResourceUsage(); request == nil {
self.TaskFailed(ctx, guest, jsonutils.NewString("Guest Start Failed: Can't Get Host Guests CPU Memory Usage"))
} else {
if float32(request.GuestVmemSize+guest.VmemSize) > host.GetVirtualMemorySize() {
log.Infof("host memory not enough to start guest")
self.ScheduleFailed(ctx, guest)
self.ScheduleFailed(ctx, guest, false)
} else if request.GuestVcpuCount+guest.VcpuCount > int(host.GetVirtualCPUCount()) {
log.Infof("host cpu not enough to start guest")
self.ScheduleFailed(ctx, guest)
self.ScheduleFailed(ctx, guest, false)
} else {
self.ScheduleSucc(ctx, guest)
}
}
}
func (self *GuestSchedStartTask) ScheduleFailed(ctx context.Context, guest *models.SGuest) {
func (self *GuestSchedStartTask) ScheduleFailed(ctx context.Context, guest *models.SGuest, resetCpuNumaPin bool) {
self.SetStage("OnGuestMigrate", nil)
preferHostId := ""
if guest.CpuNumaPin != nil {
if resetCpuNumaPin {
preferHostId = guest.HostId
}
@@ -185,17 +185,27 @@ func (self *GuestSchedStartTask) ScheduleFailed(ctx context.Context, guest *mode
}
func (self *GuestSchedStartTask) OnGuestMigrate(ctx context.Context, guest *models.SGuest, data jsonutils.JSONObject) {
self.SetStageComplete(ctx, nil)
guest.GuestNonSchedStartTask(ctx, self.UserCred, nil, "")
self.SetStage("OnGuestStarted", nil)
guest.GuestNonSchedStartTask(ctx, self.UserCred, self.Params, self.GetTaskId())
}
func (self *GuestSchedStartTask) OnGuestMigrateFailed(ctx context.Context, guest *models.SGuest, data jsonutils.JSONObject) {
self.TaskFailed(ctx, guest, data)
}
func (self *GuestSchedStartTask) ScheduleSucc(ctx context.Context, guest *models.SGuest) {
func (self *GuestSchedStartTask) OnGuestStarted(ctx context.Context, guest *models.SGuest, data jsonutils.JSONObject) {
self.SetStageComplete(ctx, nil)
guest.GuestNonSchedStartTask(ctx, self.UserCred, self.Params, "")
}
func (self *GuestSchedStartTask) OnGuestStartedFailed(ctx context.Context, guest *models.SGuest, data jsonutils.JSONObject) {
self.TaskFailed(ctx, guest, data)
}
func (self *GuestSchedStartTask) ScheduleSucc(ctx context.Context, guest *models.SGuest) {
self.SetStage("OnGuestStarted", nil)
guest.GuestNonSchedStartTask(ctx, self.UserCred, self.Params, self.GetTaskId())
}
func (self *GuestSchedStartTask) TaskFailed(ctx context.Context, guest *models.SGuest, reason jsonutils.JSONObject) {