Google Summer of Code 2014: Difference between revisions
Line 157: | Line 157: | ||
* Skill level: beginer | * Skill level: beginer | ||
=== Making virsh more bash like === | |||
If you have ever used virsh, you certainly reached the point where you stuggle with its user friendliness. Or unfriendliness I should rather say. Virsh is missing a lot of bash functionality that users consider natural: from automatic completion of object names, through redirecting command outputs through piping commands together. The aim would be to make these functions available in virsh and thus make user experience better. | |||
* Skill level: Advanced | |||
=== Your own idea === | === Your own idea === |
Revision as of 17:51, 10 February 2014
Introduction
QEMU is applying as a mentoring organization for Google Summer of Code 2014. This page contains our ideas list and information for students and mentors.
Note to students: Google has not yet announced participating organizations for 2014. We do not know whether or not QEMU can participate this year, so use your time wisely and don't invest too much effort yet.
Find Us
- IRC (GSoC specific): #qemu-gsoc on irc.oftc.net
- IRC (development):
- QEMU: #qemu on irc.oftc.net
- Mailing list:
Please contact the mentor for the project idea you are interested in. IRC is usually the quickest way to get an answer.
For general questions about QEMU in GSoC, please contact the following people:
- Stefan Hajnoczi (stefanha on IRC)
- Anthony Liguori (aliguori on IRC)
Important links
Project Ideas
This is the listing of suggested project ideas. Students are free to suggest their own projects by emailing qemu-devel@nongnu.org and (optionally) CCing potential mentors.
QEMU projects
Device driver framework for low-level testing
Summary: Implement bus drivers and example device tests
Modern hardware requires elaborate setup before it can be accessed. So much low-level configuration is necessary before devices become available that we (mostly) don't bother to write test cases for emulated devices. This project is going to change that - let's make testing emulated devices easy!
QEMU's libqos library aims to provide a device driver framework for writing PCI, I2C, fw_cfg, and other device tests. libqos has several areas that need improvement before emulated device testing becomes generally useful:
- Add support for virtio. This requires you to implement at least one of the virtio transports: virtio-pci, virtio-mmio, or virtio-ccw.
- Add support for USB. This requires you to implement at least one USB Host Controller driver: xHCI, EHCI, UHCI, or OHCI.
- Add I2C/SMBus controller drivers for pc (i440fx) and pc-q35 (ICH9) x86 machines.
- Add PCI controller drivers for ppc machines.
- Make device test cases work for multiple machine types. For example, a PCI network card test case should work on both x86 and ppc machines. This requires that you first implement more controller drivers (see above). Some busses, like PCI, can detect devices and therefore decide which device tests to execute for the emulated machine.
Pick one or more of these areas to work on.
This project will give you an opportunity to work on low-level device driver code, learn how modern hardware works, and familiarize yourself with device driver frameworks. The libqos approach is similar to kernel device driver frameworks that Linux, FreeBSD, Windows, or Darwin have. If you are not familiar with device drivers already, make sure to look at the free Linux Device Drivers book to get some background.
Links:
- libqos
- IDE controller test case
- Linux kernel device driver model header file and documentation
- Linux Device Drivers, 3rd Edition
Details:
- Skill level: intermediate to advanced
- Language: C
- Mentor: Stefan Hajnoczi <stefanha@redhat.com> (stefanha on IRC), Paolo Bonzini <pbonzini@redhat.com>
Disk image fuzz testing
Summary: Implement fuzz testing for image file formats to identify security vulnerabilities before the bad guys do
QEMU supports a range of image file formats including qcow2, VMDK, and VHDX. Image files are often uploaded by untrusted users to cloud providers or shared online as untrusted "demo appliances". Any bug in QEMU that can be triggered by a malicious image file could be used to compromise the host opening the image file.
Fuzz testing is an automated random testing technique that explores a program's code paths by trying random inputs. When the program under test crashes, a bug has been found. These techniques have been used successfully in other areas such as testing the Linux system call interface.
Your task is to implement fuzz tests for qcow2, VMDK, and VHDX. These tests will be merged into qemu.git and part of the test suite. You can either fix bugs found by your tests yourself, or work with the community to report them and provide fixes.
You should consider different approaches to fuzzing that interest you (e.g. combining with code coverage metrics). Using an existing fuzzing framework may be a good idea too.
Links:
- https://en.wikipedia.org/wiki/Fuzz_testing
- qemu-iotests test suite (has no fuzz tests)
- Trinity Linux system call fuzzer
- qcow2 file format specification
Details:
- Skill level: intermediate
- Language: Python and/or shell
- Mentor: Stefan Hajnoczi <stefanha@redhat.com> (stefanha on IRC)
Incremental backup of block images
Summary: Implement persistent incremental image backup.
Users want to do regular backup of VM image to protect data from unexpected loss. Incremental backup is a backup strategy that only copies out the "new data" that is changed since previous backup, to reduce the overhead of backup and improve the storage utilization. To track which part of guest data is changed, QEMU needs to store image's "dirty bitmap" on the disk as well as the image data itself.
The task is to implement a new block driver (a filter) to load/store this persistent dirty bitmap file, and maintain the dirty bits while the guest writes to the data image. As a prerequisite, you also need to make the design of this bitmap file format. Then, design test cases and write scripts to test the driver.
The persistent bitmap file must contain:
- Magic bits to identify the format of this file.
- Bitmap granularity (e.g. 64 KB)
- The actual bitmap (1 TB disk @ 64 KB granularity = 2 MB bitmap)
- Flags including a "clean" flag. The "clean" flag is used to tell whether the persistent bitmap file is safe to use again. When QEMU opens the persistent dirty bitmap, it clears the "clean" flag. When QEMU deactivates and finishes writing out the dirty bitmap, it sets the "clean" flag. If the QEMU process crashes it is not safe to trust the dirty bitmap; a full backup must be performed. Make use of this flag in the driver to limit the performance overhead.
Links:
- http://en.wikipedia.org/wiki/Incremental_backup
- QMP: Introduce incremental drive-backup with in-memory dirty bitmap
Details:
- Skill level: intermediate
- Language: C
- Mentors: Fam Zheng <famz@redhat.com> (fam on IRC), Stefan Hajnoczi <stefanha@redhat.com> (stefanha on IRC)
Libvirt projects
Introducing job control to the storage driver
Currently, libvirt support job cancellation and progress reporting on domains. That is, if there's a long running job on a domain, e.g. migration, libvirt reports how much data has already been transferred to the destination and how much still needs to be transferred. However, libvirt lacks such information reporting in storage area, to which libvirt developers refer to as the storage driver. The aim is to report progress on several storage tasks, like volume wiping, file allocation an others.
- Skill level: intermediate
Rewriting VirtualBox driver
If you have ever looked into our VirtualBox driver, you still may experience occasional headaches. I still do. The code is horribly structured so we would be more than happy to have somebody to rewrite the code and bring cleanliness that we strive to keep in the rest of the code.
- Skill level: beginner
Enhancing libvirt-snmp or libvirt-designer
Both project are in their very early stage of life. Libvirt-snmp aims to provide libvirt APIs over SNMP, so various network monitoring systems can access statistics of virtual machines. The libvirt-designer tries to ease generation of libvirt XML with coworking with libosinfo project. Contact me and we can find something suitable.
- Skill level: beginer
Making virsh more bash like
If you have ever used virsh, you certainly reached the point where you stuggle with its user friendliness. Or unfriendliness I should rather say. Virsh is missing a lot of bash functionality that users consider natural: from automatic completion of object names, through redirecting command outputs through piping commands together. The aim would be to make these functions available in virsh and thus make user experience better.
- Skill level: Advanced
Your own idea
Just catch me (Michal Privoznik) on IRC and we can discuss what interests you.
Links:
- http://libvirt.org/
- http://wiki.libvirt.org/page/Main_Page
- http://www.ibm.com/developerworks/linux/library/l-libvirt/index.html?ca=drs-
- https://www.berrange.com/topics/libvirt/
- https://www.redhat.com/archives/libvir-list/
Details:
- Component: libvirt
- Skill level: (see description to each item)
- Language: C
- Mentor: Michal Privoznik <mprivozn@redhat.com>, mprivozn on IRC (#virt OFTC)
- Suggested by: Michal Privoznik <mprivozn@redhat.com>
Project idea template
=== TITLE === '''Summary:''' Short description of the project Detailed description of the project. '''Links:''' * Wiki links to relevant material * External links to mailing lists or web sites '''Details:''' * Skill level: beginner or intermediate or advanced * Language: C * Mentor: Email address and IRC nick * Suggested by: Person who suggested the idea
Information for mentors
Mentors are responsible for keeping in touch with their student and assessing the student's progress. GSoC has a mid-term evaluation and a final evaluation where both the mentor and student assess each other.
The mentor typically gives advice, reviews the student's code, and has regular communication with the student to ensure progress is being made.
Being a mentor is a significant time commitment, plan for 5 hours per week. Make sure you can make this commitment because backing out during the summer will affect the student's experience.
The mentor chooses their student by reviewing student application forms and conducting IRC interviews with candidates. Depending on the number of candidates, this can be time-consuming in itself. Choosing the right student is critical so that both the mentor and the student can have a successful experience.