There are three deliverables for Design Project 1:
All deliverables should be submitted via the online submission site.
As with real-life system designs, 6.033 design projects are under-specified, and it is your job to complete the specification in a sensible way given the overall requirements of the project. As with designs in practice, the specifications often need some adjustment as the design is fleshed out. We recommend that you start early so that you can evolve your design over time. A good design is likely to take more than just a few days to put together.
Your goal is to design a versioning file system. Many popular operating systems have a versioning file system (sometimes called continuous snapshotting file systems), which stores all versions of each file over time. These designs are complex because they handle a wide range of failures. Your task is simpler: design a versioning file system that assumes no failures. That is, you can assume that the file system will always terminate cleanly, even in the case of unexpected failures. For instance, if a power failure shut down the computer, assume that the file system will get a chance to write its state to stable storage cleanly. This allows you to design a much simpler file system than commercial ones. (After the break, we will study designs that can handle failures.)
When a program writes a new version of a file, your design should keep track of the old and new versions of the file. That is, a user should be able to see the old version in the file system namespace, and read it (but not write it). Your main challenge will be to do this in a storage-efficient manner: if, for example, a program changes one block of the file, then your design should use disk space proportional to 1 copy of the file plus one additional disk block.
Your design should support the standard Unix file system operations (read, write, open/create, rename, link, unlink, symlink, mkdir, chdir and stat). Your design can also be slower in performance than a non-versioning file system, but it should not be unusably slow. Section 2.5 (Case study: UNIX file system layering and naming) of the text book describes the basic design of non-versioning Unix file system. Your design should allow the user to specify files and directories that shouldn't be versioned. Finally, your design should be able to support garbage collection of older versions of a file.
Your design paper should clearly describe your design and the on-disk and in-memory data structures for snapshotting, and how they are used to support the required operations.
Your system must support the following use cases:
In supporting these use cases here are a few general issues to think about:
This list of issues is incomplete, but hopefully helps you get going.
You should analyze your solution under three workloads both in terms of number of disk blocks read and amount of space used. The three workloads are: 1) repeatedly writing to a small file; and 2) repeatedly writing a block of a large file; and 3) searching through all versions of a small file.
Challenge: save space by extending your design to do deduplication across files: if a block appears twice in different files store it once. Addressing this challenge is not necessary to get an A, but may be fun.
The design proposal should be a concise summary (800 words) of your overall system design.
The core of the proposal should be the design description. This section must include at least one graphic, correctly formatted with a caption and brief description. For example, it may be a good idea to illustrate the design of your data structures used to store versions.
You do not have to present a detailed rationale or analysis in your proposal. However, if any of your design decisions are unusual (particularly creative, experimental, or risky) or if you deviate from the requirements, you should explain and justify those decisions in your proposal.
You will receive feedback on your proposal from your TA in time to adjust your final report. You will also receive a writing program grade for your proposal, as well as feedback from your writing instructor that will help you improve the writing of the final report. Your writing instructor will evaluate the proposal according to the CI guidelines.
Some writing considerations for the proposal (and report):
Here are a few tips:
Your report should explain your design. It should discuss the major design decisions and tradeoffs you made, and justify your choices. It should discuss any limitations of which you are aware. You should assume that your report is being read by someone who has read this assignment, but has not thought carefully about this particular design problem. Give enough detail that your project can be turned over successfully to an implementation team. Your report should convince the reader that your design satisfies the requirements in Section III.
Use this organization for your report:
The writing suggestions for the proposal also apply to the report.
Your recitation and writing instructors will assign your report a grade that reflects both the design itself and how well your report presents the design. The most important aspect of your design is that we can understand how it works and that you have clearly addressed the requirements and provided the elements listed in Sections III and V. Complicated designs that we cannot understand will not be graded favorably.
Some overall content considerations:
The grading rubric for the final report is as follows:
Overall design
|
30 |
The degree to which the design addresses the requirements and use cases
|
20 |
Analysis of space and time requirements
|
20 |
User experience
|
15 |
Quality of the figures that illustrate the design |
5 |
Overall presentation |
10 |
The items in the grading rubric are not independent: a design that we cannot understand will likely result in a low score for several items.
85 and above is an A grade. Between 60 and 85 is a B grade. You will have to hand in a design project to pass 6.033.
This project is an individual effort. You are welcome to discuss the problem and ideas for solutions with your friends, but if you include any of their ideas in your solution you should explicitly give them credit. You must be the sole author of your report.