return parse_bytes(value)
+def config_parse_number(value: Optional[str], old: Optional[int] = None) -> Optional[int]:
+ if not value:
+ return None
+
+ try:
+ return int(value)
+ except ValueError:
+ die(f"{value!r} is not a valid number")
+
+
def config_parse_profile(value: Optional[str], old: Optional[int] = None) -> Optional[str]:
if not value:
return None
# QEMU-specific options
qemu_gui: bool
- qemu_smp: str
- qemu_mem: str
+ qemu_smp: int
+ qemu_mem: int
qemu_kvm: ConfigFeature
qemu_vsock: ConfigFeature
qemu_vsock_cid: int
dest="qemu_smp",
metavar="SMP",
section="Host",
- default="1",
+ parse=config_parse_number,
+ default=1,
help="Configure guest's SMP settings",
),
ConfigSetting(
dest="qemu_mem",
metavar="MEM",
section="Host",
- default="2G",
+ parse=config_parse_bytes,
+ default=parse_bytes("2G"),
help="Configure guest's RAM size",
),
ConfigSetting(
# A shared memory backend might increase ram usage so only add one if actually necessary for virtiofsd.
shm = []
if config.runtime_trees or config.output_format == OutputFormat.directory:
- shm = ["-object", f"memory-backend-memfd,id=mem,size={config.qemu_mem},share=on"]
+ shm = ["-object", f"memory-backend-memfd,id=mem,size={config.qemu_mem // 1024**2}M,share=on"]
machine = f"type={config.architecture.default_qemu_machine()}"
if firmware.is_uefi() and config.architecture.supports_smm():
cmdline: list[PathString] = [
find_qemu_binary(config),
"-machine", machine,
- "-smp", config.qemu_smp,
- "-m", config.qemu_mem,
+ "-smp", str(config.qemu_smp),
+ "-m", f"{config.qemu_mem // 1024**2}M",
"-object", "rng-random,filename=/dev/urandom,id=rng0",
"-device", "virtio-rng-pci,rng=rng0,id=rng-device0",
*shm,
cmdline: list[PathString] = [
"systemd-vmspawn",
- "--cpus", config.qemu_smp,
- "--ram", config.qemu_mem,
+ "--cpus", str(config.qemu_smp),
+ "--ram", str(config.qemu_mem),
"--kvm", config.qemu_kvm.to_tristate(),
"--vsock", config.qemu_vsock.to_tristate(),
"--tpm", config.qemu_swtpm.to_tristate(),
"QemuGui": true,
"QemuKernel": null,
"QemuKvm": "auto",
- "QemuMem": "",
- "QemuSmp": "yes",
+ "QemuMem": 123,
+ "QemuSmp": 2,
"QemuSwtpm": "auto",
"QemuVsock": "enabled",
"QemuVsockConnectionId": -2,
qemu_gui = True,
qemu_kernel = None,
qemu_kvm = ConfigFeature.auto,
- qemu_mem = "",
- qemu_smp = "yes",
+ qemu_mem = 123,
+ qemu_smp = 2,
qemu_swtpm = ConfigFeature.auto,
qemu_vsock = ConfigFeature.enabled,
qemu_vsock_cid = QemuVsockCID.hash,