Category | Difficulty |
---|---|
Quiz | 5 |
Projects | 9 |
Exams | 7 |
This class is easily one of the must do for systems engineering enthusiasts. The class covers topics such as SSD and HDD internals, RAID, Filesystem deep dive, Distributed filesystems , RAID. Being a graduate level course, you will be asked to develop solutions which meet specified performance parameters while making tradeoffs on your own, with minimal support from course staff. this class is offered only in fall.
Although this class lists C++ as a requirement, both the projects can be completed writing C code. although please be cautioned that you'll also have to work twice as hard as others, as you will not have access to STL elements like vector, maps, lists and end up coding these data structures on your own. So a good strategy would be to brush up C++ basics like classes, objects and most importantly STL data structures (vector, maps and sets suffice). note: you don't need any advance concepts like smart pointers, rvalue references etc., C++03 knowledge should suffice.
The Course staff recommends attending lecture as there is no recommended text for the course. Also there are a lot of guest lectures arranged by course instructors toward the end of the semester which can be insightful. The lectures before midterm concentrate more on internals of HDD, SSD and filesystem deep dive, the lectures after midterm are less dense and cover mostly distributed filesystems (AFS, NFS), cluster filesystems (GFS). Guest lectures also happen during class hours, though the content from these guest lectures is also included on exams, the weightage is a bit less compared to actual course content. the lecture material is designed to be less dense in latter part of the semester as CloudFS project can be challenging, time consuming but full of learnings.
there is weekly quiz with contents covering that week's class material and also reading
assignments. the quizzes are not designed to be super hard but include tricky questions which should not be hard to get if one has understood the core concepts of the topics covered for the week.
Projects are very interesting, thought provoking and to an extent hard but impart tons of learning in the course of completing them. though in the past there have been other projects like designing and writing fsck filesystem consistency checker, the latest version of the course entails designing and writing Flash Transation layer(FTL), the emphasis of the project is to impart on student the inner working of FTL and also to come up with designs and implementations which deliver required SSD performance metrics. The second project is CloudFS, a hybrid cloud filesystem which offloads files beyond a threshold to the object stores like S3. one will learn every facet of filesystem like open, readdidr and other filesystem calls and also learn concepts about distributed filesystem, caching, deduplication etc., this is easily the best part of this class and also the hardest project. On a side note One will get to learn how to write a code for a complex project come up with modular coding practices etc.,
Exams can be tricky they are not super difficult but if you have not understood core concepts which are thought in class they can get difficult. you might answer a question in one way thinking that is correct, only to find out that you only had partial solution or the solution was incorrect. The theme of the exams are that none have direct questions, all are application based and one can find them to be very tricky. Most times there is more than one acceptable answer to these questions and what ends up happening is most students get confused by this ambiguity and end up with bad time management. one has to realise that some or most questions can be answered for or against, your score only depends on the how compelling your reasoning is, which shows how well you have absorbed the core concepts of the class. For exam preparation please make use of the previous question papers, the more you solve the better prepared you get. as such there is one Mid term and one final in the course.
-
Pay attention to the lectures, do not miss any of them.
-
read or at least skim through the assigned reading material for the week, before the quiz for the week.
-
Treat the weekly quiz as a test of sorts.
-
The projects are hard, go to office hours and get help. being a graduate course limited help is provided but go anyways.
-
There are more than one solution for the projects and more than one way to code up the same solution, as such each TA might give hints based on his/her preference be mindful of this fact and make sure you stick to one particular way if you go to multiple office hours of different TA.
-
For Exam preparation make sure to solve enough question papers released by the course staff. Also do follow course staff recommended way, which is to solve the past question papers without seeing the answers in game time conditions (you can also practice untimed), and then look at solution provided to ascertain where you might be going wrong and correct your understanding.