pc+pve0 qemu machine type - what does it mean ?

RolandK

Renowned Member
Mar 5, 2019
924
173
88
50
i have a question regarding pve qemu machine type

in process list (ps -ef), kvm / qemu-system-x86_64 binary is using :

"-machine type=pc+pve0"

when doing a query on the supportet machine types, pc+pve0 is not listed

what does pc+pve0 mean and/or where is it defined ?

from https://pve.proxmox.com/wiki/Qemu/KVM_Virtual_Machines

Machine Type​

"A VM’s Machine Type defines the hardware layout of the VM’s virtualmotherboard. You can choose between the defaultIntel 440FX or theQ35chipset, which also provides a virtual PCIe bus, and thus may bedesired if you want to pass through PCIe hardware."

Machine Version​

Each machine type is versioned in QEMU and a given QEMU binary supports manymachine versions. New versions might bring support for new features, fixes orgeneral improvements. However, they also change properties of the virtualhardware. To avoid sudden changes from the guest’s perspective and ensurecompatibility of the VM state, live-migration and snapshots with RAM will keepusing the same machine version in the new QEMU instance.
For Windows guests, the machine version is pinned during creation, becauseWindows is sensitive to changes in the virtual hardware - even between coldboots. For example, the enumeration of network devices might be different withdifferent machine versions. Other OSes like Linux can usually deal with suchchanges just fine. For those, the Latest machine version is used by default.This means that after a fresh start, the newest machine version supported by theQEMU binary is used (e.g. the newest machine version QEMU 8.1 supports isversion 8.1 for each machine type).



i'm asking because of https://gitlab.com/qemu-project/qemu/-/issues/2067#note_1749918571

# qemu-system-x86_64 -machine help
Supported machines are:
microvm microvm (i386)
pc Standard PC (i440FX + PIIX, 1996) (alias of pc-i440fx-7.2)
pc-i440fx-7.2 Standard PC (i440FX + PIIX, 1996) (default)
pc-i440fx-7.1 Standard PC (i440FX + PIIX, 1996)
pc-i440fx-7.0 Standard PC (i440FX + PIIX, 1996)
pc-i440fx-6.2 Standard PC (i440FX + PIIX, 1996)
pc-i440fx-6.1 Standard PC (i440FX + PIIX, 1996)
pc-i440fx-6.0 Standard PC (i440FX + PIIX, 1996)
pc-i440fx-5.2 Standard PC (i440FX + PIIX, 1996)
pc-i440fx-5.1 Standard PC (i440FX + PIIX, 1996)
pc-i440fx-5.0 Standard PC (i440FX + PIIX, 1996)
pc-i440fx-4.2 Standard PC (i440FX + PIIX, 1996)
pc-i440fx-4.1 Standard PC (i440FX + PIIX, 1996)
pc-i440fx-4.0 Standard PC (i440FX + PIIX, 1996)
pc-i440fx-3.1 Standard PC (i440FX + PIIX, 1996)
pc-i440fx-3.0 Standard PC (i440FX + PIIX, 1996)
pc-i440fx-2.9 Standard PC (i440FX + PIIX, 1996)
pc-i440fx-2.8 Standard PC (i440FX + PIIX, 1996)
pc-i440fx-2.7 Standard PC (i440FX + PIIX, 1996)
pc-i440fx-2.6 Standard PC (i440FX + PIIX, 1996)
pc-i440fx-2.5 Standard PC (i440FX + PIIX, 1996)
pc-i440fx-2.4 Standard PC (i440FX + PIIX, 1996)
pc-i440fx-2.3 Standard PC (i440FX + PIIX, 1996)
pc-i440fx-2.2 Standard PC (i440FX + PIIX, 1996)
pc-i440fx-2.12 Standard PC (i440FX + PIIX, 1996)
pc-i440fx-2.11 Standard PC (i440FX + PIIX, 1996)
pc-i440fx-2.10 Standard PC (i440FX + PIIX, 1996)
pc-i440fx-2.1 Standard PC (i440FX + PIIX, 1996)
pc-i440fx-2.0 Standard PC (i440FX + PIIX, 1996)
pc-i440fx-1.7 Standard PC (i440FX + PIIX, 1996) (deprecated)
pc-i440fx-1.6 Standard PC (i440FX + PIIX, 1996) (deprecated)
pc-i440fx-1.5 Standard PC (i440FX + PIIX, 1996) (deprecated)
pc-i440fx-1.4 Standard PC (i440FX + PIIX, 1996) (deprecated)
q35 Standard PC (Q35 + ICH9, 2009) (alias of pc-q35-7.2)
pc-q35-7.2 Standard PC (Q35 + ICH9, 2009)
pc-q35-7.1 Standard PC (Q35 + ICH9, 2009)
pc-q35-7.0 Standard PC (Q35 + ICH9, 2009)
pc-q35-6.2 Standard PC (Q35 + ICH9, 2009)
pc-q35-6.1 Standard PC (Q35 + ICH9, 2009)
pc-q35-6.0 Standard PC (Q35 + ICH9, 2009)
pc-q35-5.2 Standard PC (Q35 + ICH9, 2009)
pc-q35-5.1 Standard PC (Q35 + ICH9, 2009)
pc-q35-5.0 Standard PC (Q35 + ICH9, 2009)
pc-q35-4.2 Standard PC (Q35 + ICH9, 2009)
pc-q35-4.1 Standard PC (Q35 + ICH9, 2009)
pc-q35-4.0.1 Standard PC (Q35 + ICH9, 2009)
pc-q35-4.0 Standard PC (Q35 + ICH9, 2009)
pc-q35-3.1 Standard PC (Q35 + ICH9, 2009)
pc-q35-3.0 Standard PC (Q35 + ICH9, 2009)
pc-q35-2.9 Standard PC (Q35 + ICH9, 2009)
pc-q35-2.8 Standard PC (Q35 + ICH9, 2009)
pc-q35-2.7 Standard PC (Q35 + ICH9, 2009)
pc-q35-2.6 Standard PC (Q35 + ICH9, 2009)
pc-q35-2.5 Standard PC (Q35 + ICH9, 2009)
pc-q35-2.4 Standard PC (Q35 + ICH9, 2009)
pc-q35-2.12 Standard PC (Q35 + ICH9, 2009)
pc-q35-2.11 Standard PC (Q35 + ICH9, 2009)
pc-q35-2.10 Standard PC (Q35 + ICH9, 2009)
isapc ISA-only PC
none empty machine
x-remote Experimental remote machine
 
