Как стать автором
Обновить

Lane margining: как оценить качество PCIe-соединения без дополнительной аппаратуры

Уровень сложностиСредний
Время на прочтение17 мин
Количество просмотров2.2K
Всего голосов 25: ↑29.5 и ↓-4.5+34
Комментарии12

Комментарии 12

Расскажите в комментариях, пользуетесь ли вы какими-то утилитами для оценки качества PCIe-соединения?

Чтобы по-настоящему погрузиться в процесс, мы применяем различные хардварные средства, подключаемые с помощью макетных проводов!

Какие плюсы и минусы у них есть?

Помимо огромного эстетического удовольствия, главный плюс — это абсолютная гибкость настройки. Она позволяет в любой момент создавать действительно уникальные и индивидуальные конфигурации путем сгибания и переключения проводов.

Что касается минусов, то основной — это время. Нет, нет, всегда найдется тот одинокий проводок, который решит выскочить из контакта.

Собственно - линк

То что PCIe умудряется работать в таких условиях - это настоящее инженерное чудо. Браво авторам спецификации и инженерам которые делали трансиверы.

У меня, к сожалению, такой фокус не удался. Пытался подключить SSD (NVMe x4) таким вот выносным способом к процессорному модулю и это не сработало. Запаял сокет M.2 на несущую плату и всё заработало.

Это какой Gen?

Мы обратились за публичными критериями pass/fail к Intel и AMD, но первые пока молчат, а вторые на форуме пометили пост как спам

Вас туда ещё пускают?

Супер! Спасибо за утилиту и статью.

Наконец кто-то разбирающийся в PCI Express появился (засветился) на Хабре. :-)

Пара вопросов, если позволите:

  1. Где можно найти описание всех этих опций/битов/флагов которые выдает утилита lspci ? Я пытался читать спецификции на PCIe, но тамошняя терминология слабо пересекается с тем, что выдает утилита. От прочтения всё стало еще более запутаннее. :)

  2. На моём ноутбуке Lenovo двухгодичной давности ни одно из PCIe устройств не выдает MargReady+. С чем это может быть связано ? Не достаточно высокий Gen хоста ?

  3. Как узнать какой Gen максимально поддерживается хостом ? dmesg об этом скромно умалчивает.

  4. Правильно ли я понял, что пользоваться фичей Lane Margining можно только с PCIe Gen4 и выше ?

  5. В моей ОС (FreeBSD 13.3) установлен пакет pciutils v3.12, утилиты pcilmr в нём нет, но lspci отображает состояние бита MargReady. С какой версии утилита pcilmr появилась в пакете ?

PS: Как раз сейчас занимаюсь отладкой PCIe на нашем оноплатнике на базе Скифа, там хост PCIe Gen3. Какую полезную информацию можно выжать из этих утилит о состоянии линка, кроме как его GT/s ?

  1. PCI Express Base Specification. Раздел 7. Software Initialization and Configuration. Там где-то с секции 7.6 начинается описание capabilities

  2. А у вас там там вообще много PCIe устройств? Все что сидит в PCH видится как просто PCI, например.

  3. lspci показывает. Надо только запускать как-то так: `sudo lspci -vvv`, ищите строчку LnkCap

Какую полезную информацию можно выжать из этих утилит о состоянии линка, кроме как его GT/s ?

Ну если запускать с -vvv то вот например:

		LnkCap2: Supported Link Speeds: 2.5-8GT/s, Crosslink- Retimer- 2Retimers- DRS-
		LnkCtl2: Target Link Speed: 8GT/s, EnterCompliance- SpeedDis-
			Transmit Margin: Normal Operating Range, EnterModifiedCompliance- ComplianceSOS-
			Compliance Preset/De-emphasis: -6dB de-emphasis, 0dB preshoot
		LnkSta2: Current De-emphasis Level: -3.5dB, EqualizationComplete+ EqualizationPhase1+
			EqualizationPhase2+ EqualizationPhase3+ LinkEqualizationRequest-
			Retimer- 2Retimers- CrosslinkRes: unsupported

