Skip to content

Performance Engineering and System Design Handbook

Appendix A — Symbols, Units, and Magnitudes

Use the handbook's house notation for time, bytes, rates, concurrency, latency distributions, capacity laws, and dimensional checks.

This appendix is the handbook’s quantitative interface. Use it when writing an estimate, reviewing an equation, labeling a chart, or comparing measurements. The job is not to make notation impressive. It is to make boundaries, dimensions, populations, and conversions difficult to lose.

House policy

  1. Write a number with a unit: 12 ms, 40 MB/s, 2.4 CPU-ms/request.
  2. Use SI decimal prefixes for rates and network quantities unless a cited interface explicitly defines otherwise.
  3. Use B for byte and b for bit. MB/s and Mb/s differ by a factor of eight before prefix conversion.
  4. Use kB, MB, GB, and TB for powers of 1,000 bytes; use KiB, MiB, GiB, and TiB for powers of 1,024 bytes.
  5. Put a space between value and unit in prose and tables. Treat % as the conventional exception.
  6. Name the population and boundary for rates and distributions. p99 = 80 ms is incomplete without operation, outcome, interval, and measurement boundary.
  7. Preserve source-unit precision during calculation; round only the presented decision value.
  8. Never convert a dimensionless ratio into a duration, rate, or capacity without another dimensional term.

Case matters. m is the SI prefix milli; M is mega. ms is millisecond; Ms is megasecond. In this book, spell out ambiguous quantities when typography or tooling can erase case.

Decimal and binary prefixes

Prefix Symbol Factor Byte example
kilo k 10^3 1 kB = 1,000 B
mega M 10^6 1 MB = 1,000,000 B
giga G 10^9 1 GB = 1,000,000,000 B
tera T 10^12 1 TB = 1,000,000,000,000 B
kibi Ki 2^10 1 KiB = 1,024 B
mebi Mi 2^20 1 MiB = 1,048,576 B
gibi Gi 2^30 1 GiB = 1,073,741,824 B
tebi Ti 2^40 1 TiB = 1,099,511,627,776 B

1 MiB / 1 MB = 1.048576. Do not label 1,048,576 bytes “1 MB” in a memory calculation and then compare it directly with a decimal storage or network figure. State the conversion.

A link advertised as 10 Gb/s carries a nominal raw bit rate of 10 × 10^9 b/s. Dividing by 8 b/B gives 1.25 × 10^9 B/s = 1.25 GB/s before protocol overhead, framing, retransmission, contention, and implementation limits. It is not 10 GB/s and it is not a measured application goodput claim.

Time units

Unit Symbol Seconds Common use
nanosecond ns 10^-9 s instruction and local-memory-scale mechanisms
microsecond μs 10^-6 s short runtime, device, and network operations
millisecond ms 10^-3 s request, queue, storage, and network latency
second s 1 s rates, deadlines, recovery intervals
minute min 60 s rollouts and short operational windows
hour h 3,600 s capacity and incident windows
day d 86,400 s retention and demand planning

Use μs in typeset prose and us only where source code or tooling cannot represent μ. Convert before adding: 800 μs + 2.4 ms = 0.8 ms + 2.4 ms = 3.2 ms. A timestamp is not a duration; subtract timestamps under an explicit clock and time-base policy before assigning a duration unit.

Core symbols

Symbols are local contracts. Define them again when a chapter changes meaning or population.

Symbol Meaning Typical unit
λ arrival rate offered to a boundary requests/s
λ_a admitted arrival rate requests/s
X throughput: completed work rate under the stated outcome definition operations/s
G goodput: correct, useful completion rate correct results/s
L average number of units in a defined system or queue requests (count)
W average time a unit spends in that same boundary s/request, usually written s
S service time per visit s/visit
D_r service demand on resource r per useful unit resource-s/result, B/result, I/O/result
C concurrency: in-flight units within a boundary requests (count)
m number of equivalent servers or parallel slots count
U_r utilization of resource r over an interval dimensionless, often %
Q queue depth excluding active service unless stated requests (count)
A amplification factor, output work divided by useful input work dimensionless

Concurrency is a count, not a rate. Throughput is a rate, not a count. Service time is active work at a resource; response time can include queueing, coordination, and downstream waits. Utilization is scoped to a resource and interval; fleet-average utilization does not describe the busiest core, shard, or quota.

For a stable single resource with compatible units, a useful demand estimate is:

U_r ≈ X × D_r

If X = 2,000 result/s and D_CPU = 2.5 CPU-ms/result, then:

2,000 result/s × 0.0025 CPU-s/result = 5 CPU-s/s

The demand is approximately five fully busy cores before headroom and imbalance. Writing 5 CPU-s/s during the audit shows why the result becomes a core-equivalent count.

Throughput and goodput

Use throughput X only after defining what completion means. Use goodput G when useful correctness must be distinguished from attempts or nominal completions.

