PCI Express

Шины: зачем их несколько

PCI Express (PCIe) — основная шина данных внутри современного компьютера. На ней висит почти всё, что не является датчиком: видеокарта, накопители, сеть, Thunderbolt, кардридер.

Главное отличие от старых шин: PCIe — точка-точка. Не общая магистраль, где все ждут своей очереди, а отдельные линии от каждого устройства к контроллеру.

Линии и их количество

Связь идёт по линиям (lanes), каждая линия — две пары проводов (передача и приём, каждая пара дифференциальная). Линии собирают в группы: x1, x4, x8, x16. Чем больше линий, тем больше полоса.

Поколение Скорость на линию Кодирование Полоса x4 (порядок)
Gen1 2,5 GT/s 8b/10b ~1 ГБ/с
Gen2 5 GT/s 8b/10b ~2 ГБ/с
Gen3 8 GT/s 128b/130b ~4 ГБ/с
Gen4 16 GT/s 128b/130b ~8 ГБ/с
Gen5 32 GT/s 128b/130b ~16 ГБ/с

«GT/s» — гигатранзакции в секунду, а не гигабайты: полезная скорость ниже из-за кодирования и накладных расходов. Отсюда и правило: Gen3 x4 быстрее, чем Gen4 x1 — ширина линии часто важнее поколения.

Кто кого к чему подключает

Элемент Роль
Корневой комплекс (root complex) «Начало» PCIe: связывает процессор и память с шиной
Корневой порт (root port) Выход из комплекса: один порт — одна ветка устройств
Мост (bridge) Соединяет две части шины; так появляются вложенные ветки
Коммутатор (switch) Раздаёт одну линию на несколько устройств (в ноутбуках почти не встречается)
Устройство (endpoint) Собственно карта: NVMe, Wi-Fi, видео

Каждое устройство адресуется как шина:устройство.функция — например, 3b:00.0. Шины нумеруются при перечислении, и это делает прошивка (UEFI) и ядро, а не человек.

Что видно снаружи: конфигурационное пространство

У каждого устройства есть конфигурационное пространство — набор регистров, через который система узнаёт, что это за устройство и как с ним работать: идентификаторы производителя и модели, класс, BAR (адреса памяти или портов), возможности, прерывания.

Отсюда и команды:

$ lspci                 # список устройств
$ lspci -t              # дерево: кто на каком мосту
$ lspci -k              # какой драйвер взял устройство
$ lspci -s 3b:00.0 -vv  # всё про конкретное устройство, включая скорость и ширину линии

В -vv ищите строки LnkCap (что устройство умеет) и LnkSta (что получилось на самом деле). Типичная картина «карта вставлена в слот x16, а работает на x4» — именно оттуда: слот и устройство договорились о меньшей ширине.

Что на PCIe в этом ноутбуке

Снято на Dell Latitude 7400:

$ lspci | grep -i 'non-volatile'
3b:00.0 Non-Volatile memory controller: Samsung Electronics Co Ltd NVMe SSD Controller 980 (DRAM-less)
  • NVMe-накопитель — тоже PCIe-устройство. «DRAM-less» в названии значит, что у контроллера нет собственной DRAM-кэш-памяти: для бюджетных моделей это нормально;
  • Thunderbolt — целая ветка PCIe наружу: lspci -t показывает цепочку мостов 1c.0 → 01 → 02 → 03/39, и на шине 39 обнаруживается ещё один USB-контроллер;
  • Wi-Fi сидит на CNVi — не совсем обычный PCIe, а выделенный интерфейс чипсета для Wi-Fi-модуля.

Горячее подключение и питание

Обычная PCIe внутри корпуса не предполагает горячего подключения: карта ставится при выключенном питании. Thunderbolt — исключение: он пробрасывает PCIe через кабель и умеет горячее подключение, поэтому док-станция «на ходу» — это PCIe, появившееся в дереве после включения.

Питание устройств идёт по отдельным линиям (12 В и 3,3 В), а не по линиям данных. Именно поэтому мощная видеокарта требует дополнительных разъёмов питания, а NVMe в ноутбуке обходится тем, что даёт слот M.2.

Когда что-то не так

  • устройство пропало — смотреть lspci, dmesg | grep -i pcie, journalctl -k;
  • ошибки шины — сообщения AER (Advanced Error Reporting) в журнале: dmesg | grep -i aer;
  • медленно — проверить LnkSta: скорость и ширину линии, а не только название модели;
  • не определяется после сна — частая история с NVMe и Wi-Fi; помогает перезагрузка, а причина — в драйвере или управлении питанием.

Источники

  • Спецификация PCI Express: PCI-SIG, https://pcisig.com/.
  • Документация ядра: https://docs.kernel.org/PCI/ — подсистема PCI, перечисление, AER.
  • man 8 lspci, man 8 setpci.
  • Устройства и дерево — с ноутбука Dell Latitude 7400 (Ubuntu 26.04, ядро 7.0.0), 25.10.2026.

Что ещё не проверено

  • Скорости в таблице — по спецификации, не замеры. Реальная полоса зависит от ширины линии, накладных расходов и самого устройства.
  • Строки LnkSta на этой машине вывести не удалось: без прав root lspci -vv не отдал расширенные поля. На своей системе смотрите sudo lspci -vv -s <адрес> | grep -A1 LnkSta.
Оценка статьи 0

Комментарии

Пока комментариев нет.