From 823ea12bc25a99caa5fbcffccb402aad3ad404dc Mon Sep 17 00:00:00 2001 From: Sharif Elgamal Date: Mon, 16 May 2022 23:12:39 -0700 Subject: [PATCH 1/4] let's try kvm accel again --- pkg/drivers/qemu/qemu.go | 11 ++--------- pkg/minikube/registry/drvs/qemu2/qemu2.go | 20 +++++++++++++++----- 2 files changed, 17 insertions(+), 14 deletions(-) diff --git a/pkg/drivers/qemu/qemu.go b/pkg/drivers/qemu/qemu.go index c974e30416..2a88e0782f 100644 --- a/pkg/drivers/qemu/qemu.go +++ b/pkg/drivers/qemu/qemu.go @@ -380,10 +380,10 @@ func (d *Driver) Start() error { } // hardware acceleration is important, it increases performance by 10x - // kvm acceleration doesn't currently work for linux, it's incompatible with our chosen CPU - // once that's fixed we should add a branch for linux if runtime.GOOS == "darwin" { startCmd = append(startCmd, "-accel", "hvf") + } else if runtime.GOOS == "linux" { + startCmd = append(startCmd, "-accel", "kvm") } startCmd = append(startCmd, @@ -425,13 +425,6 @@ func (d *Driver) Start() error { startCmd = append(startCmd, "-daemonize") - // other options - // "-enable-kvm" if its available - // TODO (#14171): re-enable this once kvm acceleration is fixed - /*if _, err := os.Stat("/dev/kvm"); err == nil { - startCmd = append(startCmd, "-enable-kvm") - }*/ - if d.CloudConfigRoot != "" { startCmd = append(startCmd, "-fsdev", diff --git a/pkg/minikube/registry/drvs/qemu2/qemu2.go b/pkg/minikube/registry/drvs/qemu2/qemu2.go index aa721cae35..21ce1748d0 100644 --- a/pkg/minikube/registry/drvs/qemu2/qemu2.go +++ b/pkg/minikube/registry/drvs/qemu2/qemu2.go @@ -68,11 +68,16 @@ func qemuFirmwarePath() (string, error) { arch := runtime.GOARCH // For macOS, find the correct brew installation path for qemu firmware if runtime.GOOS == "darwin" { - p := "/usr/local/Cellar/qemu" - fw := "share/qemu/edk2-x86_64-code.fd" - if arch == "arm64" { + var p, fw string + switch arch { + case "amd64": + p = "/usr/local/Cellar/qemu" + fw = "share/qemu/edk2-x86_64-code.fd" + case "arm64": p = "/opt/homebrew/Cellar/qemu" fw = "share/qemu/edk2-aarch64-code.fd" + default: + return "", fmt.Errorf("unknown arch: %s", arch) } v, err := ioutil.ReadDir(p) @@ -109,8 +114,13 @@ func configure(cc config.ClusterConfig, n config.Node) (interface{}, error) { qemuMachine = "" // default qemuCPU = "" // default case "arm64": - qemuMachine = "virt" - qemuCPU = "cortex-a72" + if runtime.GOOS == "darwin" { + qemuMachine = "virt" + qemuCPU = "cortex-a72" + } else if runtime.GOOS == "linux" { + qemuMachine = "gic-version=3" + qemuCPU = "host" + } default: return nil, fmt.Errorf("unknown arch: %s", runtime.GOARCH) } From 41150243208cd7a82360d8ec3abf791cc6229098 Mon Sep 17 00:00:00 2001 From: Sharif Elgamal Date: Mon, 16 May 2022 23:21:11 -0700 Subject: [PATCH 2/4] virt is still the machine type, duh --- pkg/drivers/qemu/qemu.go | 4 ---- pkg/minikube/registry/drvs/qemu2/qemu2.go | 5 +++-- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/pkg/drivers/qemu/qemu.go b/pkg/drivers/qemu/qemu.go index 2a88e0782f..a444290af9 100644 --- a/pkg/drivers/qemu/qemu.go +++ b/pkg/drivers/qemu/qemu.go @@ -337,10 +337,6 @@ func (d *Driver) Start() error { if d.MachineType != "" { machineType := d.MachineType - if runtime.GOOS == "darwin" { - // highmem=off needed, see https://patchwork.kernel.org/project/qemu-devel/patch/20201126215017.41156-9-agraf@csgraf.de/#23800615 for details - machineType += ",highmem=off" - } startCmd = append(startCmd, "-M", machineType, ) diff --git a/pkg/minikube/registry/drvs/qemu2/qemu2.go b/pkg/minikube/registry/drvs/qemu2/qemu2.go index 21ce1748d0..ed0cb55720 100644 --- a/pkg/minikube/registry/drvs/qemu2/qemu2.go +++ b/pkg/minikube/registry/drvs/qemu2/qemu2.go @@ -114,11 +114,12 @@ func configure(cc config.ClusterConfig, n config.Node) (interface{}, error) { qemuMachine = "" // default qemuCPU = "" // default case "arm64": + // highmem=off needed, see https://patchwork.kernel.org/project/qemu-devel/patch/20201126215017.41156-9-agraf@csgraf.de/#23800615 for details if runtime.GOOS == "darwin" { - qemuMachine = "virt" + qemuMachine = "virt,highmem=off" qemuCPU = "cortex-a72" } else if runtime.GOOS == "linux" { - qemuMachine = "gic-version=3" + qemuMachine = "virt,gic-version=3" qemuCPU = "host" } default: From 177d2b98088cd44dc7c832539ff008b8ab279329 Mon Sep 17 00:00:00 2001 From: Sharif Elgamal Date: Tue, 17 May 2022 10:13:47 -0700 Subject: [PATCH 3/4] sanity check port range --- pkg/drivers/qemu/qemu.go | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/pkg/drivers/qemu/qemu.go b/pkg/drivers/qemu/qemu.go index a444290af9..b5e758c76d 100644 --- a/pkg/drivers/qemu/qemu.go +++ b/pkg/drivers/qemu/qemu.go @@ -270,6 +270,10 @@ func parsePortRange(rawPortRange string) (int, int, error) { portRange := strings.Split(rawPortRange, "-") + if len(portRange) < 2 { + return 0, 0, errors.New("Invalid port range, must be at least of length 2") + } + minPort, err := strconv.Atoi(portRange[0]) if err != nil { return 0, 0, errors.Wrap(err, "Invalid port range") @@ -378,7 +382,7 @@ func (d *Driver) Start() error { // hardware acceleration is important, it increases performance by 10x if runtime.GOOS == "darwin" { startCmd = append(startCmd, "-accel", "hvf") - } else if runtime.GOOS == "linux" { + } else if _, err := os.Stat("/dev/kvm"); err == nil && runtime.GOOS == "linux" { startCmd = append(startCmd, "-accel", "kvm") } From c9c8b3105f32e77776b839bbe4b1940eeb3fe449 Mon Sep 17 00:00:00 2001 From: Sharif Elgamal Date: Tue, 17 May 2022 10:49:30 -0700 Subject: [PATCH 4/4] only set cpu to host if kvm is present --- pkg/minikube/registry/drvs/qemu2/qemu2.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/pkg/minikube/registry/drvs/qemu2/qemu2.go b/pkg/minikube/registry/drvs/qemu2/qemu2.go index ed0cb55720..5cd70e58f1 100644 --- a/pkg/minikube/registry/drvs/qemu2/qemu2.go +++ b/pkg/minikube/registry/drvs/qemu2/qemu2.go @@ -114,11 +114,12 @@ func configure(cc config.ClusterConfig, n config.Node) (interface{}, error) { qemuMachine = "" // default qemuCPU = "" // default case "arm64": + qemuMachine = "virt" + qemuCPU = "cortex-a72" // highmem=off needed, see https://patchwork.kernel.org/project/qemu-devel/patch/20201126215017.41156-9-agraf@csgraf.de/#23800615 for details if runtime.GOOS == "darwin" { qemuMachine = "virt,highmem=off" - qemuCPU = "cortex-a72" - } else if runtime.GOOS == "linux" { + } else if _, err := os.Stat("/dev/kvm"); err == nil { qemuMachine = "virt,gic-version=3" qemuCPU = "host" }