Computer Systems Lab

Course Information

  • Language: English
  • Type: Practical training
  • Module: IN0012, IN2106, IN212811
  • SWS: 6
  • ECTS Credits: 10
  • Prerequisites: As such we don’t have any compulsory pre-requisites, but we prefer students to be proficient in the basic concepts of operating systems, distributed systems, systems programming (C/C++/Rust), or equivalent background.
  • Preferred pre-requisite courses at TUM:
    • IN0009 : Basic Principles: Operating Systems and System Software
    • IN0010 : Introduction to Computer Networking and Distributed Systems
    • IN2259: Distributed Systems
    • Praktikum: Systems Programming in C++
    • Strong programming and systems building skills are required.
  • TUM Online: For registration you have to be identified in TUMonline as a student.
    • Note: Compulsory enrollment after the first weeks of the matching outcome; students who fail to de-register in this period will be registered for the exam.
  • Recommended Reading:
    • A list of open-source projects (with papers and source code) will be provided in the first meeting.

Content

The computer systems lab is an advanced course, where the students will work on an open-source project. The goal is to work on real systems in a project-oriented setting, where we work on practical computer systems in a laboratory setting to evaluate them, dissect them and reveal their internals, and modify them to add new features.

Overall, the focus of this will be to learn the art of building computer systems by deploying, analyzing, reproducing, and breaking practical computer systems!

The term computer systems covers a broad range of topics, including distributed systems, systems for machine learning/AI, systems security, large-scale data analytics systems, storage systems, operating systems, file-systems, databases, multicore architectures, synchronization/concurrency primitives, parallel systems, compiler-assisted systems, dependability, reliability, cloud/edge computing, IoT systems, etc. In short, we will focus on software systems that solve important practical problems!

More specifically, the students will be given prominent open-source projects (research papers and associated open-source code) covering the aforementioned areas. The students (in a team of four) will have to accomplish the following primary tasks, with the mentorship of a researcher from our chair:

  • Stage 1: Deployment and evaluation — Understand the system and associated open-source code. Analyze the source code of the system, deploy, and exercise it using real-life workloads.
  • Stage 2: Build and contribution — Implementing additional feature(s) and demonstrating its effectiveness. The students are encouraged to contribute to the project by creating a pull request to get their feature(s) merged into the open-source project.
  • Stage 3: Report and peer-review — Each team will submit a report (~4 pages) that covers their evaluation and contributions. Then each student, independently, will evaluate two reports from other teams.

There will be bonus points for students with accepted pull requests. Additionally, the top students will be nominated/encouraged to participate in the artifact evaluation committee for the major computer systems conferences: OSDI, SOSP, ASPLOS, EuroSys, etc.

In terms of organization, there will be three mandatory meetings:

  • Meeting #1: Kick-off: Project selection and details on how to proceed.
  • Meeting #2: Deployment and evaluation: Presentation on the project overview, deployment, and evaluation in addition to proposed additional feature(s).
  • Meeting #3: Contribution: Final presentation and demo: Demo of the project with the additional feature(s) and the evaluation of their effectiveness.

Additionally, two office hours will be held during the first two stages. Each team will organize this with their mentor.

Objectives

The goal is to gain a deep understanding of how modern computer systems, via open-source projects, are built and designed. More specifically, students will learn to:

  • Concisely explain a complex computer system and the problem it solves.
  • Empirically analyze, deploy, and evaluate a computer system.
  • Extend existing systems with additional features that enhance the state of the art.
  • Oral presentation and writing skills to concisely articulate the technical work.

Teaching and Learning Methods

The course will be split into 5 major components: (a) project understanding, (b) deployment and evaluation, (c) contribution, (d) oral presentations after each stage, (e) writing a technical report to describe the contributions, and (f) peer-review of the reports.

  1. Students will be tasked, in groups of four, to select an open-source computer system published in a recent top systems conference (SOSP, OSDI, EuroSys, ASPLOS, ATC, NSDI, …). Students will have a couple of weeks to read the documentation, paper, and necessary related work, understand them.
  2. Students will then deploy the source code associated with that system. The goal will be to gain a deep experience with technologies used in state of the art systems and to acquire hands-on experience with evaluating complex computer systems.
  3. Students will then be tasked to implement an additional feature(s) that extends the existing system, either to mitigate some of its limitations or expand the use-case to other domains. The goal of this phase is to acquaint students with contributing to open-source projects and thus students are highly encouraged to perform a pull-request to get their contribution merged into the source code of the project.
  4. Oral presentations (15mins + 5 Q/A) will be held in front of the other students after each stage. The audience will also be evaluated on their questions.
  5. Students will write a technical report (~4 pages) that covers the description of the project, the results of exercising the source code, and description and evaluation of the contributions of the team.
  6. Students will also evaluate each others’ reports (two reports in total). Each report will be assigned a number of anonymous reviewers that will evaluate the report and give advice to improve it. The quality of the reviews (argumentation, ways to improve the report, …) will be evaluated.

Instructors