You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
150 lines
4.5 KiB
Markdown
150 lines
4.5 KiB
Markdown
# vore
|
|
|
|
> VFIO Orientated Emulation (_definitely_)
|
|
|
|
## What is vore?
|
|
|
|
`vore` is a virtual machine management tool focused on VFIO set ups. with a minimal TOML file you should be able to get
|
|
you should be able to create a VFIO-focused VM.
|
|
|
|
It features close integration for this use cases, for example automatic configuration of Looking Glass.
|
|
|
|
## How it works
|
|
|
|
`vore` loads a TOML file, sends it to the `vored` daemon, which processes it and auto completes required information,
|
|
and then passes it to a Lua script. this Lua script builds up the qemu command, which then gets started and managed
|
|
by `vored`.
|
|
|
|
`vored` also allows you to save definitions, and `reserve` vfio devices, so that they are claimed at system start up.
|
|
|
|
## Requirements
|
|
|
|
Building:
|
|
|
|
- Rust
|
|
- Lua 5.4 (including headers)
|
|
|
|
Runtime:
|
|
|
|
- Lua 5.4
|
|
|
|
## VM Definition
|
|
|
|
This is a annotated VM definition with about every option displayed
|
|
|
|
```toml
|
|
[machine]
|
|
# Name of the VM, this will be the name used internally and externally for the vm
|
|
name = "win10"
|
|
# Amount of memory for the virtual machine
|
|
memory = "12G"
|
|
# Shorthand for <feature>.enabled = true
|
|
features = [
|
|
"uefi",
|
|
"spice",
|
|
"pulse",
|
|
"looking-glass"
|
|
]
|
|
# If vore should automatically start this VM when the daemon starts
|
|
#auto-start = false
|
|
|
|
[cpu]
|
|
# Amount of vCPU's should be given to the
|
|
amount = 12
|
|
# If any of the following are given, vore will automatically calculate
|
|
# the amount of vCPU's, however if both are given, vore will verify it's correctness
|
|
# Amount of threads ever core has
|
|
# If amount is even or not set, this is set to 2, if odd, it's set to 1
|
|
#threads = 2
|
|
# Amount of cores on this die
|
|
# If amount is even, this is set to amount/2, if odd it's set to amount
|
|
# If amount is not set this is 2
|
|
#cores = 6
|
|
# Amount of dies per socket, defaults to 1
|
|
#dies = 1
|
|
# Amount of sockets, defaults to 1
|
|
#sockets = 1
|
|
|
|
# You can add multiple disks by adding more `[[disk]]` entries
|
|
[[disk]]
|
|
# Preset used for this disk, defined in qemu.lua,
|
|
# run `vore disk preset` to list all available presets
|
|
preset = "nvme"
|
|
# Path to disk file
|
|
path = "/dev/disk/by-id/nvme-eui.6479a74530201073"
|
|
# Type of disk file, will be automatically set,
|
|
# but vore will tell you if it can't figure it out
|
|
#disk_type = "raw"
|
|
|
|
[[vfio]]
|
|
# If when this VM is saved, vored should try to automatically
|
|
# bind it to the vfio-pci driver
|
|
reserve = true
|
|
# vendor, device and index (0-indexed!) can be used to select a certain card
|
|
# this will grab the second GTX 1080 in the system
|
|
vendor = 0x10de
|
|
device = 0x1b80
|
|
index = 1
|
|
# you can also instead set addr directly
|
|
# -however- if you set both vore will check if both match and error out if not
|
|
# this can be helpful when passing through system devices,
|
|
# which may move after insertion of e.g. nvme drive
|
|
addr = "0b:00.3"
|
|
|
|
# if this device is a graphics card
|
|
# it'll both set x-vga, and disable QEMU's virtual GPU
|
|
graphics = true
|
|
|
|
# if this device is multifunctional
|
|
#multifunction = false
|
|
|
|
[pulse]
|
|
# If a pulseaudio backed audio device should be created
|
|
# using the features shorthand is preferred
|
|
#enabled = true
|
|
# Path to PulseAudio native socket
|
|
# if not specified vore will automatically resolve it
|
|
#socket-path = ""
|
|
# To which user's PulseAudio session it should connect
|
|
# Can be prefixed with # to set an id
|
|
# Default is #1000, which is the common default user id
|
|
#user = "#1000"
|
|
|
|
[spice]
|
|
# if spice support should be enabled
|
|
# using the features shorthand is preferred
|
|
#enabled = true
|
|
# on which path the SPICE socket should listen
|
|
# If not set vore will use /var/lib/vore/instance/<name>/spice.sock
|
|
#socket-path = "/run/spicy.sock"
|
|
|
|
[looking-glass]
|
|
# if looking-glass support should be enabled
|
|
# using the features shorthand is preferred
|
|
#enabled = true
|
|
# width, height, and bit depth of the screen LG will transfer
|
|
# this info is used to calculate the required shared memory file size
|
|
width = 2560
|
|
height = 1080
|
|
#bit-depth = 8
|
|
# Alternatively you can set the buffer size directly
|
|
# vore will automatically pick the lowest higher or equal to buffer-size
|
|
# that is a power of 2
|
|
#buffer-size = 999999
|
|
# Path to the shared memory file looking-glass should use
|
|
# if not specified vore will create a path.
|
|
# this is mostly for in the case you use the kvmfr kernel module
|
|
#mem-path = "/dev/kvmfr0"
|
|
```
|
|
|
|
|
|
# TODO
|
|
|
|
- [ ] hugepages support
|
|
- [ ] USB passthrough
|
|
- [ ] Hot-plug USB via `vore attach <addr>`
|
|
- [ ] jack audiodev support
|
|
- [ ] qemu cmdline on request (`vore x qemucmd`)
|
|
- [ ] Better CPU support and feature assignment
|
|
- [ ] more control over CPU pinning (now just pickes the fist amount of CPU's)
|
|
- [ ] Network device configuration |