System Performance Engineering

Module aims

Performance engineering is the area of computer science ensuring that computer systems (comprised of hardware as well as software) are responsive, scalable, and efficient.  The course aims at introducing fundamental principles and techniques used in performance management of modern computer systems, either purpose-built applications or generic system (single-node as well as distributed). In particular, in this module you will have the opportunity to learn to:

  • Design, conduct and interpret a meaningful performance assesments for a given system or application through benchmarking, monitoring and profiling
  • Provision computing resources to meet performance requirements for a given system or application
  • Resolve performance bottlenecks in software and hardware systems using the appropriate tools and techniques
  • Trade-off different resources for each-other to achieve balance in their utilization

Learning outcomes

The learning outcomes of this module are as follows:

  • explain and apply the design principles, techniques, tools and metrics of performance assessment
  • make and explain performance trade-offs in software and hardware systems
  • forecast performance of a system or application with the aim to improve it
  • apply the principles, techniques and tools of performance-optimization

Module syllabus

This module covers the following topics:

  • Performance engineering methodology
  • Profiling systems to find bottlenecks
  • Macro and micro-benchmarking
  • Critical sections
  • Cost modeling
  • Resource management
  • Scaling (up and out)
  • Single-thread, multi-thread and multi-process performance (analysis and optimization)
  • Performance-critical operating system features used by applications
  • Specialized devices

Teaching methods

This module is motivated by the problem of efficiently running computer systems in spite of uncertainties and variabilities in the workloads that they process. The module will first deliver a set of methods, both practical and analytical, to understand and quantify the performance of an existing computer system through benchmarking, tracing and profiling. Building on this understanding, you will be exposed to techniques to optimize the performance of the system, alleviating performance bottlenecks, while being aware of the expected impacts on costs, resource saturation, and quality-of-service experienced by the end users or the running applications. These methods and techniques will be learned through lectures and practical exercises assessed as part of the coursework component. Case studies arising from databases, cloud computing, stream processing systems, computer games, and other application areas will be used to contextualize and motivate the study of these methods. The key idea is for you to learn how to abstract enough the specific implementation details of a given system through general notions that can help you understand and optimise the performance of arbitrary computer systems.

An online service will be used as a discussion forum for the module. 

Assessments

The course will feature two assessed coursework components: the first will cover the first half of the course, the other the second half of the course. Coursework will normally involve work with actual computer systems, either on your own or in small groups (usually two students per group, depending on the nature of the problem). These courseworks are equally weighted and, together, count for 20% of the marks for the module. There will be a final written exam, which will test both theoretical and practical aspects of the subject. This exam counts for the remaining 80% of the marks.

There will be detailed feedback on the coursework exercises which will include:
  a) written feedback on your individual submission
  b) in-class and/or written feedback explaining common pitfalls and suggestions for improvement

Module leaders

Dr Holger Pirk
Dr Lluis Vilanova

Reading list

To be advised - module reading list in Leganto