Performance Engineering

Module aims

Performance engineering is the area of computer science ensuring that IT systems are responsive, scalable, and efficient.  The course aims at introducing fundamental principles and techniques used in performance management of IT systems, including stand-alone applications and distributed systems, e.g. running in the cloud.

Learning outcomes

Upon successful completion of this module you will be able to:

  • design and build benchmarks and use them to analyse system performance
  • provision computing resources to meet performance requirements for a given application
  • resolve performance bottlenecks in software and hardware systems using appropriate state-of-the-art tools and techniques
  • trade-off different resources in order to achieve balance in their utilisation   

Module syllabus

  • Performance engineering methodology
  • Profiling systems to find bottlenecks
  • Micro-benchmarking
  • Critical sections
  • Cost modeling
  • Load-testing
  • Workload characterisation
  • Resource management
  • Scaling (up and out)
  • Principles of manual and automatic tuning techniques

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, profiling, and load testing. Building on this understanding, you will be exposed to techniques to optimise 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 components. Case studies arising from databases, cloud computing, stream processing systems, computer games, and other application areas will be used to contextualise 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.

The Piazza Q&A web service will be used as an open online discussion forum for the module.

Assessments

The module will feature two coursework components: the first will cover the first half of the course and will be based on three independent assessed exercises given at different point of the module; the second component will cover the second half of the course and will be based on a single assessed exercise. 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 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 written feedback on your individual submission and in-class and/ or written feedback explaining common pitfalls and suggestions for improvement.

Module leaders

Dr Holger Pirk
Dr Giuliano Casale