This repository contains the source code and evaluation scripts for the USENIX ATC'25 paper "Accelerating Nested Virtualization with HyperTurtle".
- Linux Kernel for L0 and L1
- Libbpf for L0 (Required for L0 QEMU)
- L0 QEMU
- Hyperupcall programs and infrastructure
- Evaluation scripts and tools
The used Ubuntu 20.04.6 LTS
as L0 OS and build environment.
-
Clone repository with submodules
-
Build and install the kernel in L0.
cd hyperturtle-linux
make hyperturtle_defconfig
make -j$(nproc)
sudo make install
sudo make modules_install
cd hyperturtle-qemu
mkdir build
cd build
../configure --target-list=x86_64-softmmu
make
-
Create L1 VM with the kernel + libbpf above.
-
Launch L1 VM with the
launch_virt.sh
script (TODO: addlaunch_virt.sh
). -
(Optional) Install Kata Containers in L1.
-
Build Hyperupcall programs on L1. In
hyperupcalls/hyperupcall.h
, change the value ofNETDEV_INDEX
such that it'll reference the i'th network device connected to L0 (can see the numbering vialspci
). -
Start L2 VM (either via QEMU or Kata Containers). The Dockerfiles for the containers used in the paper are available here. For optimal performance, pin L1-vCPUs to L0-pCPUs and pin L2-vCPUs to L1-vCPUs.
- Override the driver of a virtio-nic. \ Note: You might need to install driverctl. Replace - example: 0000:01:00.0
sudo apt install driverctl
sudo driverctl set-override <pci-id> vfio-pci
- Run the container without docker network, but attach a device. You might need to add --cap-add=NET_ADMIN.
docker run --runtime io.containerd.kata.v2 --device /dev/vfio/<device-index> --network=none <image-name>
-
You might need to acquire an IP address from inside the container. Assuming the name of the container is "hyperturtle-test" docker exec hyperturtle-test dhclient eth0
-
Attach a networking hyperupcall (see hyperupcalls folder)
When referring to this repository, please cite our publication.
@inproceedings {hyperturtle,
author = {Ori Ben Zur and Jakob Krebs and Shai Aviram Bergman and Mark Silberstein},
title = {Accelerating Nested Virtualization with HyperTurtle},
booktitle = {2025 USENIX Annual Technical Conference (USENIX ATC 25)},
year = {2025},
isbn = {ISBN 978-1-939133-48-9},
address = {Boston, MA},
pages = {987--1002},
url = {https://www.usenix.org/conference/atc25/presentation/zur},
publisher = {USENIX Association},
month = jul
}