attempt rate = first attempts + retry attempts + hedged attempts
G = correct terminal outcomes / interval
retry amplification A_retry = total attempts / first attempts

An API can report X = 1,200 responses/s while G = 900 correct results/s if errors, stale results, duplicates, or invalid partial responses are counted as completions. For storage, distinguish logical accepted bytes/s, durable useful bytes/s, physical device bytes/s, and replicated network bytes/s.

Latency distributions

Let T be a random variable for a precisely defined latency population. Write:

  • F_T(t) = P(T ≤ t) for its cumulative distribution;
  • q_p(T) = inf{t : F_T(t) ≥ p} for quantile p;
  • p50, p95, p99, and p99.9 as readable quantile labels when the population is already clear;
  • E[T] for the expectation, not “the p50 average.”

Attach operation, outcome, boundary, interval, and state: “successful admitted search, edge acceptance to final byte, p99 over five minutes, release R17, Zone A nominal.” Do not average host percentiles to obtain a fleet percentile. Merge raw observations or merge a distribution data structure with known aggregation semantics. Quantiles do not add: the p99 of A + B is not generally p99(A) + p99(B), especially when paths overlap or are correlated.

Formula cards and validity limits

Little’s Law

For a stable system over a compatible observation period:

L = λW

The same boundary must define L, λ, and W. If λ = 3,000 request/s and allowed average queue time is W = 0.2 s, then L = 600 requests. This is an average relationship, not a tail guarantee or a proof that 600 queued requests fit memory.

Bandwidth-delay product

BDP = bandwidth × round-trip time

At 10 Gb/s and 20 ms:

10 × 10^9 b/s × 0.020 s = 200 × 10^6 b = 25 MB

About 25 MB must be in flight to fill that idealized path. Protocol windows, loss, congestion control, directionality, application behavior, and overhead limit transfer.

Speedup

For fraction P of original elapsed time improved by factor s, the Amdahl-style bound is:

speedup = 1 / ((1 - P) + P/s)

If 30% of elapsed time becomes twice as fast, the bound is 1 / (0.70 + 0.15) ≈ 1.176, or about 17.6% overall speedup under the stated decomposition. The formula does not include queue migration, changed load, parallel overhead, correctness risk, or a new bottleneck.

Amplification

A_read  = physical or downstream reads / useful logical reads
A_write = physical bytes written / durable logical bytes
A_space = physical retained bytes / logical retained bytes
A_net   = network bytes / useful payload bytes
A_retry = attempts / first attempts

The numerator and denominator must share an interval and workload boundary. An amplification below one can be valid for compression or deduplication if the quantities are named accurately; it is not automatically an error.

Dimensional-analysis audits

Retention

Mercury’s modeled write payload is:

1,800 request/s × 0.14 write/request × 2,400 B/write × 86,400 s/day × 30 day
= 1.568 × 10^12 B ≈ 1.568 TB

Requests, writes, seconds, and days cancel. The result excludes indexes, replication, metadata, compaction, compression, deletion lag, and growth. Apply each as a named factor or separate term rather than hiding them in “headroom.”

Queue-age bound

3,000 request/s × 0.200 s = 600 requests

If someone instead multiplies by 200 ms without converting, the numeric result 600,000 carries request·ms/s, exposing the error. Units are executable skepticism.

Worker capacity

Forty-eight equivalent workers with 12 ms/job mean:

48 worker × 1,000 ms/s ÷ 12 worker-ms/job = 4,000 job/s

This is a modeled service bound. It assumes independent equivalent workers, adequate upstream/downstream capacity, a representative service-time population, and no coordination or scheduling loss.

Magnitudes without false constants

An order of magnitude is a scale used to reject impossible models, not a timeless latency table. Hardware, topology, runtime, payload, power state, concurrency, and software version can move a measurement substantially. Write 10^-3 s to compare millisecond-scale work with 10^-6 s microsecond-scale work; do not claim a named storage or network operation always takes either value.

For external magnitudes, record date, environment, version, operation, payload, access pattern, concurrency, distribution, and evidence type. Appendix D owns maintained measured ranges. This appendix owns only the unit language used to express them.

Field check

Before accepting a quantitative claim, ask:

  • Are value, unit, population, boundary, interval, and operating state named?
  • Are decimal bytes, binary bytes, bits, and bytes distinguished?
  • Do numerator and denominator describe compatible work?
  • Do dimensions cancel to the claimed result?
  • Is the statistic a mean, quantile, rate, count, or ratio—and is it labeled correctly?
  • Are throughput and correct goodput separated when failures or retries matter?
  • Are formula conditions and transfer limits stated?
  • Can the arithmetic be reproduced without reading intent into an unlabeled number?

If any answer is no, repair the quantitative interface before debating the architecture.

Once the interface is sound, the next risk is inferential: a correctly labeled sample can still misrepresent its population. Use the probability and statistics reference to choose a summary, uncertainty method, and comparison that preserve the sampling structure behind the numbers.

Sources and evidence scope