Внимание на LnkSta2

Спасибо за ответ.

Утилиту pcilmr раздобыл - собрал пакет из репозитория с Github-а. На удивление собралось под фрей без вопросов.

На ноутбуке у меня похоже несколько хостов PCIe. На части портов показывает:

LnkCap2: Supported Link Speeds: 2.5-8GT/s, Crosslink- Retimer- 2Retimers- DRS-

На другой части:

LnkCap2: Supported Link Speeds: 2.5-16GT/s, Crosslink- Retimer+ 2Retimers+ DRS-

Я правильно понимаю, что 8GT/s это PCIe Gen 3, а 16GT/s это Gen 4 ?

На некоторых портах показывает "возможность" Margining, но флажок MargReady везде с минусом:

root@butterfly:/home/rz # lspci -vvv | grep -A 2 'Margining'
pcilib: 0000:01:00.0 64-bit device address ignored.
pcilib: 0000:01:00.0 64-bit device address ignored.
	Capabilities: [440 v1] Lane Margining at the Receiver
		PortCap: Uses Driver-
		PortSta: MargReady- MargSoftReady-
--
	Capabilities: [d00 v1] Lane Margining at the Receiver
		PortCap: Uses Driver+
		PortSta: MargReady- MargSoftReady-
pcilib: 0000:05:00.0 64-bit device address ignored.
pcilib: 0000:05:00.0 64-bit device address ignored.
--
	Capabilities: [440 v1] Lane Margining at the Receiver
		PortCap: Uses Driver-
		PortSta: MargReady- MargSoftReady-

Как это интерпретировать ? Возможность есть но она не поддерживается конечным устройством ?

На ноутбуке у меня похоже несколько хостов PCIe. На части портов показывает:

Скорее несколько мостов PCIe. Можете использовать `lspci -t`. Несколько PCI Host Bridge тоже бывает, но на х86 мне такое не встречалось.

Я правильно понимаю, что 8GT/s это PCIe Gen 3, а 16GT/s это Gen 4 ?

Типа того. AFAIK, Gen3/Gen4 - это чисто маркетинговые обозначения, спецификация ими не оперирует, соответственно lspci тоже не умеет показывать эти обозначения.

На некоторых портах показывает "возможность" Margining, но флажок MargReady везде с минусом:

А это как раз в этом посте и описано, почитайте. Как минимум в одном случае вам нужна поддержка этой фичи драйвером устройства.

Я статью прочел. Но я не понимаю смысла написанного вот тут:

Самым интересным битовым флагом Margining Ready устройство, а точнее его
PHY, сообщает о готовности к приему команд — хороший знак для нас! Бит
Margining Uses Driver Software означает необходимость помощи в
проведении процедуры со стороны хоста, а флаг Margining Software Ready —
что такая помощь в первоначальной инициализации проведена.

Не могли бы Вы расшифровать это для тупого Груга и как это применить для моего случая ? :)

Мне также не понятно, почему устройство заявляет о наличии такой "возможности", но при этом индицирует, что команду принимать не будет (MargReady-). Какая-то странная логика.

Пользовался в свое время аппаратным оценивателем качества сигнала PCIe Gen3, который выглядел как многоканальный высокоскоростной осциллограф с Windows XP на борту, софтом для построения глазных диаграмм и софтом для оценки соответствия этих диаграмм спецификации. Интересная была железка, только дорогая очень, себе домой такую не купишь.

Из готового доступного ПО есть утилита Lane Margin Tool (LMT) for PCIe 4.0/5.0 от Intel в виде закрытого прекомпилированного скрипта на Python

А не было желания\возможность раскопать его? Учитывая что это питон, вероятно задача не должна быть экстра-сложной, если интел дополнительно для обфускации ничего не делала

Зарегистрируйтесь на Хабре, чтобы оставить комментарий