diff --git a/virtcontainers/qemu.go b/virtcontainers/qemu.go index 882294ad39..262928e7ad 100644 --- a/virtcontainers/qemu.go +++ b/virtcontainers/qemu.go @@ -64,6 +64,9 @@ const qmpSocket = "qmp.sock" const defaultConsole = "console.sock" +var qemuMajorVersion int +var qemuMinorVersion int + // agnostic list of kernel parameters var defaultKernelParameters = []Param{ {"panic", "1"}, @@ -456,6 +459,8 @@ func (q *qemu) waitSandbox(timeout int) error { } q.qmpMonitorCh.qmp = qmp + qemuMajorVersion = ver.Major + qemuMinorVersion = ver.Minor q.Logger().WithFields(logrus.Fields{ "qmp-major-version": ver.Major, diff --git a/virtcontainers/qemu_ppc64le.go b/virtcontainers/qemu_ppc64le.go index 930cc3fe95..ba259389eb 100644 --- a/virtcontainers/qemu_ppc64le.go +++ b/virtcontainers/qemu_ppc64le.go @@ -12,6 +12,7 @@ import ( govmmQemu "github.com/intel/govmm/qemu" "github.com/kata-containers/runtime/virtcontainers/device/drivers" "github.com/kata-containers/runtime/virtcontainers/utils" + "github.com/sirupsen/logrus" ) type qemuPPC64le struct { @@ -54,6 +55,11 @@ var supportedQemuMachines = []govmmQemu.Machine{ }, } +// Logger returns a logrus logger appropriate for logging qemu messages +func (q *qemuPPC64le) Logger() *logrus.Entry { + return virtLog.WithField("subsystem", "qemu") +} + // MaxQemuVCPUs returns the maximum number of vCPUs supported func MaxQemuVCPUs() uint32 { return uint32(128) @@ -105,12 +111,14 @@ func (q *qemuPPC64le) cpuModel() string { func (q *qemuPPC64le) memoryTopology(memoryMb, hostMemoryMb uint64) govmmQemu.Memory { - if hostMemoryMb > defaultMemMaxPPC64le { - hostMemoryMb = defaultMemMaxPPC64le - } else { - // align hostMemoryMb to 256MB multiples + if qemuMajorVersion >= 2 && qemuMinorVersion >= 10 { + q.Logger().Debug("Aligning maxmem to multiples of 256MB. Assumption: Kernel Version >= 4.11") hostMemoryMb -= (hostMemoryMb % 256) + } else { + q.Logger().Debug("Restricting maxmem to 32GB as Qemu Version < 2.10, Assumption: Kernel Version >= 4.11") + hostMemoryMb = defaultMemMaxPPC64le } + return genericMemoryTopology(memoryMb, hostMemoryMb) }