
Your graphics card at x4 instead of x16: diagnose it, and get the x16 back
One morning our main card ran on four PCIe lanes instead of sixteen. Nothing failed, nothing warned: models were just slower. The first explanation that came to mind (the second card "stealing" lanes) was wrong. The real cause was the firmware, and the fix was a power cycle, not a setting.
What you get. A two-minute check of the real link of every card, the right reading of your BIOS options, and a small command that refuses to say "fine" when it is not. Measured here: x16 at 252 Gbit/s for the main card and x4 at 63 Gbit/s for the second one on OCuLink, both at once.
1. Read the link the firmware gave
for d in $(lspci -D -d 10de: | awk '/VGA|3D/ {print $1}'); do
echo "$d $(cat /sys/bus/pci/devices/$d/current_link_width)/$(cat /sys/bus/pci/devices/$d/max_link_width) lanes"
done
journalctl -k -b | grep -i "available PCIe bandwidth"
The second line is the precious one: the kernel writes the bandwidth available to each card and the port that limits it. current_link_width tells you the width; this line tells you why. With journalctl -b -1 you compare with the previous boot without touching anything.
Find a card by its identity (lspci -d vendor:device), never by its bus address: ours moved from one address to another after a reboot, and an early script happily reported the integrated graphics as "x16".
2. Understand what really happened
On a recent AMD platform, the processor hands out 28 lanes: 16 to the main slot, 4 to each of two M.2 slots, 4 to the chipset. Our second card, on an M.2 to OCuLink adapter, has its own lanes. Nothing was shared. The firmware had, during one boot, split the main slot and put the card on a x4 sub-port.
3. The BIOS has no "x16" to pick
Our board's bifurcation menu offers three entries, and none is called x16:
- Auto: detects what is plugged and splits only if needed. Auto is the x16.
- 8x/8x: documented for riser cards only. Choosing it caps the card at x8 for good, even when nothing else is plugged.
- A storage-card mode (x4/x4): for NVMe carrier cards. Never with a graphics card.
4. What brought the x16 back
- Change nothing and measure twice: the split can be transient.
- A full power cycle, with the external enclosure powered before the PC. That alone did it for us: a pass through the BIOS where nothing was changed, then power off and on.
- Only if it persists: a firmware update. Ours would have been irreversible, with no changelog mentioning bifurcation: a bet, not a fix.
Then check it after every boot, automatically: our fh-egpu verify 16 exits with an error if the main card is not at x16.
Traps
A slow link does not fail, it slows everything down quietly. Do not credit the gain to the wrong cause either: our big model went from 26.1 to 55.6 tokens per second that week, and an intermediate measurement showed the x16 was only part of it (see the 177B on two cards).
An external card must be powered before the PC starts: the system only lists the devices present at power-on.
Sources
Found this useful? Tell us what to measure next.