CSE 522S: Course Projects

"Everything changes and nothing stands still."

— Heraclitus of Ephesus (as quoted by Plato in Cratylus)

The course project gives each team of up to three students an opportunity to propose and complete their own significant modification to Linux kernel behavor. This may be an entirely new capability or it may alter or extend existing functionality. It may be realized through kernel modifications, kernel modules, or some combination of them. The team will evaluate the effectiveness of their modification by developing their own test cases and user and/or kernel test code that can successfully demonstrate and evaluate the new behavior. Students are encouraged to look to their own interests and/or research projects for inspiration, and we will also suggest some possible options.

In either case, each team of students must justify their intended approach in a written proposal document, in order to ensure that the scope of the project is achieveable and meaningful. The proposal document must:

  1. Propose a modification of, or extension to, Linux kernel behavior
  2. Clearly explain the purpose of the modification or extension
  3. Identify any kernel files that will require modification or extension
  4. Identify any kernel data structures that will need to be changed or extended
  5. Identify any kernel concepts and control paths that will need to be changed or extended
  6. Propose a set of test cases that demonstrate and test the modification or extension
  7. Identify any kernel modules or user space programs (and what languages those programs will be written in) that will be produced in order to implement, or to validate and test, the modification or extension
  8. Include a five-week planned schedule for the project, including detailed design, implementation, initial evaluation, project presentation, and project writeup phases.

Note: while the kernel-level modifications and kernel modules should be written in C, user-level code may be written in any language of your choosing as long as we can successfully follow your instructions for how to build and reproduce your evaluations of your solution on our Raspberry Pi 3 machines.

When you are finished writing-up your proposal document, please e-mail it (by the proposal deadline) to eng-cse522@email.wustl.edu with the phrase Project Proposal in the subject line.

In addition to submitting a proposal for the project, and (along with your code and other files for your solution and evaluations) a cohesive report that unifies your observations and results for the project, in the last week of the semester your team will also give a project presentation to all the students in the course that (1) gives an overview of the goals of your project, (2) explains core technical challenges that were encountered in your project, (3) describes your approach in detail (including the files, data structures, functions, and other artifacts that were created, modified, or leveraged in your solution), (4) motivates and describes how you evaluated your solution, and (5) presents timing graphs or other data results of those evaluations (along with an assessment of how effective your solution was based on them). Optionally, your presentation may also include a short demo (if possible within the allotted presentation time). The overall project will be graded in part based on this live presentation, as well as based on submitted code and documentation.

As you work on your course project, please take notes regarding (1) what did or did not work out from your original proposal, and how your approach evolved as you worked on the project; (2) what techniques from other labs and studios in the course were relevant to your approach, and how you applied them in your project; (3) how successful your approach was in achieving the goals you had originally proposed; and (4) how (and why) you conducted evaluations of your solution (e.g., using tracing and other means to collect empirical evidence of it's strengths and limitations, and what hypotheses were tested in those evaluations).

When you are finished with your project, please write-up a cohesive report (see next) and e-mail it along with your code files, kernelshark snapshot files, Makefile, etc. to eng-cse522@email.wustl.edu with the phrase Course Project in the subject line.

Both your presentation and your project report should document to what extent (and in what ways) the scope, objectives, and plans for your project changed between your project proposal and your submitted project. This documentation should include a discussion of what assumptions were changed (and why they needed to change), what workarounds were needed (and why they were needed), and the details of and reasons for any other differences between what was propoed and what was delivered.

What to turn in when the project is completed: (1) all the code and compilation files used to implement and run your solution (including a Makefile if you used one, etc.); (2) a readme.txt file with the contents described next, and (3) other files (e.g., with screen-shots from Kernelshark) that enhance your report.

The first section of your readme.txt file should include:

  1. The name and number of the lab.
  2. The name and email address of everyone who worked together on this lab.
  3. Attribution of sources for any materials that were used in (or strongly influenced) your solution.
  4. Design decisions you made in creating your solution (and their rationale), including your rationale for using the programming language(s) you chose and for how you structured your code.
  5. A cohesive and thorough writeup of your project that discusses and explains:
  6. Any insights or questions you may have had while completing this assignment.
  7. Any suggestions you have for how to improve the assignment itself.
  8. The amount of time you spent on this assignment.
The second section of your readme.txt file should include detailed instructions for how to:
  1. unzip or otherwise unpack your files,
  2. build your programs (including on which machines to do that), and
  3. run your programs on the Raspberry Pi 3 (including detailed instructions for how to perform all of the evaluations you used to evaluate your solution - if you would like to provide script files to run your tests, please make sure you say in which shell or shells to run them, or any other details that are needed in order for them to run successfully and correctly).