On Mon, Jan 29, 2024 at 8:40 PM Stefan Hajnoczi <stefanha@xxxxxxxxx> wrote: > > On Mon, 29 Jan 2024 at 13:53, Eugenio Perez Martin <eperezma@xxxxxxxxxx> wrote: > > > > On Mon, Jan 15, 2024 at 5:33 PM Stefan Hajnoczi <stefanha@xxxxxxxxx> wrote: > > > > > > Dear QEMU and KVM communities, > > > QEMU will apply for the Google Summer of Code and Outreachy internship > > > programs again this year. Regular contributors can submit project > > > ideas that they'd like to mentor by replying to this email before > > > January 30th. > > > > > > > > > === Add packed virtqueue to Shadow Virtqueue === > > Yes! I'm a fan of packed virtqueues, so I'm excited to see this project idea :). > It's about time! :). > > Summary: Add the packed virtqueue format support to QEMU's Shadow Virtqueue. > > > > To perform a virtual machine live migration with an external device to > > qemu, qemu needs a way to know which memory the device modifies so it > > is able to resend it. Otherwise the guest would resume with invalid / > > outdated memory in the destination. > > > > This is especially hard with passthrough hardware devices, as > > transports like PCI imposes a few security and performance challenges. > > As a method to overcome this for virtio devices, qemu can offer an > > emulated virtqueue to the device, called Shadow Virtqueue (SVQ), > > instead of allowing the device to communicate directly with the guest. > > SVQ will then forward the writes to the guest, being the effective > > writer in the guest memory and knowing when a portion of it needs to > > be resent. > > > > Compared with original Split Virtqueues, already supported by Shadow > > Virtqueue, Packed virtqueue is a more compact representation that uses > > less memory size and allows both devices and drivers to exchange the > > same amount of information with less memory operations. > > > > The task is to complete the packed virtqueue support for SVQ, using > > the kernel virtio ring driver as a reference. There is already a setup > > that can be used to test the changes. > > > > Links: > > * https://www.redhat.com/en/blog/virtio-devices-and-drivers-overview-headjack-and-phone > > * https://www.redhat.com/en/blog/virtqueues-and-virtio-ring-how-data-travels > > * https://www.redhat.com/en/blog/packed-virtqueue-how-reduce-overhead-virtio > > * https://www.youtube.com/watch?v=x9ARoNVzS04 > > > > Details: > > * Skill level: Intermediate > > * Language: C > > I have added this project idea to the wiki. I made minor edits (e.g. > consistently using "guest" instead of both "virtual machine" and > "guest" to minimize the amount of terminology). I also added a link to > the vhost-shadow-virtqueue.c source code so applicants have a starting > point for researching the code. > > https://wiki.qemu.org/Internships/ProjectIdeas/PackedShadowVirtqueue > Good points, thank you very much! > Please edit the page to clarify the following: > - Project size: 90 (small), 175 (medium), or 350 (large) hours > - A list of suggested tasks for the coding period that applicants can > research and refine for their project plan > > Possible stretch goals if the intern completes packed svq support > early or maybe you have your own ideas: > - Split/rename vhost-shadow-virtqueue.c into a VIRTIO driver-side > virtqueue API (which could be used by any other feature that acts as a > VIRTIO driver, like vhost-user clients) and shadow virtqueue logic > - Implement packed virtqueue support in other components where it is > not yet supported (like kernel vhost) > Added, good ideas! Please let me know if you think something should be further corrected or feel free to modify yourself. Thanks!