diff --git a/examples/default.yaml b/examples/default.yaml index a5cd3719e249..62565ff054d2 100644 --- a/examples/default.yaml +++ b/examples/default.yaml @@ -227,7 +227,7 @@ containerd: cpuType: # 🟢 Builtin default: "cortex-a72" (or "host" when running on aarch64 host) aarch64: null - # 🟢 Builtin default: "qemu64" (or "host" when running on x86_64 host) + # 🟢 Builtin default: "qemu64" (or "host,-pdpe1gb" when running on x86_64 host) x86_64: null rosetta: diff --git a/pkg/limayaml/defaults.go b/pkg/limayaml/defaults.go index 95bb5136751a..9852c0cd01bc 100644 --- a/pkg/limayaml/defaults.go +++ b/pkg/limayaml/defaults.go @@ -120,6 +120,15 @@ func FillDefault(y, d, o *LimaYAML, filePath string) { cpuType[arch] = "max" } } + if arch == X8664 && runtime.GOOS == "darwin" { + switch cpuType[arch] { + case "host", "max": + // Disable pdpe1gb on Intel Mac + // https://github.com/lima-vm/lima/issues/1485 + // https://stackoverflow.com/a/72863744/5167443 + cpuType[arch] += ",-pdpe1gb" + } + } } var overrideCPUType bool for k, v := range d.CPUType { diff --git a/pkg/limayaml/defaults_test.go b/pkg/limayaml/defaults_test.go index 85f9592155ce..67f7a0a64461 100644 --- a/pkg/limayaml/defaults_test.go +++ b/pkg/limayaml/defaults_test.go @@ -98,6 +98,12 @@ func TestFillDefault(t *testing.T) { } else if HasMaxCPU() { builtin.CPUType[arch] = "max" } + if arch == X8664 && runtime.GOOS == "darwin" { + switch builtin.CPUType[arch] { + case "host", "max": + builtin.CPUType[arch] += ",-pdpe1gb" + } + } } defaultPortForward := PortForward{ diff --git a/pkg/qemu/qemu.go b/pkg/qemu/qemu.go index 81a42de84dc2..182d2ce58595 100644 --- a/pkg/qemu/qemu.go +++ b/pkg/qemu/qemu.go @@ -356,7 +356,16 @@ func Cmdline(cfg Config) (string, []string, error) { // CPU cpu := y.CPUType[*y.Arch] + if runtime.GOOS == "darwin" && runtime.GOARCH == "amd64" { + switch { + case strings.HasPrefix(cpu, "host"), strings.HasPrefix(cpu, "max"): + if !strings.Contains(cpu, ",-pdpe1gb") { + logrus.Warnf("On Intel Mac, CPU type %q typically needs \",-pdpe1gb\" option (https://stackoverflow.com/a/72863744/5167443)", cpu) + } + } + } args = appendArgsIfNoConflict(args, "-cpu", cpu) + switch *y.Arch { case limayaml.X8664: if strings.HasPrefix(cpu, "qemu64") && runtime.GOOS != "windows" {