Комментарии 22
Расскажите в комментариях, пользуетесь ли вы какими-то утилитами для оценки качества PCIe-соединения?
Чтобы по-настоящему погрузиться в процесс, мы применяем различные хардварные средства, подключаемые с помощью макетных проводов!
Какие плюсы и минусы у них есть?
Помимо огромного эстетического удовольствия, главный плюс — это абсолютная гибкость настройки. Она позволяет в любой момент создавать действительно уникальные и индивидуальные конфигурации путем сгибания и переключения проводов.
Что касается минусов, то основной — это время. Нет, нет, всегда найдется тот одинокий проводок, который решит выскочить из контакта.
Собственно - линк


То что PCIe умудряется работать в таких условиях - это настоящее инженерное чудо. Браво авторам спецификации и инженерам которые делали трансиверы.
Это какой Gen?
Мы обратились за публичными критериями pass/fail к Intel и AMD, но первые пока молчат, а вторые на форуме пометили пост как спам
Вас туда ещё пускают?
Супер! Спасибо за утилиту и статью.
Наконец кто-то разбирающийся в PCI Express появился (засветился) на Хабре. :-)
Пара вопросов, если позволите:
Где можно найти описание всех этих опций/битов/флагов которые выдает утилита
lspci
? Я пытался читать спецификции на PCIe, но тамошняя терминология слабо пересекается с тем, что выдает утилита. От прочтения всё стало еще более запутаннее. :)На моём ноутбуке Lenovo двухгодичной давности ни одно из PCIe устройств не выдает MargReady+. С чем это может быть связано ? Не достаточно высокий Gen хоста ?
Как узнать какой Gen максимально поддерживается хостом ?
dmesg
об этом скромно умалчивает.Правильно ли я понял, что пользоваться фичей Lane Margining можно только с PCIe Gen4 и выше ?
В моей ОС (FreeBSD 13.3) установлен пакет pciutils v3.12, утилиты
pcilmr
в нём нет, ноlspci
отображает состояние бита MargReady. С какой версии утилитаpcilmr
появилась в пакете ?
PS: Как раз сейчас занимаюсь отладкой PCIe на нашем оноплатнике на базе Скифа, там хост PCIe Gen3. Какую полезную информацию можно выжать из этих утилит о состоянии линка, кроме как его GT/s ?
PCI Express Base Specification. Раздел 7. Software Initialization and Configuration. Там где-то с секции 7.6 начинается описание capabilities
А у вас там там вообще много PCIe устройств? Все что сидит в PCH видится как просто PCI, например.
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-устройства, но находятся на одном чипе с процессором. Потому функциональность LM только для соблюдения стандарта.
Из "ноутбучного" железа NVMe обычно соглашается по-настоящему промаржиниться.
Про 8GT/s, он же Gen3: если нет под рукой особенных утилит и отладчиков от производителя (Intel в некоторых случаях позволяет построить глаз для Gen3), но поддерживается AER, то, например, можно пустить нагрузку и следить за счётчиками, не набегают ли слишком быстро.
Наличие ошибок покажут "плюсы" в UESta и CESta (uncorrectable errors, correctable errors) в функциональности AER в lspci, а счётичики ведёт драйвер в /sys/bus/pci/devices/XXXX:XX:XX.X/aer_*
Пользовался в свое время аппаратным оценивателем качества сигнала PCIe Gen3, который выглядел как многоканальный высокоскоростной осциллограф с Windows XP на борту, софтом для построения глазных диаграмм и софтом для оценки соответствия этих диаграмм спецификации. Интересная была железка, только дорогая очень, себе домой такую не купишь.
Из готового доступного ПО есть утилита Lane Margin Tool (LMT) for PCIe 4.0/5.0 от Intel в виде закрытого прекомпилированного скрипта на Python
А не было желания\возможность раскопать его? Учитывая что это питон, вероятно задача не должна быть экстра-сложной, если интел дополнительно для обфускации ничего не делала
С самого начала решили что инструмент будем публиковать как Open Source, потому LMT оставался как дополнительный источник информации. Но смотреть начинали, столкнулись с ярким колоритом, ЕВПОЧЯ :)
В то же время pciutils написан на C, имеет минимум зависимостей, легко доступен в пакетных менеджерах многих дистрибутивов Linux, BSD и даже OpenEmbedded.
Не знаю зачем мне эта информация, но было очень интересно, спасибо! Не перестаю удивляться какие нынче сложные штуки в вещах которые нас окружают.
Может когда-нибудь пригодится.
Нынче оценка качества PCIe соединения может иметь значение даже для домашних пользователей, которые на своих машинах ничего, кроме игр, не запускают - а все из-за распространения райзеров для "красивой" установки GPU параллельно матплате. Хотя и было продемонстрировано, что система может остаться работоспособной при "удлинении" PCIe на пару метров с помощью цепочки потребительских райзеров, во-первых, райзер райзеру рознь, а во-вторых, интересно было бы оценить качество такого соединения.
Планируете что-нибудь в этом направлении? Под винду, с упрощенной оценкой результатов, например.
А итоговая оценка в терминах Perfect, Pass, Fail уже выводится.
Вижу, что есть официальная сборка pciutils под винду от мейнтейнера пакета. Под рукой нашлась win10, бегло посмотрел: на этом конкретном ПК простого запуска из-под администратора недостаточно, пришлось перебирать методы доступа к регистрам конфигурационного пространства (ключом -A
), единственным потенциально рабочим выглядит windbg, но для этого нужно до-установить что-то. Позже, во второй заход, погляжу ещё раз. Ну и нужно будет добавить поддержку этого ключа в pcilmr, по аналогии с lspci и setpci, тогда будет работать в точности как в Linux и BSD.
Фото из вчерашней статейки - завод "синих" в Малайзии по тестированию и корпусировке.
https://habrastorage.org/getpro/habr/upload_files/644/87b/ef9/64487bef90623bc88b23c3243afb8dcf.PNG
Lane margining: как оценить качество PCIe-соединения без дополнительной аппаратуры