Skip to content
DenseChip
Learn
PracticeCode labInterview

DenseChip

Navigate

Menu

LearnPracticeCode labInterview

Tools

All toolsSV editorCode repoResume
DenseChip

Practice, courses, and chip-design tools in one focused workspace.

LearnPracticeCode labInterviewToolsLearning paths

© 2026 DenseChip

AboutContactPrivacyTerms
Skip to lesson

Course contents

  • How to Use This Course
  • Reading Paths
  • Concept Map
  • How to Read the Diagrams
  • Part 0: What Is a Protocol?10
  • Part 1: Timing and Clocking11
  • Part 2: Encoding and Framing12
  • Part 3: Handshakes13
  • Part 4: Flow Control17
  • Part 5: Transactions19
  • Part 6: Concurrency and Performance17
    • Latency, Throughput and Bandwidth
    • Little's Law
    • Outstanding Transactions
    • Tags and IDs
    • In-Order or Out-of-Order
    • Reorder Buffers
    • Interleaving
    • Split Completions
    • Protocol Efficiency
    • Peak and Sustained Bandwidth
    • Queueing Intuition
    • Tail Latency
    • Buffers That Hide Latency
    • Virtual Output Queues
    • Performance Modelling
    • Protocols Compared: Concurrency and Performance
    • Drills: Concurrency and Performance
  • Part 7: Ordering13
  • Part 8: Sharing and Arbitration12
  • Part 9: Deadlock and Liveness13
  • Part 10: Reliability and Recovery20
  • Part 11: Bring-Up and Link Management10
  • Part 12: Power8
  • Part 13: Shared State and Coherence9
  • Part 14: Security and Isolation7
  • Part 15: Specifying and Verifying11
  • Part 16: Protocols Dissected17
  • Part 17: Capstones5
  • Part 18: Interview Preparation6
Loading lesson

‹Part 6: Concurrency and Performance
  1. Topics
  2. First Principles of Hardware Protocols
  3. Part 6: Concurrency and Performance
  4. Latency, Throughput and Bandwidth

Part 6 · Concurrency and Performance · Foundation (F)

Latency, Throughput and Bandwidth

Latency, bandwidth and throughput are three different quantities that are often confused. What each measures, its units, how to measure it, and why improving one can hurt another.

On this page

    Note

    Level: Foundation (F) · Answers: How many requests can be in flight?

    Before this: Reads and Writes Are Not Symmetric

    A team upgrades a link from 8 GB/s to 16 GB/s. Their processor's cache misses, which fetch one 64-byte line at a time, get no faster at all. Another team, streaming video frames over the same upgrade, gets twice the frame rate. Both measured "performance". They measured different things.

    What exactly are latency, bandwidth and throughput, and why does improving one not always help?

    The obvious answer, and why it breaks

    The obvious view is that a faster link is faster for everything. But "faster" hides three different questions: how long does one item take to arrive, how much can the link carry per second, and how much does it actually carry? A cache miss waits for one line to arrive, so it cares about the first question. A video stream cares about the second. Doubling the link's width answers the second and barely touches the first.

    The idea: three quantities

    Quantity

    Measures

    Units

    Like a pipe's

    Latency

    Time for one item to get from request to arrival

    Nanoseconds or cycles

    Length: how long water takes to come out after you open the tap

    Bandwidth

    The most the channel can carry per unit time

    Bytes per second, or bits per second

    Width: how much water can flow

    Throughput

    What is actually carried per unit time

    Bytes per second, or items per second

    The flow you actually get, often less than the width allows

    A longer pipe delays every item; a wider pipe carries more at once; throughput is limited by both and by how much is kept in the pipe.

    Worked numbers

    A link with illustrative numbers: 16 GB/s bandwidth and 500 ns latency, fetching 64-byte lines.

    Diagram
    Time to push one 64-byte line onto the link:  64 B / 16 GB/s   =   4 ns
    Time for that line to arrive:                 500 ns latency + 4 ns = 504 ns
    One line at a time:  64 B per 504 ns          = 0.127 GB/s    (0.8% of the bandwidth)
    Double the bandwidth to 32 GB/s:              500 + 2 ns = 502 ns per line: 0.4% faster
    To use the full 16 GB/s, keep 504 ns x 16 GB/s = 8,064 bytes in flight = 126 lines

    The single-line requester is latency-bound: almost all of its time is spent waiting, and bandwidth hardly matters. A streaming requester that keeps many lines in flight is bandwidth-bound. Throughput connects the two: it depends on the bandwidth, the latency, and how much is in flight at once (lesson 6.2).

    Why improving one can hurt another

    • Pipelining a link raises its clock frequency, and so its bandwidth, but each stage adds a cycle of latency.

    • Bigger packets spread header overhead and raise effective bandwidth (lesson 6.9), but a small urgent message waits behind a big one.

    • Batching (credit returns, interrupts, doorbells) saves bandwidth and adds latency.

    • Running a link fully loaded maximises throughput and makes queues, and latency, grow (lesson 6.11).

    How to measure each

    Quantity

    Measure by

    Latency

    Timestamp a single request and its response with nothing else in flight; then repeat under load, because latency rises with load

    Bandwidth

    From the specification: width × clock rate, less encoding; it is a ceiling, not a measurement

    Throughput

    Count bytes delivered over a long interval of real traffic

    What breaks

    The opening upgrade (illustrative): the processor's misses were latency-bound, with one or two lines outstanding at a time, so doubling the bandwidth did nothing for them. What helped was letting each core keep more misses outstanding and adding a prefetcher, which turned a latency-bound pattern into a bandwidth-bound one.

    Why this matters

    Senior lens. When anyone quotes a performance number, ask which of the three it is, under what load, and with how much in flight. Bandwidth is a ceiling from the datasheet; latency must be quoted with the load it was measured at; throughput is what the workload got. Most performance arguments dissolve once the three are separated.

    Interview

    Asked: "Can you lower latency and lose bandwidth?"

    Weak answer: No, lower latency is always better.

    Strong answer: Yes. Removing pipeline stages cuts latency but forces a lower clock, so less bandwidth. Smaller packets get each one through sooner but spend more of the link on headers. Not batching credit returns or interrupts lowers latency and costs bandwidth. They're different quantities: latency is time per item, bandwidth is the channel's capacity, throughput is what you actually get, and throughput depends on both plus how much is in flight.

    Follow-ups: (1) Why didn't doubling the link speed up cache misses? (2) How much must be in flight to fill a link?

    Check yourself A link has 32 GB/s bandwidth and 250 ns latency. How many bytes must be in flight to reach full bandwidth?

    32 GB/s × 250 ns = 8,000 bytes (125 lines of 64 bytes).

    Check yourself A requester fetches one 64-byte line at a time over a link with 1 µs latency. Roughly what throughput does it get, whatever the bandwidth?

    About 64 bytes per microsecond, 64 MB/s, because it is latency-bound.

    Key takeaways

    • Latency is time per item; bandwidth is the channel's capacity; throughput is what is actually delivered.

    • A requester with little in flight is latency-bound and gains nothing from more bandwidth.

    • Pipelining, packet size, batching and load all trade one quantity against another.

    Keep going

    Next: Lesson 6.2, Little's Law. Outstanding requests = throughput × latency: the one law that sizes tags, buffers and queues.

    Related topics

    • Part 6 overview: Concurrency and Performance

    Previous

    87 / 234

    Next: Little's Law

    Up next

    Up nextLittle's Law

    Sign in to save progress

    Practice this lessonReport an error

    See also

    • Outstanding Transactions
    • Tags and IDs
    • In-Order or Out-of-Order