GSoC/GCI Archive
Google Summer of Code 2010

QEMU development team

Web Page:

Mailing List:

QEMU is a generic and open source machine emulator and virtualizer. When used as a machine emulator, QEMU can run OSes and programs made for one machine (e.g. an ARM board) on a different machine (e.g. your own PC). By using dynamic translation, it achieves very good performances. When used as a virtualizer, QEMU achieves near native performances by executing the guest code directly on the host CPU. QEMU supports virtualization when executing under the Xen hypervisor or using the KVM kernel module in Linux. When using KVM, QEMU can virtualize x86, server and embedded PowerPC, and S390 guests.


  • Add more sophisticated encodings to VNC server QEMU's built-in VNC server only supports the Hextile encoding. Hextile only uses tile-based compression. Other encodings are more popular such as Tight and ZRLE that use zlib-based compression. These encodings significantly reduce the bandwidth required by VNC.
  • AHCI emulation Advanced Host controller Interface (AHCI) replaces early Serial ATA controller interfaces that either used proprietary extensions to enable native features, or omitted support completely. Being unified, most modern operating systems include AHCI drivers. It is also a faster alternative to IDE emulation. Therefore, the addition of AHCI emulation to QEMU, along with Serial ATA command interpretation, would improve the usefulness of QEMU significantly.
  • AMD IOMMU emulation AMD has designed and implemented an IOMMU that benefits virtualization by providing a means to assign devices to virtual machines. Also, by design, the IOMMU lends itself to emulation in a VM. The emulation can provide IOMMU capabilities to guests, making it possible to assign devices to nested guests. This proposal aims to implement an emulated AMD IOMMU in QEMU/KVM.
  • Converting Monitor interface functions to QMP qemu has many commands attached to the monitor interface that are currently inaccessible over QMP (QEMU Machine Protocol). I intend to give continuity to this effort, converting the remaining functions to the QObject API. While doing this conversion, the QObject API can be updated to improve its functionality when required.