Actions
Bug #3295
openAdapt devel/libvirt for nvmm
Description
With the recent addition of nvmm, it would be interesting to have something that eases the VM lifecycle, like devel/libvirt . This is a feature request to myself to, at least try to, make devel/libvirt usable with nvmm under DragonFly.
Files
Updated by tuxillo about 4 years ago
- Status changed from New to In Progress
- Added support for a new QMP command 'query-nvmm', based on the already existing 'query-kvm' command.
- This allows libvirt to communicate with the VM and see if the accel method is supported and enabled.
- DeltaPorts commit: https://github.com/DragonFlyBSD/DeltaPorts/commit/8a2cf8882
Test:
- In one terminal:
$ qemu-system-x86_64 -display curses -accel nvmm -chardev socket,id=qmp,port=4444,host=localhost,server=on -mon chardev=qmp,mode=control,pretty=on
- In another:
$ telnet localhost 4444
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
{
"QMP": {
"version": {
"qemu": {
"micro": 0,
"minor": 0,
"major": 6
},
"package": ""
},
"capabilities": [
"oob"
]
}
}
{ "execute": "qmp_capabilities" }
{
"return": {
}
}
{ "execute": "query-nvmm" }
{
"return": {
"enabled": true,
"present": true
}
}
{ "execute": "quit" }
{
"return": {
}
}
{
"timestamp": {
"seconds": 1632586250,
"microseconds": 956109
},
"event": "SHUTDOWN",
"data": {
"guest": false,
"reason": "host-qmp-quit"
}
}
Updated by tuxillo about 4 years ago
- File libvirt01.png libvirt01.png added
- % Done changed from 0 to 70
- Preliminary work done, you can run VMs with libvirt and nvmm accelerated!
- It's work in progress, expect unstability
devbox# virsh list Id Name State ------------------------------------ 2 ubuntu1804_default running devbox# nvmmctl list Machine ID VCPUs RAM Owner PID Creation Time ---------- ----- ---- --------- ------------------------ 0 2 2.0G 199725 Thu Sep 30 01:55:03 2021
- virt-manager example:

Updated by tuxillo about 4 years ago
- Submitted two ports to FreeBSD required to support vagrant + libvirt for them (and us).
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=258866
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=258867
Updated by tuxillo about 4 years ago
Added the following commits to move towards the goal of being able to use vagrant with qemu/nvmm:
Updated by tuxillo about 4 years ago
Testing vagrant¶
The Vagrantfile needs this:
config.vm.provider :libvirt do |libvirt|
libvirt.driver = "nvmm"
end
Once done, testing a Debian image:
devbox:~/temp/vagrant/debian11$ vagrant up
Bringing machine 'default' up with 'libvirt' provider...
==> default: Checking if box 'generic/debian11' version '3.4.2' is up to date...
==> default: Creating image (snapshot of base box volume).
==> default: Creating domain with the following settings...
==> default: -- Name: debian11_default
==> default: -- Description: Source: /home/antonioh/temp/vagrant/debian11/Vagrantfile
==> default: -- Domain type: nvmm
==> default: -- Cpus: 2
==> default: -- Feature: acpi
==> default: -- Feature: apic
==> default: -- Feature: pae
==> default: -- Clock offset: utc
==> default: -- Memory: 2048M
==> default: -- Management MAC:
==> default: -- Loader:
==> default: -- Nvram:
==> default: -- Base box: generic/debian11
==> default: -- Storage pool: default
==> default: -- Image(): /var/lib/libvirt/images/debian11_default.img, 128G
==> default: -- Disk driver opts: cache='default'
==> default: -- Kernel:
==> default: -- Initrd:
==> default: -- Graphics Type: vnc
==> default: -- Graphics Port: -1
==> default: -- Graphics IP: 127.0.0.1
==> default: -- Graphics Password: Not defined
==> default: -- Video Type: cirrus
==> default: -- Video VRAM: 256
==> default: -- Sound Type:
==> default: -- Keymap: en-us
==> default: -- TPM Backend: passthrough
==> default: -- TPM Path:
==> default: -- INPUT: type=mouse, bus=ps2
==> default: Creating shared folders metadata...
==> default: Starting domain.
==> default: Waiting for domain to get an IP address...
==> default: Waiting for machine to boot. This may take a few minutes...
default: SSH address: 192.168.121.100:22
default: SSH username: vagrant
default: SSH auth method: private key
default:
default: Vagrant insecure key detected. Vagrant will automatically replace
default: this with a newly generated keypair for better security.
default:
default: Inserting generated public key within guest...
default: Removing insecure key from the guest if it's present...
default: Key inserted! Disconnecting and reconnecting using new SSH key...
==> default: Machine booted and ready!
devbox:~/temp/vagrant/debian11$ vagrant ssh
vagrant@debian11:~$ uname -a
Linux debian11.localdomain 5.10.0-8-amd64 #1 SMP Debian 5.10.46-4 (2021-08-03) x86_64 GNU/Linux
vagrant@debian11:~$
logout
Connection to 192.168.121.100 closed.
devbox:~/temp/vagrant/debian11$ sudo nvmmctl list
Machine ID VCPUs RAM Owner PID Creation Time
---------- ----- ---- --------- ------------------------
0 2 2.0G 527838 Sun Oct 3 18:53:12 2021
Updated by tuxillo almost 4 years ago
TODO: Tap devices are not closed (destroyed) when the VM is stopped.
Actions