About The Trainer

Martin Thompson is one of the world’s foremost experts on concurrency and low-latency software.

Having spent many years designing and developing systems for some of the busiest exchanges in the world, Martin now works as an independent consultant and trainer.

Martin is in huge demand both as a conference speaker and as a trainer, and has been packing in the crowds at JavaOne, QCon, GOTO, and much more besides.

Overview

This course is aimed at senior developers who want to learn how to make performance testing and profiling an integral part of their approach to CI or Continuous Delivery. Candidates will learn how to micro benchmark components, then assemble them into performance tested services. The pattern repeats until eventually the system as a whole is performance tested.

In parallel with performance testing the candidates will learn how to profile an application at all levels of the stack right down to the hardware level using a combination of tools. By learning how to measure and reason about the computing resource building blocks, the delegates will learn how to construct a model of what performance is possible for a given component or service. This is the essence of Mechanical Sympathy.

The course is a blend of lectures, coding exercises, and workshops. Candidates should bring a laptop capable of running at least 4 threads concurrently, i.e. dual core with Hyperthreading enabled, and a native Linux operating system installed.

Outline

Understanding Modern Hardware

  • CPU Pipelines & Instruction Processing
  • Cache Sub-Systems
  • Main Memory
  • PCI-e and NUMA Interconnects
  • Hard Disk Drives
  • Solid State Drives
  • Networking

Computing Resource Fundamentals

  • Memory Latency & Throughput
  • Network Latency & Throughput
  • Storage Latency & Throughput
  • Locks and Condition Variables

Linux Operating System Fundamentals

  • Virtual Memory Management
  • Scheduling
  • File Systems
  • Networking

Java Virtual Machine Fundamentals

  • JIT Compilation
  • Garbage Collectors

Performance Testing Theory

  • Statistics 101
  • Big O Notation & Algorithms
  • Clean Room Experiments
  • Realistic Test Cases
  • Micro Benchmarking
  • Concurrent Testing
  • Service Level Testing

Profiling

  • Interpreting a Profile
  • CPU Utilisation
  • Object Allocation and Heap Usage
  • Lock Contention
  • Garbage Collection
  • Operating System Tracing
  • Hardware Performance Counters

Development Practices

  • Data Representations
  • Clean Code and Anti-Patterns
  • Performance Testing and CI
  • Team Culture
  • Getting the balance right
  • Telemetry and Instrumentation

Requirements

Please bring a laptop with native Linux installed and capable of running at least 4 concurrent threads. That is, a quad core or dual core with hyperthreading. You should also have Java 8 and your favourite IDE installed.