Performance Engineering and System Design Handbook
Appendix N — Further Reading Map
Route a performance knowledge gap to primary mechanisms, standards, textbooks, and engineering reports without mistaking a bibliography for evidence.
You finish a design drill with one consequential blank: nobody can explain whether the queueing result assumes an open arrival process, whether regional promotion preserves one authority, or whether an inference benchmark represents the production request mix. What should you read next?
Do not begin with the subject’s largest book or the newest systems paper. Name the missing claim first. Then choose a short path containing three different forms of evidence:
- a model source that defines the relationship or abstraction;
- a mechanism source that explains what a real system can do; and
- a method or application source that shows how to test, operate, or bound it.
The result of reading is not “I know this topic.” It is a revised model, a more precise claim, and an experiment or design question that could prove the claim wrong. No source here establishes the performance of your system. Each supports a particular kind of reasoning inside a declared transfer limit.
The machine-readable companion at examples/performance-engineering-system-design-handbook/appendices/further-reading-map/sources.json records all 33 sources, annotations, limits, and five reading paths. verify-map.mjs checks that the catalog covers every required concept and source form. The tables below are the reader-facing route map, not a ranked bibliography.
Read by gap, not prestige
Use four fields before following a link:
| Field | Question | Bad shortcut |
|---|---|---|
| missing claim | What exact sentence can the team not yet defend? | “We need to learn distributed systems.” |
| source job | Do we need a model, mechanism, specification, measurement method, or operating report? | Choosing one famous source for every job. |
| expected trace | What will we produce: an equation with assumptions, state machine, experiment, or transfer ledger? | Highlighting without changing the design. |
| transfer limit | Which ISA, kernel, workload, topology, failure, version, or organization bounds the source? | Treating publication as universal validity. |
Source kind is a clue, not a quality ranking. A seminal paper often gives a clean original mechanism but freezes one system in time. A standard defines an interface or method but does not report your implementation’s behavior. A textbook integrates concepts but can smooth away version-specific detail. Official documentation names current behavior but may say little about comparison or failure history. A high-quality engineering report exposes decisions and operational lessons, yet its fleet, risk tolerance, and organizational controls are not yours.
Read an original paper to understand what problem a mechanism was designed to solve. Read a current specification or official manual before asserting what a deployed version guarantees. Read an independent or cross-cutting model to identify assumptions the implementation source does not emphasize. Finally, measure the selected boundary.
Computer architecture and operating systems
Start here when application behavior cannot be explained from source code or host averages. The recurring question is where work becomes instructions, cache and translation activity, scheduling delay, kernel work, device interaction, or waiting—and which observation can distinguish those paths.
| Source | What it adds | Claim it can support—and limit |
|---|---|---|
| Computer Systems: A Programmer’s Perspective | A programmer-visible path through representation, compilation, linking, virtual memory, exceptional control flow, I/O, and concurrency. | Supports the systems-level claim that code cost emerges across compiler, machine, and OS layers. Its examples are edition and platform specific; remeasure on the deployed ISA, compiler, kernel, and hardware. |
| Intel 64 and IA-32 optimization material | Vendor documentation for instruction and microarchitectural behavior, performance monitoring, memory, and optimization on covered Intel processors. | Supports an Intel-specific explanation of front-end, execution, cache, translation, and vector costs. It cannot authorize an AMD, Arm, or different-generation claim. |
| Linux kernel memory barriers | The kernel’s ordering vocabulary: compiler barriers, CPU barriers, acquire/release operations, dependencies, and architecture variation. | Supports claims about ordering in covered kernel code. It is not the C++, Java, Go, or Rust language memory model and is not a proof of an application algorithm. |
| Linux Pressure Stall Information | CPU, memory, and I/O pressure expressed as time tasks lose because a resource is unavailable. | Supports the diagnostic proposition that low average utilization can coexist with consequential stalls. PSI identifies pressure, not root cause; accounting and attribution still require verification. |
| Perf events and tool security | Access control, sensitive data classes, capability boundaries, and resource controls for Linux performance events. | Supports treating profiling as an authorized, bounded evidence capture. Kernel, distribution, container, and organizational policies determine what is actually safe and available. |
| Linux BPF documentation | Kernel-maintained program types, maps, tracing interfaces, verifier constraints, and runtime rules. | Supports mechanism claims about BPF instrumentation. It does not establish that a probe is semantically valid, low overhead, private, or supported on another kernel. |
A useful order for a host-tail gap
If fleet CPU is 45% while response p99 and runnable delay rise, do not jump straight to a microarchitecture manual. First use Computer Systems to draw the user-code-to-resource path. Use PSI to decide whether tasks lose time to CPU, memory, or I/O pressure at the relevant cgroup and interval. Read the perf security guide before requesting samples. Only then use the vendor manual to interpret counters for the exact processor.
The reading deliverable is a causal diagram and an evidence request: affected population, clock, suspected wait or service stage, counter or trace, capture duration, overhead bound, access owner, and result that would reject the hypothesis. “The CPU is slow” is not a deliverable.
Queueing, measurement, and experimental design
Use this region when a graph looks persuasive but its population, arrival semantics, stability, uncertainty, or causal comparison is unclear. The central discipline is to keep a mathematical identity, an approximation, a metric definition, and an experimental result in their proper categories.
| Source | What it adds | Claim it can support—and limit |
|---|---|---|
| Little, “A Proof for the Queuing Formula: L = λW” | The foundational long-run relationship among average population, effective arrival rate, and average time in a stable system. | Supports Little’s Law when boundary, conservation, population, interval, and stability are explicit. It does not supply a distribution or diagnose why time increased. |
| Kingman, “The single server queue in heavy traffic” | A heavy-traffic approximation connecting wait with utilization and arrival and service variability. | Supports the qualitative warning that variability and near-saturation operation can make waiting grow sharply. Its assumptions do not automatically fit priority, multi-stage, closed-loop, or nonstationary systems. |
| NIST/SEMATECH e-Handbook of Statistical Methods | Methods for exploratory analysis, uncertainty, process modeling, experimental design, and statistical control, organized by analysis job. | Supports choosing procedures that match the data-generating process and checking assumptions. Statistics cannot repair a biased workload, changed outcome definition, or uncontrolled treatment. |
| RFC 6815: Applicability Statement for RFC 2544 | A concrete account of why a laboratory device benchmark can be harmful and invalid when moved into production networks. | Supports the broader transfer-limit rule that method validity belongs to a boundary. Its direct domain is networking; other systems need their own safety and validity analysis. |
| HdrHistogram coordinated-omission guidance | A reproducible explanation of how a waiting load generator can suppress intended arrivals during a stall and understate latency. | Supports auditing open versus closed arrival semantics and load-generator behavior. Post-hoc correction cannot recreate all loss, admission, retry, and causal behavior. |
| ACM Artifact Review and Badging | Separate terms for artifact availability, functional review, reproducibility, and independent replication. | Supports keeping “files exist,” “results reproduce,” and “another team replicated the claim” distinct. A badge does not prove production representativeness. |
| RFC 6390: Guidelines for New Performance Metrics | A template for observable events, units, sampling, calibration, method, and applicability. | Supports rejecting a metric that lacks a defined event, method, population, or interpretation. It does not decide which application outcome matters. |
Pair sources by role. Little’s Law can expose a conservation error; Kingman’s approximation can explain why variability deserves a sensitivity analysis; neither validates a benchmark. NIST can guide an experimental comparison; it cannot repair a load generator whose behavior changed under delay. The HdrHistogram discussion exposes that mechanism. RFC 6815 then asks whether the resulting method is safe and meaningful at the chosen boundary.
The expected trace is an experiment card: claim, unit of work, offered and admitted process, inclusion and loss rules, baseline and treatment, controlled factors, randomized or blocked factors, warm-up and steady state, repetition, uncertainty, raw artifact, stop rule, and transfer limit.
Databases, storage, networking, and distributed systems
Enter here with a named state or protocol obligation. “Learn replication” is too broad. Ask whether you need to explain leader authority, acknowledgement durability, read visibility, partition placement, transport completion, device queues, or recovery.
| Source | What it adds | Claim it can support—and limit |
|---|---|---|
| Ongaro and Ousterhout, “In Search of an Understandable Consensus Algorithm” | A decomposition of replicated-log consensus into election, log replication, safety, and membership change. | Supports reasoning about majority availability, leader authority, terms, and log safety. Raft alone does not define client deduplication, database transactions, storage durability, reads, or operations. |
| Spanner | A composition of synchronous replication, clock-uncertainty bounds, MVCC, placement, and transaction protocols in a global database. | Supports the need for explicit authority, timing assumptions, coordination, and failure paths in external-consistency claims. It does not promise another system’s latency, availability, or clock bounds. |
| Bigtable | An ordered key model connected to tablets, locality, metadata, compaction, caching, and distributed operations. | Supports claims that key design, placement, background maintenance, and skew shape storage behavior. Modern implementations may retain the model while changing mechanisms. |
| RFC 9293: TCP | The current core protocol specification for sequencing, reliability, state, flow control, and connections. | Supports protocol-level claims about TCP ordering and completion. It does not define every congestion controller, kernel, middlebox, or application outcome. |
| RFC 9000: QUIC and RFC 9002: QUIC recovery | Transport streams, connection migration, packet state, security integration, loss detection, RTT estimation, and congestion response. | Support QUIC mechanism and observability claims. Endpoint implementation, HTTP/3, path, version, and configuration determine observed performance. |
| NVM Express specifications | Command, queue, namespace, management, and transport interfaces for host-to-device storage. | Supports mechanism claims about submissions and completions. A protocol specification is not evidence for media latency, filesystem durability, firmware behavior, or application goodput. |
| Designing Data-Intensive Applications, second edition | A comparative synthesis of storage, replication, partitioning, transactions, distributed failure, and stream and batch systems. | Supports vocabulary and trade-off analysis. Use a selected implementation’s current specification and evidence before making product claims. |
A useful order for regional authority
Suppose a review promises “automatic failover with no lost writes.” Read Raft to separate elected log authority from client-visible business completion. Read Spanner to see how one implemented system connects replication with time and transaction semantics. Use Designing Data-Intensive Applications to compare alternative consistency and replication structures. Then consult the actual database and transport specifications.
The output is not “use consensus.” It is a state and failure ledger: unique effect, client identity, authority, acknowledgement point, durable media, replica set, quorum, fencing, ambiguous outcomes, read rule, RPO, RTO, degraded capacity, repair demand, and evidence for each failure class. Network reachability and consensus safety do not by themselves deliver exactly one external business effect.
Reliability, capacity, and performance engineering
Use this region when the mechanism is understood but the service needs an objective, headroom policy, overload response, retry budget, tail strategy, or recovery plan. These sources are strongest when translated into an explicit control loop rather than copied as configuration advice.
| Source | What it adds | Claim it can support—and limit |
|---|---|---|
| Google SRE: Service Level Objectives | A method connecting user-visible indicators, objectives, measurement, and operational decisions. | Supports replacing component thresholds with scoped service outcomes. Each service still needs its own population, loss policy, risk tolerance, and governance. |
| Google SRE: Handling Overload | Request-cost accounting, per-customer limits, client throttling, graceful degradation, and load balancing. | Supports overload protection around useful work, fairness, admission, and feedback. Its policies and units must be redesigned for the target service. |
| Google SRE: Addressing Cascading Failures | A causal treatment of queues, retries, dependencies, overload, and slow recovery as positive feedback. | Supports retry-amplification, shedding, bounded-queue, and recovery-reserve models. It supplies hypotheses, not a diagnosis of every incident. |
| Dean and Barroso, “The Tail at Scale” | The amplification of component tails through fan-out and techniques for reducing variation or masking stragglers. | Supports modeling end-to-end tails with dependency count, completion rules, utilization, and correlation. Hedging can amplify load or duplicate effects and needs capacity and correctness bounds. |
| Amazon Builders’ Library: Timeouts, retries, and backoff with jitter | An operational account of timeout selection, retry placement, exponential backoff, jitter, and token-bucket control. | Supports treating retries as an end-to-end feedback budget. Its example values do not transfer across dependencies, deadlines, idempotency rules, and load shapes. |
| Amazon Builders’ Library: Using load shedding to avoid overload | Strategies for rejecting work deliberately to keep a service within a useful operating region. | Supports bounded refusal when admission precedes scarce work and callers respond safely. Shedding can move overload, create unfairness, or trigger retries. |
Read the SLO chapter before selecting a capacity number: capacity exists only relative to a valid outcome and objective. Read overload and cascading-failure material together so a local limiter is analyzed with caller behavior and recovery. Use The Tail at Scale only after defining fan-out and completion semantics. A hedge that wins latency by doubling non-idempotent work is not a performance success.
The reading trace is a control contract: signal and population, protected goodput, admission boundary, priority and fairness unit, queue bound, retry owner and budget, degraded mode, failure and recovery reserve, action threshold, reaction time, stop condition, and test plan.
Streaming, search, analytics, and ML systems
These systems share large state, variable work, asynchronous execution, and expensive correctness checks, but they do not share one performance model. Route the gap to clocks and state for streaming, index and scoring behavior for search, stage and scan behavior for analytics, or model quality and serving scenario for ML.
| Source | What it adds | Claim it can support—and limit |
|---|---|---|
| Akidau et al., “The Dataflow Model” | Event and processing time, windows, triggers, watermarks, accumulation, and updates for unbounded data. | Supports explicit clock, lateness, completeness, state, and correction semantics. It does not choose a business guarantee or engine implementation. |
| MapReduce | A restricted batch model composed with partitioning, locality, stage scheduling, straggler handling, and failure recovery. | Supports reasoning about shuffle, stage barriers, locality, skew, and recomputation. Interactive, streaming, iterative, and disaggregated engines differ. |
| Dremel | Columnar nested-data representation and multi-level execution for interactive analytics. | Supports claims about scan reduction, encoding, execution fan-out, aggregation, and stragglers. It does not characterize another warehouse’s optimizer, isolation, or cache state. |
| Apache Lucene scoring documentation | The versioned scoring abstraction and collection and term statistics used by Lucene similarities. | Supports mechanism claims about scoring inputs. It does not establish relevance quality, query-plan cost, segment behavior, or end-to-end latency. |
| MLPerf Inference documentation | Scenarios, load generation, latency and throughput metrics, accuracy checks, divisions, compliance, and artifacts. | Supports comparison only with declared model, quality, scenario, rules, and system boundary. Production prompts, batching, queueing, power, and failure behavior may differ. |
| Kafka: a Distributed Messaging System for Log Processing | The original partitioned append-log, batching, consumer-offset, sequential-I/O, and cluster distribution design. | Supports historical mechanism reasoning about partitions, batching, retention, and consumer progress. Current Kafka guarantees require current official documentation. |
| Apache Flink fault tolerance | Checkpoints, replay, state backends, barriers, and recovery in a production stream processor. | Supports connecting state size and checkpoint behavior to backpressure and recovery. Connector, sink, topology, backend, and release determine end-to-end semantics. |
A useful order for an inference-capacity claim
If a vendor result is being converted into production requests per second, begin with MLPerf’s exact scenario, load generator, quality check, division, system description, and compliance artifacts. Use The Tail at Scale to model what happens when the endpoint fans out or batches under an online deadline. Use the NIST handbook to design matched trials and uncertainty reporting. Use the overload sources to define admission and queue bounds.
Produce a transfer ledger with at least: model and precision; quality target; input and output distributions; prompt or tensor sizes; batch policy; arrival process and concurrency; latency events and loss rule; warm state; accelerator, host, network, and power boundary; software versions; goodput definition; failure and recovery state; and cost denominator. If a field differs, classify its likely direction of bias instead of applying a generic discount.
Cross-cutting map by source job
The five concept regions answer where the gap sits. This table answers which kind of source should speak first.
| If the missing item is… | Start with… | Then pair it with… | Do not ask it to prove… |
|---|---|---|---|
| a relationship among quantities | original model or textbook derivation | measurement method and a scoped dataset | a causal mechanism merely because the equation balances |
| protocol or interface behavior | current standard and versioned official documentation | implementation source, trace, or conformance evidence | application outcome or performance distribution |
| why an architecture was built | seminal paper | current implementation docs and an alternative design | that the same trade-off wins for your workload |
| how to run or recover a service | high-quality engineering report | objective, topology, failure experiment, and local incident evidence | that another organization’s threshold or control is safe here |
| whether a result can be reproduced | artifact, method, manifest, and raw data | independent execution and transfer analysis | representativeness simply because the result repeats |
Seminal does not mean current. Current does not mean independent. Official does not mean complete. Peer-reviewed does not mean transferable. Operationally successful does not mean causally isolated. The map works because those weaknesses are paired, made explicit, and tested.
Validate a source before it enters a decision record
For a consequential claim, record this seven-line source ledger:
- Claim: the exact sentence the source is being asked to support.
- Authority: author or owning body, publication venue, and why it can speak to this claim.
- Version: edition, standard number, software release, hardware generation, and publication or retrieval date where behavior changes.
- Evidence: proof, specification, experiment, implementation description, or operational observation—and which it is not.
- Boundary: workload, topology, scale, state, failure model, and organization represented.
- Transfer limit: the first changed condition likely to reverse or weaken the result.
- Local test: the measurement, trace, review, or failure exercise required before acting.
Reject a source when its accessible artifact cannot support the quoted claim, its version is unknowable and behavior is version-sensitive, its experiment changes several factors without preserving raw evidence, or its authority is merely repetition. Keep a superseded source when it teaches an originating model, but label it historical and pair it with the current specification.
Practice: turn reading into engineering work
Drill 1: the queue that “proves” more servers are needed
A dashboard shows queue age and p99 rising at 75% average CPU. Choose four sources from the map. For each, name its job. Your output must distinguish an identity, an approximation, an OS signal, and an experiment. Finish with two hypotheses that predict different per-resource or per-shard evidence.
Self-check: Little’s Law should not be presented as a CPU diagnosis; Kingman should not become a fitted production result without assumption checks; PSI should not become root cause; the experiment must preserve arrival semantics and the latency population.
Drill 2: “no-loss” regional failover
Choose a consensus source, a database source, a reliability source, and the current specification for the actual product. Write one supported claim and one unsupported claim for each. Then draw acknowledgement, authority transfer, ambiguous client outcome, degraded admission, and repair.
Self-check: the answer separates consensus safety from the business effect, RPO from replica lag, and traffic restoration from full state recovery. It names the evidence needed for fencing and duplicate/loss invariants.
Drill 3: benchmark to forecast
A published ML inference score is 9,000 queries/s. Product forecasts 8,100 production requests/s by applying a 10% discount. Build the transfer ledger from the inference path above. Classify every mismatch as likely optimistic, pessimistic, or unknown; do not combine the classifications into one invented correction factor.
Self-check: model quality, input/output mix, arrival process, batching, deadline, loss, warm state, power, failure capacity, and cost appear. The next action is a representative bounded experiment, not a more confident discount.
Field card: close one knowledge gap
- Name the missing claim, decision, and consequence of being wrong.
- Choose a model, mechanism, and method or application source.
- Prefer the originating paper for intent and the current specification for behavior.
- Annotate what each source adds, the claim it supports, and its transfer limit.
- Produce an engineering trace: equation, state machine, causal path, source ledger, experiment, or control contract.
- Verify version-sensitive claims against current official material.
- Measure the actual workload, boundary, state, failure mode, and objective.
- Record what evidence would reverse the decision.
The decision rule is: add a source to a design argument only when its authority and evidence match one precise claim, its transfer limit is explicit, and local evidence can still falsify the resulting decision; otherwise use it to generate a question, not to close one.
Appendix M reveals where the reasoning breaks. This map turns that break into a bounded study path. The next step is not to finish the bibliography. It is to return to the model, architecture, experiment, or incident with a sharper claim and a better chance of discovering that it is wrong.
Continue reading
Full table of contents