George Boutsioukis: Paravirtualized audio

This is a guest blog post by George Boutsioukis, one of our Google Summer of Code students.

My name is George Boutsioukis and I’m a CS undergraduate at the Aristotle University in Thessaloniki, Greece. This is my second year in GSoC, after taking up a project last year for Python. Coming from a background mostly in compilers and machine learning, this project for me is also a crash course in virtualization and Xen.

My project is to implement paravirtualized audio in Xen, following in principle the split-driver approach already used in the other PV drivers so far. Compared to network and block paravirtualization, audio interfaces are relatively simpler to support (at least for PCM). A backend driver would only need to transfer and play the raw audio frames of the PV guest directly, without any need to process them. However, there are a few issues that need to be dealt with, most notably buffering/synchronization problems and the performance overhead it may introduce.

The initial approach is to make both ends run in userspace, using gntalloc for this purpose. A pulseaudio sink module at the frontend will transfer the raw audio frames from the guest to a backend daemon through a ring buffer. Audio capture should work in much the same way, only in reverse. The transferred data are not pulseaudio-specific, so this approach can be extended (in theory at least) for any frontend interface that works with raw PCM data, like ALSA for example.

Fortunately, some work has already been done in this direction: Rafal Wojtczuk has already written a basic PV audio implementation for Qubes-OS, which will be used as a guide for the first steps of this project. Of course, the goal is to make the final implementation production-ready, so I expect a large part of this project to be spent on dealing with practical issues, like receiving audio from multiple frontends or dealing with suspending/resuming a guest.

The code and any other relevant files will lie in a public repository at for anyone who wishes to follow the project during the summer. The code will be upstreamed to Xen when the project is complete.

This entry was posted in Announcements and tagged on by .

About Lars Kurth

Lars Kurth is a highly effective, passionate community manager with strong experience of working with open source communities (Symbian, Symbian DevCo, Eclipse, GNU) and currently is community manager for Lars has 9 years of experience building and leading engineering teams and a track record of executing several change programs impacting 1000 users. Lars has 16 years of industry experience in the tools and mobile sector working at ARM, Symbian Ltd, Symbian Foundation and Nokia. Lars has strong analytical, communication, influencing and presentation skills, good knowledge of marketing and product management and extensive background in C/C , Java and software development practices which he learned working as community manager, product manager, chief architect, engineering manager and software developer. If you want to know more, check out Personally, Lars has a wide range of interests such as literature, theatre, cinema, cooking and gardening. He is particularly fascinated by orchids and carnivorous plants and has built a rather large collection of plants from all over the world. His love for plants extends into a passion for travel, in particular to see plants grow in their native habitats.