Last edited:
the '+pveX' is a custom patch in our qemu so that we have some more fine grained control over the versions should we need it, e.g. sometimes it's necessary for us to identify not only the qemu version, but we add a patch (for e.g. a bugfix) but need to be compatible with older running vesions

for example, imagine we implement a new feature in qemu, but qemu did not bump recently, so we either have to wait for a qemu bump to use that feature (since we cannot identify qemu version "x.y" without our new featrue vs with our new feature)
or we bump this to +pve1. then we can during runtime see that it has that feature for example

here is the code that adds this in our qemu : https://git.proxmox.com/?p=pve-qemu...01f1b1a17f9a2976a6669002;hb=refs/heads/master

EDIT: forgot to mention, for qemu itself this currently does nothing, it's only a marker for our management code to differentiate between multiple qemu versions without an upstream bump (AFAIR)

does that make sense for you?
 
  • Like
Reactions: RolandK
thank you,

trying to repeat this in my own words:

when proxmox code invokes qemu binary, qemu simply interprets the string before "+" ( here: "pc", which is pc-i440fx-7.2 on pve 7.4) and ignores the pve0 substring (+ used as divider), whereas proxmox server code interprets the latter ony and applies special handling to a VM, if necessary !?
 
qemu simply interprets the string before "+" ( here: "pc", which is pc-i440fx-7.2 on pve 7.4) and ignores the pve0 substring (+ used as divider),
yes
whereas proxmox server code interprets the latter ony and applies special handling to a VM, if necessary !?
not exactly, we still look at the versions to differentiate, e.g. when we can use new features. we just bump the '+pveX' designation if we need it and it does not coincide with a qemu version bump
 
when proxmox code invokes qemu binary, qemu simply interprets the string before "+" ( here: "pc", which is pc-i440fx-7.2 on pve 7.4) and ignores the pve0 substring (+ used as divider)
The suffix is passed along to QEMU, so in principle we could also change the virtual hardware configuration within QEMU based on the suffix, should that ever be necessary. But it's not done at the moment.
 
  • Like
Reactions: RolandK
Is this tweak to the virtual hardware config reachable via the API currently? And thus I could hack/update a Terraform provider to then also be able to specify microvms?
 
Is this tweak to the virtual hardware config reachable via the API currently? And thus I could hack/update a Terraform provider to then also be able to specify microvms?
the api call /nodes/<nodename>/qemu/<vmid>/status/current includes the 'running-machine' version for running vms that include the +pveX suffix
is that what you meant?
 

About

The Proxmox community has been around for many years and offers help and support for Proxmox VE, Proxmox Backup Server, and Proxmox Mail Gateway.
We think our community is one of the best thanks to people like you!

Get your subscription!

The Proxmox team works very hard to make sure you are running the best software and getting stable updates and security enhancements, as well as quick enterprise support. Tens of thousands of happy customers have a Proxmox subscription. Get yours easily in our online shop.

Buy now!