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

# 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