Skip to content

Phase 2 · Free

2.2 How the Parts Talk: Buses, PCIe, SATA, NVMe, USB

Parts are useless alone. They need roads between them. Those roads are called buses, and like real roads, some are highways and some are side streets.

Phase 2. Lesson 2 of 4. About 20 minutes.

Plain entry

Parts are useless alone. They need roads between them. Those roads are called buses, and like real roads, some are highways and some are side streets. Knowing which road a device sits on explains why a fast drive can still be slow (wrong slot), why a monitor will not run at full speed (wrong cable), and why plugging a drive into a different USB portA numbered endpoint on a device that identifies a specific application or service, allowing multiple network services to run on the same IP address. Read more → fixes it.

Terms

  • Bus: a shared path that carries data between parts.
  • PCIePCI Express: the high-speed connection inside a computer that links the CPU to graphics cards, NVMe drives, network cards, and other expansion devices. Read more → (PCI Express): the main high-speed bus. Comes in lanes (x1, x4, x16) and generations (Gen 3, 4, 5); each generation roughly doubles speed per lane.
  • SATASerial ATA: the long-standing interface for connecting hard drives, SSDs, and optical drives, with a practical speed limit of about 550 MB/s. Read more →: older storage connector. Tops out around 600 MB/s.
  • NVMeNon-Volatile Memory Express: a storage protocol built for flash SSDs that talks to the CPU over PCIe, delivering far more speed and lower latency than SATA. Read more →: a storage protocol designed for flash, running over PCIe. A Gen 4 x4 NVMe drive can read around 7,000 MB/s.
  • M.2: a physical slot shape. An M.2 slot can carry SATA or NVMe, which confuses everyone. Check the board manual.
  • USB: the external bus. Version names are a mess (USB 3.2 Gen 1 is 5 Gb/s; Gen 2 is 10 Gb/s; USB4 is up to 40 or 80 Gb/s).
  • Driver: software that lets the kernelThe core of an operating system that runs with full hardware control and decides how every program gets CPU time, memory, and device access. Read more → use a device. Most Linux drivers ship inside the kernel.

Depth: see the buses on your own machine

List PCI devices:

lspci

Example output in a VirtualBox VMA software-based emulation of a complete computer that runs its own operating system and applications, isolated from the host hardware. Read more → (trimmed, environment-specific):

00:00.0 Host bridge: Intel Corporation 440FX - 82441FX PMC [Natoma] (rev 02)
00:02.0 VGA compatible controller: VMware SVGA II Adapter
00:03.0 Ethernet controller: Intel Corporation 82540EM Gigabit Ethernet Controller (rev 02)
00:0d.0 SATA controller: Intel Corporation 82801HM/HEM (ICH8M/ICH8M-E) SATA Controller [AHCI mode] (rev 02)

Those are virtual devices VirtualBox pretends to have. “VMware SVGA II” is the default VirtualBox display adapter on Linux guests, not a sign that VMware is installed. On bare metal you see your real chipset, GPUGraphics Processing Unit: a processor with thousands of small cores built for parallel math, used for displaying graphics and increasingly for AI workloads. Read more →, and NVMe controller.

Show which driver each device uses:

lspci -k | grep -A2 -i ethernet

Example output (VirtualBox):

00:03.0 Ethernet controller: Intel Corporation 82540EM Gigabit Ethernet Controller (rev 02)
	Subsystem: Intel Corporation PRO/1000 MT Desktop Adapter
	Kernel driver in use: e1000

“Kernel driver in use” is the line you look for when a device does not work. No line there means no driver loaded.

List USB devices:

lsusb

Example output (VirtualBox VM):

Bus 001 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 001 Device 002: ID 80ee:0021 VirtualBox USB Tablet

The USB Tablet is how VirtualBox passes your mouse in. Other hypervisors show different devices; a QEMU/KVM VM, for example, shows Device 1234:1111 for VGA, Virtio block device for disks, and Subsystem: Red Hat, Inc. QEMU Virtual Machine under lspci -k.

See the device tree for disks:

lsblk -o NAME,SIZE,TYPE,TRAN,MODEL

Example output (VirtualBox VM):

NAME     SIZE TYPE TRAN MODEL
sda       30G disk sata VBOX HARDDISK
├─sda1     1G part
└─sda2    29G part
sr0     1024M rom  ata  CD-ROM

TRAN is the transport: the bus the disk is on. On a real NVMe laptop you see a disk named nvme0n1 with TRAN nvme. Partition layout varies by installer version.

Going further

On bare metal, check the PCIe link a device actually negotiated:

sudo lspci -vv | grep -E "^[0-9a-f]|LnkSta:"

LnkSta: Speed 16GT/s, Width x4 means Gen 4 x4. If an NVMe drive reports Width x2 or Gen 3 speed, it is in a slower slot or sharing lanes, and that explains a benchmark that comes in at half the box number. In a VM this information is fake or missing.

Why it works this way

A fast part on a slow link is a slow part. An NVMe drive on PCIe has many lanes straight to the CPU; the same data over a USB 2.0 cable is capped by the cable. This is why the bus matters when you troubleshoot speed: before blaming a drive, check what it is plugged into. lsblk -o NAME,TRAN and lsusb -t answer that in seconds.

Self-check

  1. An M.2 drive reads at 550 MB/s. Is it likely SATA or NVMe?
  2. Which line in lspci -k tells you a driver is loaded?
  3. What does the TRAN column in lsblk show?

Answers: (1) SATA, it is at SATA’s limit. (2) “Kernel driver in use.” (3) The bus the disk is attached to.

Sources