mirror of
https://github.com/yunionio/cloudpods.git
synced 2026-09-21 14:19:49 +08:00
feat(region): add server-cpuset-cores cmd to get pinned and usable cores (#13548)
This commit is contained in:
@@ -112,6 +112,8 @@ func init() {
|
||||
cmd.Get("make-sshable-cmd", new(options.ServerIdOptions))
|
||||
cmd.Get("change-owner-candidate-domains", new(options.ServerChangeOwnerCandidateDomainsOptions))
|
||||
cmd.Get("change-owner-candidate-domains", new(options.ServerChangeOwnerCandidateDomainsOptions))
|
||||
cmd.Get("cpuset-cores", new(options.ServerIdOptions))
|
||||
|
||||
cmd.GetProperty(&options.ServerStatusStatisticsOptions{})
|
||||
cmd.GetProperty(&options.ServerProjectStatisticsOptions{})
|
||||
cmd.GetProperty(&options.ServerDomainStatisticsOptions{})
|
||||
|
||||
@@ -811,3 +811,10 @@ type ServerCPUSetRemoveResp struct {
|
||||
Done bool `json:"done"`
|
||||
Error string `json:"error"`
|
||||
}
|
||||
|
||||
type ServerGetCPUSetCoresInput struct{}
|
||||
|
||||
type ServerGetCPUSetCoresResp struct {
|
||||
PinnedCores []int `json:"pinned_cores"`
|
||||
HostCores []int `json:"host_cores"`
|
||||
}
|
||||
|
||||
@@ -5348,7 +5348,7 @@ func (self *SGuest) PerformProbeIsolatedDevices(ctx context.Context, userCred mc
|
||||
return jsonutils.Marshal(devs), nil
|
||||
}
|
||||
|
||||
func (self *SGuest) PerformCpuset(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, data *api.ServerCPUSetInput) (jsonutils.JSONObject, error) {
|
||||
func (self *SGuest) getHostLogicalCores() ([]int, error) {
|
||||
host, err := self.GetHost()
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "get host model")
|
||||
@@ -5370,6 +5370,14 @@ func (self *SGuest) PerformCpuset(ctx context.Context, userCred mcclient.TokenCr
|
||||
allCores = append(allCores, cores.LogicalProcessors...)
|
||||
}
|
||||
}
|
||||
return allCores, nil
|
||||
}
|
||||
|
||||
func (self *SGuest) PerformCpuset(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, data *api.ServerCPUSetInput) (jsonutils.JSONObject, error) {
|
||||
allCores, err := self.getHostLogicalCores()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if !sets.NewInt(allCores...).HasAll(data.CPUS...) {
|
||||
return nil, httperrors.NewInputParameterError("Host cores %v not contains input %v", allCores, data.CPUS)
|
||||
@@ -5413,3 +5421,27 @@ func (self *SGuest) PerformCpusetRemove(ctx context.Context, userCred mcclient.T
|
||||
}
|
||||
return resp, nil
|
||||
}
|
||||
|
||||
func (self *SGuest) GetDetailsCpusetCores(ctx context.Context, userCred mcclient.TokenCredential, input *api.ServerGetCPUSetCoresInput) (*api.ServerGetCPUSetCoresResp, error) {
|
||||
allCores, err := self.getHostLogicalCores()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
resp := &api.ServerGetCPUSetCoresResp{
|
||||
HostCores: allCores,
|
||||
}
|
||||
|
||||
// fetch cpuset pinned
|
||||
obj := self.GetMetadataJson(ctx, api.VM_METADATA_CGROUP_CPUSET, userCred)
|
||||
if obj != nil {
|
||||
pinnedInput := new(api.ServerCPUSetInput)
|
||||
if err := obj.Unmarshal(pinnedInput); err != nil {
|
||||
log.Errorf("Unmarshal %q to ServerCPUSetInput: %v", obj, err)
|
||||
} else {
|
||||
resp.PinnedCores = pinnedInput.CPUS
|
||||
}
|
||||
}
|
||||
|
||||
return resp, nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user