As part of this class, you will conduct a small-scale systems research project. While your project will necessarily be smaller than the multi-year efforts that lead to some of the papers we read, it will have many of the same elements as a larger scale project.
Your project will need to satisfy the following requirements:
We will begin the project with a proposal. Your proposal will be in the form of a short written report, with some supplementary material.
There are now length requirements for your proposal. I will evaluate your work based on how clearly you address each of the requirements, so be as detailed as you can, but try to save some of the technical detail for later stages. Your proposal is due at the end of week 9. We will spend time in class discussing interesting problems, but you should plan to spend time during break thinking about your project. The small implementation tasks and writing should be manageable during week 9, so you do not need to spend your break writing and coding.
We’ll spend some time in class discussing important problems in systems, strategies for completing a successful project, and how to find relevant papers. Details will appear below.
What are some basic, open problems in systems research?
There are many conferences and workshops in OS research, but you should be able to find many good papers by focusing on just a few:
https://dl.acm.org/path/to/paper, change the URL to http://dl.acm.org.grinnell.idm.oclc.org/path/to/paper.
You will need to log in with your Grinnell account, and then you will be forwarded along to the paper.The largest component of this project is the actual implementation. You are free to divide up the implementation work as you see fit, and you are welcome to use the language(s) of your choice, provided you are still able to use them to complete your project. Every group member must play a significant role in the implementation, but you are welcome to divide up implementation tasks.
Your implementation will be evaluated using several criteria:
While the first three pieces should be easy to evaluate, it may be difficult to say whether your system works. Two weeks is a very short time for a large implementation project, so I understand that you may run into issues and your plans could change. I have tried to offer advice about which parts you could drop if you run into issues in my proposal feedback, but if you hit a major roadblock and need to change your project I am happy to help.
To show that your system works, you must provide a README file that precisely describes the basic use of your system, including both general instructions and a specific example that walks through an interaction with the system and the expected output.
Your implementation must also include all necessary source and data files and a Makefile that allows me to build your project with the make command.
If building or running your project requires any additional software or configuration beyond what is available on MathLAN, please make sure to document these dependencies so I will be able to run your project.
Your report must give an overview of your system, describe the design and implementation of the system, and finally present an evaluation of your work. This report should cover all of the information from your in-class presentation, with an additional level of detail. A report that earns an A would include sufficient detail for me to re-implement your system without seeing your code or presentation, while also conveying the high-level ideas underlying your system.
Your report will need to include the following sections:
Give a brief overview of your system’s design, the high level points of your implementation, and summarize your evaluation strategy and results. Your overview will serve as an introduction for your project; make sure it is clear what you tried to do, why you did it, and how you know it worked. You can go into detail in later sections, so keep this section brief; 500 words is a good target length.
The design and implementation section should explain the structure of your system and, importantly, the rationale for that structure. Design decisions include details like the data structures and algorithms you used, the places where you used concurrency or decided to run code on the GPU, and any libraries you may have used for your implementation.
Try to organize this section in a top down manner: introduce the major components of your system, outline the responsibilities of each component, and then jump into the specifics of each component. You may want to repeat this process for sub-components if there are reasonable logical divisons within the major pieces of your project.
Another strategy for organizing this section would be to break it down by concerns. System concerns include updating a file index in response to a file deletion, maintaining game state over a network connection, or other general requirements that may not map to specific units of code in your system. If you can identify a handful of high-level concerns it may make more sense to discuss the overall implementation structure and then describe how each concern fits into this structure.
You are required to present an evaluation of your system.
The details of this evaluation will depend on your project topic, but there are a few common requirements.
First, you must describe the experimental set-up;
this includes the hardware and software you are using for the evaluation, versions of any important software tools (including libraries), and the methods you use for gathering data (e.g. we measure execution time using the time command).
Then, you should measure an appropriate aspect of your system’s behavior while varying some aspect of the load on your system or its environment.
Make sure your evaluation section explains what you are trying to measure and discusses an interpretation of your results.
If you are unsure what you can measure about your intended project I am happy to discuss possible approaches with you.
When appropriate, your evaluation should include graphs to show the results of your evaluation. Graphs may not be appropriate for all evaluations, so feel free to be creative in how you present the findings from your evaluation.
Presentation times will depend on the number of project groups, so check back for more details. Regardless of the available time, presentations must answer the following questions:
While you do not need to go into detail about the code you wrote for your implementation, you should try to give us enough information that we understand both the conceptual design of your system and some of the interesting technical challenges you faced during your implementation.
For part five, it’s not enough just to report that your system was successful. You should show us your evaluation, discuss the results, and argue for your interpretation of these results. Remember to relate the evaluation back to the original purpose of your system.
All group members must participate in the presentation, but it is up to you to decide how to divide the presentation topics.