mirror of
https://github.com/kata-containers/kata-containers.git
synced 2025-04-30 04:34:27 +00:00
runtime: current vcpu number should be limited
The physical current vcpu number should not be used directly as the largest vcpu number is limited to defaultMaxQemuVCPUs. Here, a new helper is introduced in pkg/katautils/config.go to get current vcpu number. Fixes: #2809 Signed-off-by: Jianyong Wu <jianyong.wu@arm.com>
This commit is contained in:
parent
fa922517d9
commit
c59c36732b
@ -307,11 +307,24 @@ func (h hypervisor) GetEntropySource() string {
|
|||||||
return h.EntropySource
|
return h.EntropySource
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Current cpu number should not larger than defaultMaxVCPUs()
|
||||||
|
func getCurrentCpuNum() uint32 {
|
||||||
|
var cpu uint32
|
||||||
|
h := hypervisor{}
|
||||||
|
|
||||||
|
cpu = uint32(goruntime.NumCPU())
|
||||||
|
if cpu > h.defaultMaxVCPUs() {
|
||||||
|
cpu = h.defaultMaxVCPUs()
|
||||||
|
}
|
||||||
|
|
||||||
|
return cpu
|
||||||
|
}
|
||||||
|
|
||||||
func (h hypervisor) defaultVCPUs() uint32 {
|
func (h hypervisor) defaultVCPUs() uint32 {
|
||||||
numCPUs := goruntime.NumCPU()
|
numCPUs := getCurrentCpuNum()
|
||||||
|
|
||||||
if h.NumVCPUs < 0 || h.NumVCPUs > int32(numCPUs) {
|
if h.NumVCPUs < 0 || h.NumVCPUs > int32(numCPUs) {
|
||||||
return uint32(numCPUs)
|
return numCPUs
|
||||||
}
|
}
|
||||||
if h.NumVCPUs == 0 { // or unspecified
|
if h.NumVCPUs == 0 { // or unspecified
|
||||||
return defaultVCPUCount
|
return defaultVCPUCount
|
||||||
|
@ -14,7 +14,6 @@ import (
|
|||||||
"path"
|
"path"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"reflect"
|
"reflect"
|
||||||
goruntime "runtime"
|
|
||||||
"strings"
|
"strings"
|
||||||
"syscall"
|
"syscall"
|
||||||
"testing"
|
"testing"
|
||||||
@ -156,7 +155,7 @@ func createAllRuntimeConfigFiles(dir, hypervisor string) (config testRuntimeConf
|
|||||||
KernelParams: vc.DeserializeParams(strings.Fields(kernelParams)),
|
KernelParams: vc.DeserializeParams(strings.Fields(kernelParams)),
|
||||||
HypervisorMachineType: machineType,
|
HypervisorMachineType: machineType,
|
||||||
NumVCPUs: defaultVCPUCount,
|
NumVCPUs: defaultVCPUCount,
|
||||||
DefaultMaxVCPUs: uint32(goruntime.NumCPU()),
|
DefaultMaxVCPUs: getCurrentCpuNum(),
|
||||||
MemorySize: defaultMemSize,
|
MemorySize: defaultMemSize,
|
||||||
DisableBlockDeviceUse: disableBlockDevice,
|
DisableBlockDeviceUse: disableBlockDevice,
|
||||||
BlockDeviceDriver: defaultBlockDeviceDriver,
|
BlockDeviceDriver: defaultBlockDeviceDriver,
|
||||||
@ -919,13 +918,13 @@ func TestNewClhHypervisorConfig(t *testing.T) {
|
|||||||
func TestHypervisorDefaults(t *testing.T) {
|
func TestHypervisorDefaults(t *testing.T) {
|
||||||
assert := assert.New(t)
|
assert := assert.New(t)
|
||||||
|
|
||||||
numCPUs := goruntime.NumCPU()
|
numCPUs := getCurrentCpuNum()
|
||||||
|
|
||||||
h := hypervisor{}
|
h := hypervisor{}
|
||||||
|
|
||||||
assert.Equal(h.machineType(), defaultMachineType, "default hypervisor machine type wrong")
|
assert.Equal(h.machineType(), defaultMachineType, "default hypervisor machine type wrong")
|
||||||
assert.Equal(h.defaultVCPUs(), defaultVCPUCount, "default vCPU number is wrong")
|
assert.Equal(h.defaultVCPUs(), defaultVCPUCount, "default vCPU number is wrong")
|
||||||
assert.Equal(h.defaultMaxVCPUs(), uint32(numCPUs), "default max vCPU number is wrong")
|
assert.Equal(h.defaultMaxVCPUs(), numCPUs, "default max vCPU number is wrong")
|
||||||
assert.Equal(h.defaultMemSz(), defaultMemSize, "default memory size is wrong")
|
assert.Equal(h.defaultMemSz(), defaultMemSize, "default memory size is wrong")
|
||||||
|
|
||||||
machineType := "foo"
|
machineType := "foo"
|
||||||
@ -934,23 +933,23 @@ func TestHypervisorDefaults(t *testing.T) {
|
|||||||
|
|
||||||
// auto inferring
|
// auto inferring
|
||||||
h.NumVCPUs = -1
|
h.NumVCPUs = -1
|
||||||
assert.Equal(h.defaultVCPUs(), uint32(numCPUs), "default vCPU number is wrong")
|
assert.Equal(h.defaultVCPUs(), numCPUs, "default vCPU number is wrong")
|
||||||
|
|
||||||
h.NumVCPUs = 2
|
h.NumVCPUs = 2
|
||||||
assert.Equal(h.defaultVCPUs(), uint32(2), "default vCPU number is wrong")
|
assert.Equal(h.defaultVCPUs(), uint32(2), "default vCPU number is wrong")
|
||||||
|
|
||||||
h.NumVCPUs = int32(numCPUs) + 1
|
h.NumVCPUs = int32(numCPUs) + 1
|
||||||
assert.Equal(h.defaultVCPUs(), uint32(numCPUs), "default vCPU number is wrong")
|
assert.Equal(h.defaultVCPUs(), numCPUs, "default vCPU number is wrong")
|
||||||
|
|
||||||
h.DefaultMaxVCPUs = 2
|
h.DefaultMaxVCPUs = 2
|
||||||
assert.Equal(h.defaultMaxVCPUs(), uint32(2), "default max vCPU number is wrong")
|
assert.Equal(h.defaultMaxVCPUs(), uint32(2), "default max vCPU number is wrong")
|
||||||
|
|
||||||
h.DefaultMaxVCPUs = uint32(numCPUs) + 1
|
h.DefaultMaxVCPUs = numCPUs + 1
|
||||||
assert.Equal(h.defaultMaxVCPUs(), uint32(numCPUs), "default max vCPU number is wrong")
|
assert.Equal(h.defaultMaxVCPUs(), numCPUs, "default max vCPU number is wrong")
|
||||||
|
|
||||||
maxvcpus := vc.MaxQemuVCPUs()
|
maxvcpus := vc.MaxQemuVCPUs()
|
||||||
h.DefaultMaxVCPUs = maxvcpus + 1
|
h.DefaultMaxVCPUs = maxvcpus + 1
|
||||||
assert.Equal(h.defaultMaxVCPUs(), uint32(numCPUs), "default max vCPU number is wrong")
|
assert.Equal(h.defaultMaxVCPUs(), numCPUs, "default max vCPU number is wrong")
|
||||||
|
|
||||||
h.MemorySize = 1024
|
h.MemorySize = 1024
|
||||||
assert.Equal(h.defaultMemSz(), uint32(1024), "default memory size is wrong")
|
assert.Equal(h.defaultMemSz(), uint32(1024), "default memory size is wrong")
|
||||||
|
Loading…
Reference in New Issue
Block a user