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. You can work individually on projects, or in groups of up to three students.
Your project will need to satisfy the following requirements:
ptrace, library interposition, optimistic concurrency control, etc.) we have read about or discussed in the systems research literature.
If you want to choose a technique from systems research that we have not read about, please discuss it with me first.You do not need to write a formal project proposal. Instead, I will meet with each group during our project working days and ask you to describe your project and how it meets the requirements. I do recommend keeping notes as you plan your project work so you can easily refer back to your goals for the work. I may encourage you to focus on specific strategies or adjust your project scope if I am concerned your work may not meet the requirements or would take too long to complete.
What are some basic, open problems in systems research?
Most of these are large, general issues. I recommend that you focus on a narrower context where concerns like those listed above would make sense.
The largest component of this project is the actual implementation. You are required to complete your implementation primarily in a systems language; C, C++, CUDA, Rust, and Go all fit under this definition, but I am open to other options if you discuss them with me. If building some pieces of your project in another language will save you time, that is perfectly fine to include as a small part of your larger implementation in a systems language.
Every group member must play a significant role in the implementation, but you are welcome to divide up implementation tasks. If you have difficulty working or coordinating with your group, please talk to me soon so I can help.
Regardless of the language you choose, make sure you write clear, well-commented code.
Your code must build without warnings or errors, and should include runtime checks for errors or failures when anything can go wrong.
Include 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.
Once you have an implementation of your system, you will need to evaluate it. You will need to plan and conduct a experiment that allows you to show us that your system works, but the nature of this experiment will depend on the problem and your approach to solving it. Make sure the experiments you run align with the problem you set out to solve.
I recommend that you think ahead to how you will evaluate your system so you can plan your implementation around building just the necessary features to run your experiments. I am happy to offer feedback and advice about evaluation strategies, and you should expect questions about your plans for evaluation fairly early in the process.
Finally, every group will present their project. 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 works. You should describe your evaluation procedures, show results, and walk through how we should interpret them. 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.