General Information
| Course Code | XB_0150 |
|---|---|
| Credits | 6 EC |
| Period | P1 |
| Course Level | 300 |
| Language of Tuition | English |
| Faculty | Faculty of Science |
| Course Coordinator | dr. D. Bonetta |
| Examiner | dr. D. Bonetta |
| Teaching Staff |
mr. S. Ud Din dr. D. Bonetta ir. J.J.R. Donkervliet MSc B. Chandrasekaran |
|
Part of programme(s)
Bachelor
Premaster
Use the arrow keys to navigate the list, Enter to select, and Escape to close.
|
|
Practical Information
You need to register for this course yourself. The (de)registration deadlines can be found on VU.nl
| Teaching Methods | Seminar, Practical, Lecture |
|---|
Course Objective
The objective of this course is to teach students advanced and practical concepts in systems and network programming, with an emphasis on performance in modern computing environments. Upon completion of this course, students will be able to:
- Understand end-host systems and networking concepts [Knowledge and understanding]
- Analyze various network stack designs (kernel, userspace), APIs (e.g., sockets, select, epoll) and their usage in high-performance applications (async I/O, multi-threading), with a focus on design trade-offs, performance, and implementation efforts [Applying knowledge and understanding] [Making judgements]
- Use Linux concepts and tools (e.g., perf, strace, bpftrace, tcpdump, ethtool, ping) for debugging and performance analysis [Knowledge and understanding] [Applying knowledge and understanding]
- Explain design and implementation challenges associated with multi-core systems and high-speed networks [Applying knowledge and understanding] [Making judgements]
- Understand how performance considerations influence the design of networked and concurrent applications (e.g., scalable Node.js/Go HTTP servers) [Knowledge and understanding] [Making judgements]
- Analyze and optimize user-level and system-level performance in high-throughput networking applications using profiling tools and benchmarking techniques [Applying knowledge and understanding] [Lifelong learning skills]
- Understand ongoing and emerging research challenges in systems and networking technologies [Knowledge and understanding] [Lifelong learning skills]
- Apply the knowledge gained into building a practical high-performance networking application [Applying knowledge and understanding] [Lifelong learning skills] [Communication]
Course Content
The course covers recent advancements in systems and networking technologies in general-purpose computing (e.g., data center, cloud computing). The course is split into two themes: end-host systems and network infrastructure.
In the end-host systems theme, students will learn key concepts in networking and systems design with a focus on performance, scalability, and efficient use of modern hardware. Topics include networking concepts (stateful and stateless offloading, RSS, SGE, multiqueue NICs), internals of the Linux networking stack, tools (ping, tcpdump, perf, strace), challenges associated with building high-performance software (benchmarking, profiling), and performance optimizations (many/multi-core scalability, asynchronous IO). Students will also explore how user-level network applications (for example, Node.js, Go) operate and interact with the operating system’s networking stack and how design decisions affect performance and responsiveness.
The second theme of the course will be focused on the recent development in network infrastructure and its management. Students will learn the details about the protocols running on our Internet and how the Internet is managed with new approaches like software-defined networking, and how to utilize these new technologies to build popular Internet applications/services.
Additional Information Teaching Methods
2x Lectures per week, Practical coding group project (with 2 or 3 students) with 1 lab session per week for QA (deliverables: code and report)
Method of Assessment
Exam (50%, 50 points), Practical Assignments (50%, 50 points over 5 assignments) – resits only available for the exam. Both the exam and the practical assignment need to be passed separately. Their cut off is 25 points for both. A total of (25 + 25 =) 50 / 100 points will give you a grade of 6.0/10.
Students are graded on both the completion of the assignment as well as their understanding of the material. Please note that your grade will be registered as follows:
- If you do not submit any assignment and do not participate in the exam, you will receive an NS.
- In all other cases, you will receive either a numeric grade or incomplete (NVD).
- If you did not meet the minimum grade requirements for the assignments or the exam, your grade is NVD.
- If you plan to drop the course, do not submit anything, as NVD is administratively considered a failing grade
Literature
Slides (provided in the class), project handbook, and further online reading material/links.
Additional Information Target Audience
Minor Deep ProgrammingRecommended background knowledge
IMPORTANT: Knowledge of C/C++ is essential for the practical assignments. Knowledge of other languages or frameworks such as Node.js/Go is not a requirement.
Operating systems (userspace, kernel, processes, memory management), System Architecture (I/O devices, interrupts, CPU caches), Computer Networks (TCP/IP, Ethernet, Packet switching networks, HTTP), good knowledge of C/C++ programming (important) with sockets, Linux build and coding environment (bash, CMake, gdb, gcc, make and friends). Courses that cover this background systems knowledge include X 400487 Computer Networks, X 405067 Operating Systems, XB 40009 Computer Organization. It is strongly recommended that you must finish these courses before you take this course.
In case you lack these skills and/or knowledge, we can provide additional reading material, however, you need to study them by yourself outside the class hours. Keep in mind this is not a course to learn how to program in C/C++ or learn about networking concepts like how to program sockets or what is TCP/IP or HTTP. This is an advanced course that focuses on low-level details of designing and programming a high-performance networking application.