From 4ccf115bb2c9186aab364e5fd52e9a52db810731 Mon Sep 17 00:00:00 2001 From: Jian Qiu Date: Tue, 16 Aug 2022 19:03:56 +0800 Subject: [PATCH] fix: allow start vm on raspberry pi 4 (#14762) Co-authored-by: Qiu Jian --- pkg/hostman/guestfs/fsdriver/drivers.go | 3 ++- pkg/hostman/guestman/qemu/qemu.go | 19 ++++++++++++++++--- pkg/hostman/options/options.go | 2 ++ 3 files changed, 20 insertions(+), 4 deletions(-) diff --git a/pkg/hostman/guestfs/fsdriver/drivers.go b/pkg/hostman/guestfs/fsdriver/drivers.go index 573b409b3f..7039afac5e 100644 --- a/pkg/hostman/guestfs/fsdriver/drivers.go +++ b/pkg/hostman/guestfs/fsdriver/drivers.go @@ -43,9 +43,10 @@ func Init(initPrivatePrefixes []string, cloudrootDir string) error { linuxFsDrivers := []newRootFsDriverFunc{ NewFangdeRootFs, NewUnionOSRootFs, - NewAnolisRootFs, NewGalaxyKylinRootFs, NewRhelRootFs, + NewAnolisRootFs, NewGalaxyKylinRootFs, NewFangdeDeskRootfs, NewUKylinRootfs, NewCentosRootFs, NewFedoraRootFs, + NewRhelRootFs, NewDebianRootFs, NewCirrosRootFs, NewCirrosNewRootFs, NewUbuntuRootFs, NewGentooRootFs, NewArchLinuxRootFs, NewOpenWrtRootFs, NewCoreOsRootFs, NewOpenEulerRootFs, diff --git a/pkg/hostman/guestman/qemu/qemu.go b/pkg/hostman/guestman/qemu/qemu.go index 4e262f7c79..465b373f04 100644 --- a/pkg/hostman/guestman/qemu/qemu.go +++ b/pkg/hostman/guestman/qemu/qemu.go @@ -24,6 +24,7 @@ import ( "yunion.io/x/pkg/errors" "yunion.io/x/onecloud/pkg/apis/compute" + "yunion.io/x/onecloud/pkg/hostman/options" "yunion.io/x/onecloud/pkg/util/fileutils2" "yunion.io/x/onecloud/pkg/util/procutils" ) @@ -422,7 +423,13 @@ func (o baseOptions_x86_64) Machine(mType string, accel string) string { } func (o baseOptions_x86_64) SMP(cpus uint) string { - return fmt.Sprintf("-smp cpus=%d,sockets=2,cores=64,maxcpus=128", cpus) + maxCpus := options.HostOptions.MaxHotplugVCpuCount + if maxCpus == 0 { + maxCpus = 128 + } + sockets := 2 + cores := maxCpus / sockets + return fmt.Sprintf("-smp cpus=%d,sockets=%d,cores=%d,maxcpus=%d", cpus, sockets, cores, maxCpus) } func (o baseOptions_x86_64) Memory(sizeMB uint64) string { @@ -511,7 +518,7 @@ func (o baseOptions_aarch64) Machine(mType string, accel string) string { if mType == "" || mType == compute.VM_MACHINE_TYPE_PC || mType == compute.VM_MACHINE_TYPE_Q35 { mType = "virt" } - return fmt.Sprintf("-machine %s,accel=%s,gic-version=3", mType, accel) + return fmt.Sprintf("-machine %s,accel=%s,gic-version=max", mType, accel) } func (o baseOptions_aarch64) NoKVMPitReinjection() string { @@ -525,7 +532,13 @@ func (o baseOptions_aarch64) Global() string { func (o baseOptions_aarch64) SMP(cpus uint) string { // warning: Number of hotpluggable cpus requested (128) // exceeds the recommended cpus supported by KVM (32) - return fmt.Sprintf("-smp cpus=%d,sockets=2,cores=32,maxcpus=64", cpus) + maxCpus := options.HostOptions.MaxHotplugVCpuCount + if maxCpus == 0 { + maxCpus = 64 + } + sockets := 2 + cores := maxCpus / sockets + return fmt.Sprintf("-smp cpus=%d,sockets=%d,cores=%d,maxcpus=%d", cpus, sockets, cores, maxCpus) } func (o baseOptions_aarch64) Memory(sizeMB uint64) string { diff --git a/pkg/hostman/options/options.go b/pkg/hostman/options/options.go index a9ffcb6346..c6bd0dd039 100644 --- a/pkg/hostman/options/options.go +++ b/pkg/hostman/options/options.go @@ -184,6 +184,8 @@ type SHostOptions struct { LocalBackupTempPath string `help:"the local temporary directory for backup" default:"/opt/cloud/workspace/run/backups"` BinaryMemcleanPath string `help:"execute binary memclean path" default:"/opt/yunion/bin/memclean"` + + MaxHotplugVCpuCount int `help:"maximal possible vCPU count that the platform kvm supports"` } var (