= Round 6 (June 2013) OPW Linux kernel projects = After being accepted into the program, OPW interns worked on real-world kernel projects, ranging from parallelizing the x86 boot process to updating TTY drivers that were created in 2005 and getting them merged into the staging tree. During the internship period, interns worked remotely, communicating with mentors via email, IRC, phone conversations, and Google hangout. Interns had to manage their own time efficiently and learn how to seek help from their mentors and the community when they got stuck. These skills will prove invaliable as interns move into jobs working with the global Linux kernel community. == Staging tree == Lidza Louina worked with Greg Kroah-Hartman on improving drivers in the staging tree. Lidza started out by doing driver cleanup, then went on to merge two TTY drivers into the staging tree that had been out-of-tree since 2005. That involved getting them to compile, updating the drivers to work with new kernel API, and cleaning them up to match kernel coding style. Lidza contributed 18 patches to the 3.11 kernel, and 62 patches to the 3.12 kernel. Lidza presented about her project at LinuxCon North America on September 18, 2013. Slides are [[attachment:lidza-linuxcon-na-slides.pdf|here]]. == USB == Xenia Ragiadakou worked with Sarah Sharp on the USB 3.0 host controller driver (xHCI). She worked on improving the driver debugging, by adding dynamic debug support and event tracing. This eliminates the need to recompile the driver to turn on debugging, without adding extra overhead when debugging is turned off. Xenia added 12 trace events to the driver, as well as contributing many bug fixes and code cleanup patches. Xenia contributed 100 patches to the 3.11 kernel, 28 patches for the 3.12 kernel, 52 patches for the 3.13 kernel, and 15 patches for the 3.15 kernel. Xenia presented her project at LinuxCon Europe on Oct 23, 2013. Slides are [[attachment:xenia-linuxcon-eu-xhci.pdf|here]]. == Xen == Lisa Nguyen worked with Konrad Wilk on the Xen block layer. The goal was to extend the Xen block drivers by implementing DIF/DIX, a protocol to add extra checksum information. Lisa will work beyond her kernel internship period to get the block layer code merged. Lisa contributed 23 patches for the 3.10 and 3.11 kernels. Lisa presented about her project at LinuxCon North America on September 18, 2013. Slides are [[attachment:lisa-linuxcon-na-slides.pdf|here]]. Elena Ufimtseva worked with the Xen team to implement vNUMA in Xen. This involved exposing the NUMA topology to the guest, to allow the guest to make smart decisions through NUMA aware scheduling. Elena continued to work on her project after the internship ended, and sent out her first RFC in December. Elena contributed 10 patches to the 3.11 kernel. Elena presented her project at LinuxCon Europe on Oct 23, 2013. Slides are [[attachment:elena-linuxcon-eu-vnuma.pdf|here.]] == x86 boot == Tülin İzer worked to parallelize the x86 boot process. This meant understanding and modifying very low level bring up code. Tülin continued to work on her project after the internship ended. Tülin contributed 34 patches to the 3.11 kernel. Tülin presented her project at LinuxCon Europe on Oct 23, 2013. Slides are [[attachment:tulin-linuxcon-eu-x86-boot.pdf|here]]. = Old project descriptions = == Ethernet == [[http://lh6.ggpht.com/_KnE2M8e3X8Q/S6z4IPztwSI/AAAAAAAAE_Y/7O7nJuT8deQ/s200/130659908_922e26a071_b.jpg]] The Linux kernel ethernet drivers communicate with network hardware, to give you access to the Internet. Ethernet devices can be as simple as the 1 gigabit ethernet controllers in your laptop, to much faster ethernet controllers in servers. Interns would work on the Intel 1 gigabit ethernet driver, igb and/or ethtool, the networking configuration userspace application that works with the drivers. Wired ethernet devices supported by igb are found in some laptops and most servers, but hardware will be provided if you don't have access to it. What will be required is a PCIe slot to put the any hardware you need into and at least one other system (laptop is fine, as long as it has an RJ45 network drop) to use as a link partner and a network cable to link them. ''Required skills'': Experience with Linux network configuation and basic C programming stills ''Optional but learnable skills:'' Knowledge of networking and networking features found in most ethernet devices. ''Mentors:'' Carolyn Wyborny [[CarolynWyborny|(contact info)]] Anjali Jain [[AnjaliJain|(contact info)]] === USB === {{attachment:usb-sushi.jpg}} The Linux kernel includes a USB stack that communicates with the hardware behind your USB ports (USB host controller drivers), and includes USB device drivers that talk to your USB devices (USB device drivers). Interns would work on the USB 3.0 host controller driver. The Linux kernel USB 3.0 host driver works 10 times faster than USB 2.0 host driver. The USB 3.0 driver still needs a lot of work, so there are plenty of small bug fixes that interns can tackle. If time permits, interns could also work on small to medium features. USB 3.0 hardware will be provided to accepted interns if you don't have access to it. Another project would be to [[http://marc.info/?l=linux-usb&m=137787545330845&w=2:work|on refactoring]] the USB core hub.c. ''Required skills'': Experience with manipulating linked lists in C, knowledge of basic boolean algrebra (bit masks and manipulating bits) ''Optional but learnable skills'': Knowledge of USB or other low-level busses ''Mentor'': Sarah Sharp [[SarahSharp|(contact info)]] ''Suggested reading for accepted interns'': [[http://lwn.net/Kernel/LDD3/|Linux Device Drivers]] and [[http://www.beyondlogic.org/usbnutshell/usb1.shtml|USB in a Nutshell]] == x86 core == {{attachment:tux-hardware.jpg}} In the heart of the Linux kernel is code that runs directly on x86 processors. This includes early boot code, etc. This part of the kernel is usually considered one of the more complex areas of the operating system. However, with a bit of guidance, it's really fascinating to see how a computer begins the journey from powered off to a blinking cursor at your login prompt. Interns would work alongside PJ on central boot code in the Linux kernel. Today, the kernel brings CPU's online one by one in a serial fashion. We can do better. Several stages of changes are planned to go from a completely serial approach to a fully parallel approach to bringing CPU's up. Interns would work on some of these planned changes. ''Required skills:'' Knowledge of how to use and manipulate pointers and function pointers in C is a must. ''Optional but learnable skills:'' Knowledge of computer architecture, x86 assembly ''Mentors:'' Peter Waskiewicz Jr (PJ) [[PeterWaskiewicz|(contact info)]] == Xen subsystem in Linux == {{attachment:be-zen-hack-xen.png}} The Linux kernel interfaces with the Xen hypervisor via hypercalls and also with other kernels by backend and frontend drivers. Xen's architecture allows to seperate each guest completlty and they can communicate amongst each other using backend/frontend drivers. But as any software exists there are bugs and the need to improve, cleanup and in general make it better. And also help in writting documentation on how Linux and Xen interact. The intern would work on a smörgåsbord of issues the Xen components in the Linux kernel has. The ones that fit within the three month period are concentrated in: * Making the event channel mechanism capable of fast checkpointing so that Remus (a software approach to lock-step and fail-over working) can properly work. * Multiple design issues with the block protocol (https://docs.google.com/document/d/1Vh5T8Z3Tx3sUEhVB0DnNDKBNiqB_ZA8Z5YVqAsCIjuI/edit). Also there are bugs in the code. * Multiple issues with the net protocol - lack of documentation (designs and internals), performance test and analysis, bug fixes etc. * Understanding the Xen platform and writing documentation on how it works to be made in an architecture paper (or doing this alongside the other projects and just writing down what has been learned). ''Required skills:'' Knowledge of how to use and manipulate pointers and function pointers in C is a must. ''Optional but learnable skills:'' Knowledge of computer architecture, x86 assembly ''Mentors:'' Konrad Rzeszutek Wilk [[KonradRzeszutekWilk|(contact info)]] == Creative Commons Photo Credits == [[http://www.flickr.com/photos/pfly/130659908/|Ethernet]], [[http://www.flickr.com/photos/zopeuse/56910709/|Tux on Hardware]],