docs: update virt/vm

This commit is contained in:
2025-06-02 17:41:20 +00:00
parent 4e4f03e498
commit 1942d3f70e

View File

@ -2,7 +2,7 @@
title: Machine definition
description: Virtual machine hardware
published: true
date: 2025-06-01T17:41:22.711Z
date: 2025-06-02T17:41:18.805Z
tags:
editor: markdown
dateCreated: 2025-06-01T17:37:29.262Z
@ -12,7 +12,29 @@ dateCreated: 2025-06-01T17:37:29.262Z
Libvirt uses XML files to define virtual machine hardware.
In the context of libvirt, a virtual machine or guest system is called a domain. In turn, a domain type refers to the hypervisor used for running the virtual machine.
In the context of libvirt, a virtual machine or guest system is called a domain.
A domain *type* refers to the hypervisor used for running the virtual machine.
- Truncated snippet of an imaginary virtual machine called *phyllome*:
```
<domain type='kvm'>
<name>phyllome</name>
<memory unit="GiB">1</memory>
<vcpu placement='static'>1</vcpu>
<os firmware="efi">
<devices>
<emulator>/usr/bin/qemu-system-x86_64</emulator>
<input type='keyboard' bus='virtio'>
</input>
</devices>
</domain>
```
One can identify the domain type, KVM, the machine name, *phyllome*, the allocated memory, 1 GiB, the vCPU allocation, 1vCPU, the firmware type, UEFI.
These elements are primarily managed by Linux and KVM, whereas the elements within the devices section are managed by QEMU. One can find the keyboard, for instance.
## Domain type
@ -24,8 +46,7 @@ At the moment, Phyllome OS focuses solely on hardware-assisted virtualization wi
</domain>
```
Not all QEMU commands are supported by Libvirt. To [pass QEMU commands](https://www.libvirt.org/drvqemu.html#pass-through-of-arbitrary-qemu-commands
), one need to use the following instead and add the QEMU command line at the end :
Not all QEMU commands are supported by Libvirt. To [pass QEMU commands](https://www.libvirt.org/drvqemu.html#pass-through-of-arbitrary-qemu-commands), one need to use the following instead and add the QEMU command line at the end :
```
<domain type='kvm' xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'>
@ -40,12 +61,46 @@ Not all QEMU commands are supported by Libvirt. To [pass QEMU commands](https://
</domain>
```
> If QEMU command lines are not immediately provided, it will automatically revert to simply `<domain type='kvm'>` upon writing changes to the domain
> If QEMU command lines are not immediately provided, it will automatically revert to simply `<domain type='kvm'>` when writing changes to the domain definition
{.is-info}
Under QEMU, the said domain definition translates to:
Under QEMU, the said domain definition translates simply to:
```
qemu-system-x86_64 -enable-kvm [...]
```
## Memory
There are many ways to allocate memory. For maximum performance, one could reserve memory to virtual machine in such a way that it may not be used by the host or any other virtual machine.
A sane default, which does not maximize performance, is the following:
```
<domain type='kvm'>
[...]
<memory unit="GiB">4</memory>
<currentMemory unit="GiB">1</currentMemory>
[...]
<devices>
<memballoon model="virtio-non-transitional"/>
</devices>
</domain>
```
Up to 4 GiB of memory is allocated to the virtual machine, with a minimum of 1 GiB.
A memballon device is defined, which can release memory to the host and other virtual machine in case it is not needed anymore.
```
<domain type='kvm'>
[...]
<memoryBacking>
<source type="memfd"/>
<access mode="shared"/>
</memoryBacking>
[...]
</domain>
```
What is also done is to mark the memory as shared memory, which is necessary for other features to work, like *virtiofs*.