Upgrade to Pro — share decks privately, control downloads, hide ads and more …

A Practical Look at Performance Theory

kavya
September 27, 2018

A Practical Look at Performance Theory

How does your system perform under load? What are the bottlenecks, and how does it fail at its limits? How do you stay ahead as your system evolves and its workload grows?

Performance theory offers a rigorous and practical (-- yes!) approach to performance tuning and capacity planning. In this talk, we’ll dive into elegant results like Little’s Law and the Universal Scalability Law. We’ll explore the use of performance theory in real systems at companies like Facebook, and discuss how we can leverage it too, to prepare our systems for flux and scale.

kavya

September 27, 2018
Tweet

More Decks by kavya

Other Decks in Programming

Transcript

  1. performance capacity • What’s the additional load the system can

    support, 
 without degrading response time? • What’re the system utilization bottlenecks? • What’s the impact of a change on response time,
 maximum throughput? • How many additional servers to support 10x load? • Is the system over-provisioned?
  2. #YOLO method
 load simulation
 Stressing the system to empirically determine

    actual 
 performance characteristics, bottlenecks.
 Can be incredibly powerful. performance modeling
  3. performance modeling real-world system theoretical model results analyze translate back

    model as* * makes assumptions about the system: request arrival rate, service order, times. cannot apply the results if your system does not satisfy them!
  4. a cluster of many servers the USL scaling bottlenecks a

    single server open, closed queueing systems
 utilization law, Little’s law, the P-K formula CoDel, adaptive LIFO stepping back the role of performance modeling
  5. model I clients web server “how can we improve the

    mean response time?” “what’s the maximum throughput of this server, given a response time target?” response time (ms) throughput (requests / second) response time threshold
  6. model the web server as a queueing system. web server

    request response queueing delay + service time = response time } }
  7. model the web server as a queueing system. assumptions 1.

    requests are independent and random, arrive at some “arrival rate”. 2. requests are processed one at a time, in FIFO order;
 requests queue if server is busy (“queueing delay”). 3. “service time” of a request is constant. web server request response queueing delay + service time = response time } }
  8. model the web server as a queueing system. assumptions 1.

    requests are independent and random, arrive at some “arrival rate”. 2. requests are processed one at a time, in FIFO order;
 requests queue if server is busy (“queueing delay”). 3. “service time” of a request is constant. web server request response queueing delay + service time = response time } }
  9. model the web server as a queueing system. assumptions 1.

    requests are independent and random, arrive at some “arrival rate”. 2. requests are processed one at a time, in FIFO order;
 requests queue if server is busy (“queueing delay”). 3. “service time” of a request i.e. request size is constant. web server request response queueing delay + service time = response time } }
  10. “What’s the maximum throughput of this server?” i.e. given a

    response time target arrival rate increases server utilization increases utilization = arrival rate * service time “busyness” utilization arrival rate Utilization law
  11. “What’s the maximum throughput of this server?” i.e. given a

    response time target arrival rate increases server utilization increases linearly Utilization law
  12. “What’s the maximum throughput of this server?” i.e. given a

    response time target P(request has to queue) increases, so
 mean queue length increases, so mean queueing delay increases. arrival rate increases server utilization increases linearly Utilization law
  13. “What’s the maximum throughput of this server?” i.e. given a

    response time target P(request has to queue) increases, so
 mean queue length increases, so mean queueing delay increases. arrival rate increases server utilization increases linearly Utilization law P-K formula
  14. Pollaczek-Khinchine (P-K) formula mean queueing delay = U * linear

    fn (mean service time) * quadratic fn (service time variability) (1 - U) assuming constant service time and so, request sizes: mean queueing delay ∝ U (1 - U) utilization (U) response time since response time ∝ queueing delay utilization (U) queueing delay
  15. “What’s the maximum throughput of this server?” i.e. given a

    response time target arrival rate increases server utilization increases linearly Utilization law P-K formula mean queueing delay increases non-linearly; so, response time too. response time (ms) throughput (requests / second) low utilization regime
  16. “What’s the maximum throughput of this server?” i.e. given a

    response time target arrival rate increases server utilization increases linearly Utilization law P-K formula mean queueing delay increases non-linearly; so, response time too. response time (ms) throughput (requests / second) max throughput low utilization regime high utilization regime
  17. “How can we improve the mean response time?” 1. response

    time ∝ queueing delay prevent requests from queuing too long • Controlled Delay (CoDel)
 in Facebook’s Thrift framework
 • adaptive or always LIFO
 in Facebook’s PHP runtime, 
 Dropbox’s Bandaid reverse proxy. • set a max queue length • client-side concurrency control
  18. “How can we improve the mean response time?” onNewRequest(req, queue):

    if (queue.lastEmptyTime() < (now - N ms)) { // Queue was last empty more than N ms ago; // set timeout to M << N ms.
 timeout = M ms
 } else { // Else, set timeout to N ms.
 timeout = N ms
 } 
 queue.enqueue(req, timeout) 1. response time ∝ queueing delay prevent requests from queuing too long • Controlled Delay (CoDel)
 in Facebook’s Thrift framework
 • adaptive or always LIFO
 in Facebook’s PHP runtime, 
 Dropbox’s Bandaid reverse proxy. • set a max queue length • client-side concurrency control key insight: queues are typically empty; allows short bursts, prevents standing queues
  19. “How can we improve the mean response time?” 1. response

    time ∝ queueing delay prevent requests from queuing too long • Controlled Delay (CoDel)
 in Facebook’s Thrift framework
 • adaptive or always LIFO
 in Facebook’s PHP runtime, 
 Dropbox’s Bandaid reverse proxy. • set a max queue length • client-side concurrency control newest requests first, not old requests 
 that are likely to expire. helps when system is overloaded, 
 makes no difference when it’s not. key insight: queues are typically empty; allows short bursts, prevents standing queues
  20. “How can we improve the mean response time?” 2. response

    time ∝ queueing delay U * linear fn (mean service time) * quadratic fn (service time variability) (1 - U) P-K formula decrease service time by optimizing application code } optimized decrease request / service size variability for example, by batching requests } batched
  21. the cloud industry site N sensors server while true: //

    upload synchronously. ack = upload(data) // update state, // sleep for Z seconds. deleteUploaded(ack) sleep(Z seconds) processes data from N sensors model II
  22. • requests are synchronized. • fixed number of clients. throughput

    depends on response time!
 queue length is bounded (<= N), so response time bounded! } This is called a closed system. super different that the previous web server model (open system). server N clients ] ] response request
  23. response time vs. load for closed systems assumptions 1. sleep

    time (“think time”) is constant. 2. requests are processed one at a time, in FIFO order. 3. service time is constant. What happens to response time in this regime? Like earlier, as the number of clients (N) increases: throughput increases to a point i.e. until utilization is high.
 after that, increasing N only increases queuing. throughput number of clients low utilization regime high utilization regime
  24. Little’s Law for closed systems server sleeping waiting being processed

    ] ] the total number of requests in the system includes requests across the states. a request can be in one of three states in the system: sleeping (on the device), waiting (in the server queue), being processed (in the server). the system in this case is the entire loop i.e. N clients
  25. Little’s Law for closed systems # requests in system =

    throughput * round-trip time of a request across the whole system sleep time + response time sleep time queueing delay + service time = response time server ] ] So, response time only grows linearly with N! N = constant * response time applying it in the high utilization regime (constant throughput) and assuming constant sleep: N clients
  26. response time vs. load for closed systems So, response time

    for a closed system: number of clients response time Like earlier, as the number of clients (N) increases: throughput increases to a point i.e. until utilization is high.
 after that, increasing N only increases queuing. high utilization regime:
 grows linearly with N. low utilization regime: response time stays ~same high utilization regime
  27. response time vs. load for closed systems So, response time

    for a closed system: number of clients response time Like earlier, as the number of clients (N) increases: throughput increases to a point i.e. until utilization is high.
 after that, increasing N only increases queuing. arrival rate response time way different than for an open system: high utilization regime high utilization regime high utilization regime:
 grows linearly with N. low utilization regime: response time stays ~same
  28. open v/s closed systems • how throughput relates to response

    time. • response time versus load, especially in the high load regime. closed systems are very different from open systems: uh oh…
  29. standard load simulators typically mimic closed systems So, load simulation

    might predict: • lower response times than the actual system yields • better tolerance to request size variability • smaller effects of different scheduling policies • other differences you probably don’t want to find out in production… open v/s closed systems …but the system with real users may not be one! A couple neat papers on the topic, workarounds: Open Versus Closed: A Cautionary Tale How to Emulate Web Traffic Using Standard Load Testing Tools for example: scale “think time” along with number of virtual clients s.t. the ratio remains constant.
  30. clients cluster of web servers load balancer “How many servers

    do we need to support a target throughput?” while keeping response time the same capacity planning! “How can we improve how the system scales?” scalability
  31. max throughput of a cluster of N servers = max

    single server throughput * N ? “How many servers do we need to support a target throughput?” while keeping response time the same no, systems don’t scale linearly. • contention penalty
 due to serialization for shared resources.
 examples: database contention, lock contention.
 • crosstalk penalty
 due to coordination for coherence. examples: servers coordinating to synchronize
 mutable state. αN
  32. max throughput of a cluster of N servers = max

    single server throughput * N ? “How many servers do we need to support a target throughput?” while keeping response time the same no, systems don’t scale linearly. • contention penalty
 due to serialization for shared resources.
 examples: database contention, lock contention.
 • crosstalk penalty
 due to coordination for coherence. examples: servers coordinating to synchronize
 mutable state. αN βN2
  33. Universal Scalability Law (USL) throughput of N servers = N

    (αN + βN2 + C) N (αN + βN2 + C) N C N (αN + C) contention and crosstalk linear scaling contention throughput cluster size
  34. “How can we improve how the system scales?” Avoid contention

    (serialization) and crosstalk (synchronization). • better load balancing strategies: best of two random choices • fine-grained locking • MVCC databases • etc. • smarter aggregation in Facebook’s SCUBA data store uses an aggregation tree to parallelize aggregation. • smarter data partitioning, smaller partitions in Facebook’s TAO cache assigning shards to cache serves takes into account frequency of access.
  35. modeling requires assumptions that may be difficult to practically validate.

    but, gives us a rigorous framework to: • determine what experiments to run
 run experiments needed to get data to fit the USL curve, response time graphs. • interpret and evaluate the results
 load simulations predicted better results than your system shows • decide what improvements give the biggest wins
 improve mean service time, reduce service time variability, remove crosstalk etc. the role of performance modeling most useful in conjunction with empirical analysis. load simulation, experiments
  36. modeling requires assumptions that may be difficult to practically validate.

    but, gives us a rigorous framework to: • determine what experiments to run
 run experiments needed to get data to fit the USL curve, response time graphs. • interpret and evaluate the results
 load simulations predicted better results than your system shows. • decide what improvements give the biggest wins
 improve mean service time, reduce service time variability, remove crosstalk etc. the role of performance modeling most useful in conjunction with empirical analysis. load simulation, experiments
  37. load simulation results with increasing number of virtual clients (N)

    = 1, …, 100 … load simulator hit a bottleneck. response time number of clients wrong shape for response time curve! should be one of the two curves above number of clients response time
  38. modeling requires assumptions that may be difficult to practically validate.

    but, gives us a rigorous framework to: • determine what experiments to run
 run experiments needed to get data to fit the USL curve, response time graphs. • interpret and evaluate the results
 load simulations predicted better results than your system shows. • decide what improvements give the biggest wins
 improve mean service time, reduce service time variability, remove crosstalk etc. the role of performance modeling most useful in conjunction with empirical analysis. load simulation, experiments
  39. @kavya719 speakerdeck.com/kavya719/a-practical-look-at-performance-theory Special thanks to Eben Freeman for reading drafts

    of this. References 
 Performance Modeling and Design of Computer Systems, Mor Harchol-Balter Practical Scalability Analysis with the Universal Scalability Law, Baron Schwartz Open Versus Closed: A Cautionary Tale How to Emulate Web Traffic Using Standard Load Testing Tools A General Theory of Computational Scalability Based on Rational Functions Queuing Theory, In Practice Fail at Scale Kraken: Leveraging Live Traffic Tests SCUBA: Diving into Data at Facebook
  40. a few extra notes… The open system model used is

    called an M/D/1 system using Kendall notation; we assumed a Poisson arrival process (“M” for memoryless) , deterministic service time distribution (“D”), and a single server (the 1) with an infinite buffer and using a First-Come-First-Serve service discipline. The P-K formula assumes a memoryless arrival process and cannot be applied otherwise. In the closed system, load can also be increased by decreasing think time.
  41. On CoDel at Facebook: “An attractive property of this algorithm

    is that the values of M and N tend not to need tuning. Other methods of solving the problem of standing queues, such as setting a limit on the number of items in the queue or setting a timeout for the queue, have required tuning on a per-service basis. We have found that a value of 5 milliseconds for M and 100 ms for N tends to work well across a wide set of use cases. “ Using LIFO to select thread to run next, to reduce mutex, cache trashing and context switching overhead: