Outreachy 2020 DecemberMarch: Difference between revisions

From QEMU
(Created page with "= Introduction = QEMU is applying to participate in [https://www.outreachy.org/ Outreachy 2020 December-March]. '''This page contains information for mentors since we are cu...")
 
No edit summary
Line 24: Line 24:


= Project ideas =
= Project ideas =
{{:Internships/ProjectIdeas/IORegionFD}}
== How to add a project idea ==
== How to add a project idea ==
# Create a new wiki page under "Internships/ProjectIdeas/YourIdea" and follow [[#Project idea template]].
# Create a new wiki page under "Internships/ProjectIdeas/YourIdea" and follow [[#Project idea template]].

Revision as of 10:38, 13 August 2020

Introduction

QEMU is applying to participate in Outreachy 2020 December-March.

This page contains information for mentors since we are currently in the organization application phase. Final information for internship applicants will be published if QEMU is accepted.

Key Dates

From the outreachy website:

  • Aug. 24, 2020 at 4pm UTC - Initial applications open
  • Sept. 14, 2020 at 4pm UTC - Initial application deadline
  • Oct. 1, 2020 - Project list finalized
  • Oct. 1, 2020 to Oct. 31, 2020 - Contribute to projects
  • Oct. 31, 2020 at 4pm UTC - Final application deadline
  • Nov. 23, 2020 at 4pm UTC - Accepted interns announced
  • Dec. 1, 2020 to March 2, 2021 - Internship period

How to apply

  1. Read the Outreachy website first
  2. Choose a project idea and follow the steps on QEMU's Outreachy page.
  3. Contact the mentor for your project idea to introduce yourself and discuss how you want to tackle the project.
  4. Choose a small task from the BiteSizedTasks page and submit a patch contribution. See Contribute/SubmitAPatch for guidelines on patch submission.

Project ideas

ioregionfd - new device access dispatch mechanism

Summary: Implement a mechanism in the Linux kvm.ko kernel module to dispatch device accesses directly to a process or thread without jumping through the QEMU vCPU thread.

Virtual devices such as graphics cards and network cards can be emulated in dedicated tasks (processes or threads) instead of running in QEMU's vCPU or main loop threads. Dedicated tasks have security and performance advantages because they are isolated and can run on dedicated physical CPUs.

Some devices cannot be emulated efficiently yet because there is no way for the Linux kvm.ko kernel module to dispatch device accesses directly to the device emulation task. Today it is necessary to jump through the QEMU vCPU thread first and then forward the access to the dedicated task, which is slow. A few existing devices use the ioeventfd mechanism to avoid this but it only works for "doorbell" writes, not for read accesses or non-doorbell writes. This project is about implementing a general solution called ioregionfd.

Here is how read accesses and non-doorbell writes are dispatched today:

kvm.ko  <---ioctl(KVM_RUN)---> QEMU <---messages---> device task

ioregionfd eliminates the extra step through QEMU like this:

kvm.ko  <---ioregionfd---> device task

This project consists of implementing the KVM_SET_IOREGIONFD ioctl in the Linux kvm.ko kernel module and writing test cases. As a stretch goal you could update QEMU's emulated NVMe device to run in a dedicated QEMU IOThread using ioregionfd.

Please take a look at the ioregionfd API design discussion link below to understand the new ioctl proposal.

This project idea is suitable if you would like to gain Linux kernel programming and virtualization/emulation experience. No prior kernel programming experience is required but you must be able to write production-quality C (understand pointers, dynamic memory allocation, and error-handling in C).

Links:

Details:

  • Skill level: advanced
  • Language: C
  • Mentor: Stefan Hajnoczi <stefanha@redhat.com>

How to add a project idea

  1. Create a new wiki page under "Internships/ProjectIdeas/YourIdea" and follow #Project idea template.
  2. Add a link from this page like this: {{:Internships/ProjectIdeas/YourIdea}}

Example idea from a previous year: Internships/ProjectIdeas/I2CPassthrough

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

Find Us

  • IRC: #qemu-gsoc on irc.oftc.net (this channel is shared with Google Summer of Code internships)

For general questions about QEMU in Outreachy, please contact the following people: