vore is a virtual machine management tool focused on VFIO set ups.

Related tags

Virtualization vore
Overview

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

.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//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" ">
[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 .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//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
  • 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
You might also like...
LC3 Virtual Machine written in Rust 🦀

LC3 - Emulator LC3-rust is a virtual machine for the Little Computer 3 architecture, written using the Rust programming language. The VM has been writ

little computer 3 (lc3) virtual machine written in Rust

Little Computer 3 (LC3) Virtual Machine (by @lowlevelers) What is Little Computer 3? Little Computer 3, or LC-3, is a type of computer educational pro

Vagga is a containerization tool without daemons

Vagga Vagga is a fully-userspace container engine inspired by Vagrant and Docker, specialized for development environments. Note version 0.2 changed f

Contains challenges, write-ups, and deployment configurations from b01lersCTF 2023.

CTF Name A template repository for a CTF competition. This is a description of the CTF event. CTFTime Link Structure Challenges are organized by categ

Revolutionary Machine (revm) is a fast Ethereum virtual machine written in rust.

revm - Revolutionary Machine Is Rust Ethereum Virtual Machine with great name that is focused on speed and simplicity.

Rust File Management CLI is a command-line tool written in Rust that provides essential file management functionalities. Whether you're working with files or directories, this tool simplifies common file operations with ease.

Rust FileOps Rust File Management CLI is a command-line tool written in Rust that provides essential file management functionalities. Whether you're w

Given a set of kmers (fasta format) and a set of sequences (fasta format), this tool will extract the sequences containing the kmers.

Kmer2sequences Description Given a set of kmers (fasta / fastq [.gz] format) and a set of sequences (fasta / fastq [.gz] format), this tool will extra

Horus is an open source tool for running forensic and administrative tasks at the kernel level using eBPF, a low-overhead in-kernel virtual machine, and the Rust programming language.
Horus is an open source tool for running forensic and administrative tasks at the kernel level using eBPF, a low-overhead in-kernel virtual machine, and the Rust programming language.

Horus Horus is an open-source tool for running forensic and administrative tasks at the kernel level using eBPF, a low-overhead in-kernel virtual mach

Wait, another virtual machine ?

WAVM WAVM, Wait, another virtual machine ?, is a register based 64 bits virtual machine written in Rust. It relies on 32 registers and 31 opcodes that

Detect if code is running inside a virtual machine (x86 and x86-64 only).

inside-vm Detect if code is running inside a virtual machine. Only works on x86 and x86-64. How does it work Measure average cpu cycles when calling c

Ethereum Virtual Machine implementation

Fast EVM implementation with full async support. Port of evmone to Rust.

An LC-3 virtual machine written in Rust for learning purposes.

LC-3 written in Rust An LC-3 virtual machine written in Rust for learning purposes.

crosvm is a virtual machine monitor (VMM) based on Linux’s KVM hypervisor

crosvm - The Chrome OS Virtual Machine Monitor crosvm is a virtual machine monitor (VMM) based on Linux’s KVM hypervisor, with a focus on simplicity,

🍄 A disassembler for the UEFI Bytecode Virtual Machine.
🍄 A disassembler for the UEFI Bytecode Virtual Machine.

🍄 A disassembler for the UEFI Bytecode Virtual Machine.

STARK-based virtual machine

Polygon Miden A STARK-based virtual machine. WARNING: This project is in an alpha stage. It has not been audited and may contain bugs and security fla

[WIP] An experimental Java-like language and it's virtual machine, for learning Java and JVM.

Sky VM An experimental Java-like language and it's virtual machine, for learning Java and JVM. Dependencies Rust (rust-lang/rust) 2021 Edition, dual-l

A parser, compiler, and virtual machine evaluator for a minimal subset of Lua; written from scratch in Rust.

lust: Lua in Rust This project implements a parser, compiler, and virtual machine evaluator for a minimal subset of Lua. It is written from scratch in

SVM - Spacemesh Virtual Machine

SVM - Spacemesh Virtual Machine Project Goals Self-contained. Should be hosted by the Spacemesh Golang full-node and future Spacemesh Rust full-node B

Dragonball-sandbox is a collection of Rust crates to help build custom Virtual Machine Monitors and hypervisors

Dragonball-sandbox is a collection of Rust crates to help build custom Virtual Machine Monitors and hypervisors. The crates here are considered to be the downstream of rust-vmm.

Owner
eater
Even C can't stop them now. Knows many langauges, mastered a few.
eater
Ethereum Virtual Machine implementation

Fast EVM implementation with full async support. Port of evmone to Rust.

Artem Vorotnikov 147 Dec 9, 2022
An LC-3 virtual machine written in Rust for learning purposes.

LC-3 written in Rust An LC-3 virtual machine written in Rust for learning purposes.

Rodrigo Araújo 30 Dec 11, 2022
crosvm is a virtual machine monitor (VMM) based on Linux’s KVM hypervisor

crosvm - The Chrome OS Virtual Machine Monitor crosvm is a virtual machine monitor (VMM) based on Linux’s KVM hypervisor, with a focus on simplicity,

Google 454 Dec 31, 2022
🍄 A disassembler for the UEFI Bytecode Virtual Machine.

?? A disassembler for the UEFI Bytecode Virtual Machine.

Samuel Wilder 51 Dec 6, 2022
STARK-based virtual machine

Polygon Miden A STARK-based virtual machine. WARNING: This project is in an alpha stage. It has not been audited and may contain bugs and security fla

Polygon (previously Matic) 415 Dec 28, 2022
SVM - Spacemesh Virtual Machine

SVM - Spacemesh Virtual Machine Project Goals Self-contained. Should be hosted by the Spacemesh Golang full-node and future Spacemesh Rust full-node B

Spacemesh 83 Sep 15, 2022
Dragonball-sandbox is a collection of Rust crates to help build custom Virtual Machine Monitors and hypervisors

Dragonball-sandbox is a collection of Rust crates to help build custom Virtual Machine Monitors and hypervisors. The crates here are considered to be the downstream of rust-vmm.

OpenAnolis Community 62 Dec 30, 2022
Virtual Machine Language - Yet another stack-based programming language

Virtual Machine Language - Yet another stack-based programming language

null 2 Feb 26, 2022
A Rust implementation of the Lox programming language. Based on clox, the bytecode virtual machine.

A Rust implementation of the Lox programming language. Based on clox, the bytecode virtual machine.

Diego Freijo 23 Dec 26, 2022
BM - a basic virtual machine written in rust

A basic virtual machine implementation with it's own binary format and assembly, as a learning experience.

KaviiSuri 1 May 8, 2022