From 0ebd7370d18c7b1b8e28c0ec7de3fb2fec147ed6 Mon Sep 17 00:00:00 2001 From: wanyaoqi Date: Fri, 12 Apr 2024 19:14:44 +0800 Subject: [PATCH] fix(host): init from existing guest load cpuset --- pkg/hostman/guestman/qemu-kvm.go | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/pkg/hostman/guestman/qemu-kvm.go b/pkg/hostman/guestman/qemu-kvm.go index c38658e348..095453c6ae 100644 --- a/pkg/hostman/guestman/qemu-kvm.go +++ b/pkg/hostman/guestman/qemu-kvm.go @@ -412,6 +412,25 @@ func (s *SKVMGuestInstance) initLiveDescFromSourceGuest(srcDesc *desc.SGuestDesc srcDesc.VcpuPin = nil srcDesc.CpuNumaPin = nil } else { + if scpuset, ok := srcDesc.Metadata[api.VM_METADATA_CGROUP_CPUSET]; ok { + s.manager.cpuSet.Lock.Lock() + s.manager.cpuSet.ReleaseCpus(cpus, int(srcDesc.Cpu)) + s.manager.cpuSet.Lock.Unlock() + + cpusetJson, err := jsonutils.ParseString(scpuset) + if err != nil { + log.Errorf("failed parse server %s cpuset %s: %s", s.Id, scpuset, err) + return errors.Errorf("failed parse server %s cpuset %s: %s", s.Id, scpuset, err) + } + input := new(api.ServerCPUSetInput) + err = cpusetJson.Unmarshal(input) + if err != nil { + log.Errorf("failed unmarshal server %s cpuset %s", s.Id, err) + return errors.Errorf("failed unmarshal server %s cpuset %s", s.Id, err) + } + cpus = input.CPUS + } + srcDesc.VcpuPin = []desc.SCpuPin{ { Vcpus: fmt.Sprintf("0-%d", srcDesc.Cpu-1), @@ -2855,6 +2874,10 @@ func (s *SKVMGuestInstance) allocGuestNumaCpuset() error { s.Desc.CpuNumaPin = cpuNumaPin } else if !s.manager.numaAllocate { if scpuset, ok := s.Desc.Metadata[api.VM_METADATA_CGROUP_CPUSET]; ok { + s.manager.cpuSet.Lock.Lock() + s.manager.cpuSet.ReleaseCpus(cpus, int(s.Desc.Cpu)) + s.manager.cpuSet.Lock.Unlock() + cpusetJson, err := jsonutils.ParseString(scpuset) if err != nil { log.Errorf("failed parse server %s cpuset %s: %s", s.Id, scpuset, err)