Internships/ProjectIdeas/VsockSiblingCommunication
Sibling VM communication in vhost-user-vsock
Summary: Extend the existing vhost-user-vsock Rust application to support sibling VM communication
During GSoC 2021, we developed vhost-user-vsock application in Rust. It leveraged the vhost-user protocol to emulate a virtio-vsock device in an external process. It provides the hybrid VSOCK interface over AF_UNIX introduced by Firecracker.
The current implementation supports a single virtual machine (VM) per process instance. The idea of this project is to extend the vhost-user-vsock crate available in the rust-vmm/vhost-device workspace to support multiple VMs per instance and allow communication between sibling VMs.
This project will allow you to learn more about the virtio-vsock specification, rust-vmm crates, and vhost-user protocol to interface with QEMU.
This work will be done in Rust, but we may need to patch the virtio-vsock driver or vsock core in Linux if we will find some issues. AF_VSOCK in Linux already supports the VMADDR_FLAG_TO_HOST flag to be used in the struct sockaddr_vm to communicate with sibling VMs.
Goals:
- Understand how a virtio-vsock device works
- Refactor vhost-user-vsock code to allow multiple virtio-vsock device instances
- Extend the vhost-user-vsock CLI
- Implement sibling VM communication
- (optional) Support adding new VMs at runtime
Links:
- vsock info and issues
- virtio-vsock QEMU wiki page
- vhost-user-vsock application
- vhost-user-vsock project @ GSoC 2021
- Firecracker's hybrid VSOCK
- vhost-user protocol
- VMADDR_FLAG_TO_HOST flag support in Linux
Details:
- Project size: 350 hours
- Skill level: intermediate (knowledge of Rust and virtualization)
- Language: Rust
- Mentor: Stefano Garzarella <sgarzare@redhat.com>
- IRC: sgarzare / Matrix: @sgarzare:matrix.org
- Suggested by: Stefano Garzarella <sgarzare@redhat.com>