Добрый день.
Меня зовут Антон.
В YADRO я занимаюсь разработкой оборудования.
В конце обзорная статья об истории и развитии PCI Express Алексей упомянул о нашем собственном адаптере для внешнего подключения PCI Express (далее сокращенно PCIe) устройств по кабелю.
Сегодня я расскажу вам, как мы тестировали и отлаживали его для корректной работы с разными типами и длинами кабельных соединений.
Адаптер был разработан для соединения компонентов наших систем друг с другом по шине PCIe с помощью кабеля.
На момент разработки существующие готовые решения для этого нас не устраивали по ряду причин — некоторые не поддерживали скорости Gen3, некоторые использовали кабели, которые мы считали бесперспективными и т. д. Далее я расскажу, с какими проблемами мы столкнулись (и сталкиваемся до сих пор) при работе с нашим адаптером.
Но чтобы лучше понять смысл, давайте сначала углубимся в теоретические аспекты взаимодействия PCIe-устройств.
Сделаю оговорку: описанное ниже относится в целом к PCIe, но для целей данной статьи, для конкретики, я использовал терминологию из документации PLX, так как наш адаптер работает на чипе этого производителя.
Другие производители могут называть подобные методы и сущности по-другому, что сути не меняет. Тюнинг Устройства PCIe имеют эквалайзер на путях приема и передачи.
Параметры эквалайзера можно и нужно изменять (настраивать) для получения достоверного (BER) < 10 -12 ) связи.
Настройка передатчика
Передатчики PCIe имеют следующие параметры эквалайзера, которыми можно управлять:- Уменьшение выделения или пост-курсор
- Предварительная съемка или прекурсор
- Главный или курсор
Эти параметры определяют соотношения между амплитудами сигналов во временной области:
Коэффициент Уменьшение акцента определяет соотношение Вб/Ва , коэффициент Предварительная съемка отвечает за соотношение Вк/Вб , А Основной — это, по большому счету, диапазон между максимальным значением с учетом предсъемки и минимальным значением с учетом деакцента (диапазон между короткой верхней полкой и длинной нижней) или наоборот.
Не вдаваясь в подробности, De-emphasis усиливает амплитуду передаваемого бита в зависимости от значения предыдущего бита, а Pre-shoot делает то же самое в зависимости от значения следующего бита.
Main определяет дальность действия сигнала в целом.
Значения Main, De-emphasis и Pre-shoot задаются коэффициентами от 0 до 63. Сумма всех коэффициентов должна быть равна 63. То есть, если вы установите Pre-shoot = 6 (3,5 дБ), а Де-акцент = 13 (-6 дБ), тогда на Main останется только 44. Таким образом, энергия сигнала перераспределяется между ВЧ (битовая коммутация) и НЧ (несколько 1 или 0 подряд) компонентами.
Забегая вперед, скажу: для 10-метрового кабеля в нашем случае оптимальные значения — 63 на Main и нули на Pre-shoot и De-emphasis, или 55-57 на Main с небольшим значением Pre-shoot. .
То есть на такой длине кабеля сигнал затухает настолько, что приемник уже не заботится о фронтах – он просто не может распознать наличие сигнала в линии.
Настройка ресивера
При поступлении сигнала на приемник последовательно используются следующие инструменты:- АТТ (аттенюатор);
- BOOST или CTLE — компонентный усилитель ВЧ;
- DFE - блок, который по сути работает аналогично этапам деакцента/предыскажения передатчика (отключен по умолчанию), предназначенный для устранения межсимвольных помех (ISI).
Передаточная функция CTLE – значительный выигрыш в ВЧ-области:
Обычно ATT и CTLE работают в противофазе — низкие значения ATT сопровождаются высокими значениями CTLE. То есть приемник сначала масштабирует входной сигнал до приемлемого уровня, а затем накачивает радиочастотную составляющую, которая подвергается наибольшему затуханию при прохождении по каналу.
Если вам приходится корректировать коэффициенты вручную, нужно иметь в виду, что слабое затухание (и, как следствие, слишком открытый «глаз») может привести к перенасыщению слайсера в приемном тракте.
А слишком высокое значение BOOST также приводит к увеличению радиочастотного шума, вызванного, например, перекрестными помехами.
В общем, нет необходимости выкручивать эти ручки на максимум.
Опять же, забегая вперед, в случае с 10-метровым кабелем ATT калибруется по 0x0F — максимальному значению, что означает отсутствие затухания.
А CTLE в районе 0x09 — это довольно серьёзное усиление радиочастот. То есть на таких расстояниях сигнал настолько затухает, что здесь приходится крутить ручки почти до максимума.
Обучение PCIe Gen3 PCIe Gen3 принципиально отличается от Gen2 и Gen1 тем, что в процессе обучения существует итерационная фаза, в ходе которой настраиваются параметры приемного и передающего путей.
Очень обобщенный процесс обучения выглядит так:
- Все начинается с Gen1. На данном этапе настройки нет; все начинают со стандартных значений и не меняют их в процессе.
В частности, для приемника Gen1 это ATT=0x09, CTLE=0x05.
- Порт DownStream сообщает порту Upstream начальные значения настройки передатчика (TX PRESETS) для Gen3 и устанавливает себе начальные значения (обычно они одинаковые).
- Восходящий порт настраивает свой передатчик, и партнеры переключаются в режим Gen3. Если качество связи не позволяет получить BER ниже 10 -4 - всё, ничего не работает. То есть зачастую важны стартовые значения параметров.
- Если происходит соединение, нисходящий порт начинает калибровать свой приемник и сообщать восходящему порту о новых настройках передатчика, пока не будет достигнут BER 10. -12 .
- После этого происходит та же процедура, но в обратном порядке — Upstream советует, а DownStream калибруется.
Ну, тогда происходит соединение.
Мы подключили два адаптера медным кабелем и увидели, как свет мигает. Далее с помощью команды lspci мы проверяли, что удаленно подключенный коммутатор PCIe виден в дереве системы PCIe, а параметры установленного соединения соответствуют ожидаемым, то есть x4/x8/x16 (в зависимости от конфигурации) со скоростью 8 ГТ/с.
Далее мы начали более детально изучать качество связи.
Для полуметровых и трехметровых кабелей BER был равен нулю.
Были трудности с 10-метровыми кабелями, и для их решения потребовалась большая работа.
Связка на 10 метрах у нас произошла сразу, но сопровождалась огромным увеличением ошибок.
Данные можно было передать, но очень медленно.
И сколько мы ни играли с TX PRESETS, сколько ни настраивали ресивер, ничего не помогало.
Мы решили включить DFE. И.
ничего не произошло.
Дальнейшие исследования привели нас к тому, что DFE имеет два режима работы – т.н.
EDFE (Edge DFE), целью которого является расширение «глаза» сигнала по оси времени, и тестовый режим CDFE (Central DFE), целью которого является увеличение открытия «глаза» по оси времени.
амплитудная ось.
EDFE нам не помог.
CDFE PLX семейства Capella 1 включается загадочной конструкцией неизвестных регистров — очень похожей на ввод какой-то кодовой последовательности.
Суть его производитель не раскрывает. Но нам это помогло весьма существенно — BER от 120к х 10 -12 снизилось до 1,5к х 10 -12 .
Но это все равно выше уровня, требуемого стандартом, и мы продолжали биться головой о стенку, перебирая разные параметры.
Мы играли с большим количеством различных параметров, например, чувствительностью приёмника, временем оценки передатчика, количеством итераций — ничего не помогло.
Надо сказать, что аппаратная часть коммутатора PLX вместе со специализированным программным обеспечением позволяет получить изображение глазковой диаграммы для каждой линии.
Но для нас эта функция оказалась бесполезной, так как точка захвата данных, используемых для построения глазковой диаграммы, находится перед блоком DFE — то есть мы не видим, что DFE делает с сигналом.
А перед DFE у нас не просто закрытый «глаз», а буквально 0 в очереди (хотя линк-ап до сих пор работает).
В результате наступила деморализация.
Мы поняли, что остановить авианосец будет невозможно, и решили поискать кнопку — взялись за другую задачу, которую временно отложили до тех пор.
Проблема была в том, что в целом соединение иногда происходило не на всех линиях.
Это указывало на то, что были некоторые проблемы с первоначальным подключением на скорости Gen1 — поскольку именно на этом этапе происходит отбраковка линий.
Мы включили (снова тестовый) режим калибровки Gen1 (в стандартной работе он не предусмотрен).
Gen1 перестал работать полностью (видимо, он не смог достичь приемлемого уровня BER) - но мы увидели, по каким параметрам приемник пытался установить связь, куда он целился, и вдруг поняли, что они находятся в другой вселенной по сравнению на стандартные.
Ради интереса мы взяли и поменяли стандартные 0x09/0x05 на 0x09/0x0F (аттенюатор для Gen1 отключили).
И мы получили не просто стабильную связь Gen1, но и гораздо более приятные значения BER для Gen3 — 0,3 х 10. -12 , что уже соответствует стандарту.
Производитель не говорит, как тракт приема Gen1 подключен к Gen3. Но вот как это работает. Работа с оптическими кабелями С оптическими кабелями пришлось повозиться отдельно из-за особенностей PCIe, но по сравнению с работой по «пробиванию» 10-метровых медных кабелей это оказалось проще.
Если кратко описать ситуацию, то с оптикой все иначе, чем с медью.
В чем отличия от меди?
Обнаружение приемника После ввода в эксплуатацию передатчики PCIe начинают проверять линию на наличие нагрузки.Они делают это, анализируя сигнал, отраженный от противоположного конца линии.
Если линия не завершается приемником, передатчик распознает это и отклоняет эту линию.
Проблема с оптическими приемниками заключается в том, что они часто не соответствуют спецификации PCIe, они могут быть подключены к другому импедансу или вообще не заземлены.
Увидев это, передатчик может решить, что у него нет приемника – и не начинать процедуру установления соединения.
Для корректной работы с оптикой рекомендуется маскировать сигналы блока Receiver Detect. Другими словами, заставить передатчик «видеть» приемник.
Электрическое состояние холостого хода (далее именуемое «холостой ход») Периоды простоя немодулированной линии, вызванные, например, переходом в состояние пониженного энергопотребления, могут привести к перенасыщению PIN-диода и вызвать проблемы при выходе из этого состояния.
Приемник может ошибочно принять шум, вызванный переходным состоянием оптического приемника, за выход из состояния IDLE и настроиться на неправильную частоту.
Это приведет к отклонению данной линии при процедуре установления соединения в дальнейшем.
На рисунке ниже показано, что получает приемник PCIe при возникновении IDLE на оптической линии:
Там, где есть «Мертвая зона», должен быть постоянный уровень сигнала.
А значение «Время урегулирования» может иметь разное значение в разных строках.
Предполагаемый режим ожидания При использовании режима Inferred IDLE приемник анализирует контекст передаваемых данных и не полагается на уровни сигнала, чтобы определить, следует ли переходить в состояние IDLE. Использование этого режима предпочтительнее при использовании оптического кабеля, поскольку без него:
- Переходные процессы в оптическом приемнике могут вызвать ошибочный переход в состояние IDLE и последующие этапы конечного автомата LTSSM.
- переход в состояние IDLE одного партнера может быть не распознан вторым партнером.
Отключить нисходящий поезд В процессе установления соединения получатель пытается поймать соединение на самой высокой или самой низкой линии.
Как только он это сделает, у оставшихся линий будет ограниченное время для завершения обучения.
Ввиду описанных выше причин настройка разных линий может занимать очень разное время, поэтому после установления соединения на самой крайней линии остальные могут просто не успеть и будут отвергнуты.
Рекомендуется запретить приемнику устанавливать соединение при ширине канала меньше заданной, чтобы он пытался настроить все линии порта до конца.
Тюнинг Оптические устройства нелинейны, поэтому нельзя полагаться на механизм настройки обратного канала, поскольку он опирается на линейное затухание сигнала при расчете калибровочных коэффициентов приемников и передатчиков.
В некоторых случаях лучше отключить его и выполнить калибровку параметров приемников и передатчиков вручную.
В общем, есть довольно много параметров, которыми можно управлять, чтобы оптика работала.
Чтобы иметь к ним доступ на лету, мы установили на адаптер CPLD-чип.
Мы начали с того, что сразу использовали все параметры, рекомендованные производителем коммутатора, и ничего не произошло.
Потом мы обнаружили, что забыли один параметр, а именно отключение блока Receiver Detect. Включили и оптика ожила.
Затем мы вернули все параметры, кроме Receiver Detect, в состояние по умолчанию.
Оптика продолжала жить.
Маскирование обнаружения приемника никоим образом не мешает работе по пассивному медному кабелю.
Таким образом, мы получили конфигурацию, работающую на обоих типах соединений.
Надо сказать, что в канале иногда появляются ошибки, но частота их появления находится в пределах нормы.
А поскольку никакой настройки оптики мы пока фактически не делали, у нас есть твердое убеждение, что эти ошибки можно преодолеть.
Исследователи этого вопроса очень сильно пугают разработчиков тем, что из-за больших производственных различий между кабелями собрать соединение х8 из двух кабелей х4, а тем более соединение х16 из 4 кабелей х4, довольно проблематично.
Поэтому с целью минимизировать эти риски мы выровняли все дорожки на плате по 100 пс.
Не знаю, имело ли это какое-то значение, но с агрегацией четырех звеньев х4 в х16 на 100-метровой оптике проблем не возникло.
Распространенные проблемы Используемое нами кабельное соединение (как оптическое, так и медное) имеет следующие подводные камни:
- опорный тактовый сигнал (далее именуемый тактовым сигналом) не передается в линии;
- I2C не передается по линии;
- PERST#, PRSNT# и другие боковые полосы не передаются по линии.
Но используемые нами коммутаторы SRIS-совместимы.
SRIS — отдельный справочный независимый спред. Говоря простыми словами, они не только могут работать на разных клочьях, но и эти клочья могут быть SSC. ССК Spread Spectrum Clocking — это модуляция тактовой частоты в диапазоне от 0 до -5000 ppm с частотой 30-33 кГц.
Используется для снижения ЭMI. При этом мощность излучения размазывается по спектру, так как частота часов постоянно незначительно колеблется.
В этом случае нормальная работа возможна только при подключении двух устройств SRIS. Работа не гарантируется, когда главный процессор напрямую подключен к чему-либо без тактовой частоты.
Хотя мы наблюдали нормальную работу при безтактовом кабельном подключении процессора x86 к устройству PLX, при условии, что часы, используемые на хост-процессоре, не используют SSC. Это называется SRNS — отдельная ссылка без распространения.
Наш адаптер имеет собственную тактовую подсистему, которая позволяет как тактировать всё от системной тактовой частоты PCIe, так и работать самостоятельно, которая в свою очередь может быть как SSC, так и не-SSC. В результате тестирования нам не понравилась работа над системными часами, хотя мы лелеяли надежду поработать только над ними, а все остальные схемы, связанные с часами, убрать.
Работа на собственных часах, как nonSSC, так и SSC, стабильна и надежна при использовании пассивных медных кабелей длиной до 4 метров, а также при использовании оптического кабеля.
Для 10-метрового медного кабеля нормальная работа канала в настоящее время достигается только при неSSC-соединении.
I2C Это необязательный интерфейс, и мы обычно ничего не теряем, если его не передадим.
Просто нужно отметить, что мы это не передаем.
Другая боковая полоса Его отсутствие влечет, например, следующие проблемы:
- невозможность синхронного сброса всего PCIe-дерева, как это происходит, когда все PCIe-устройства находятся в одном ящике;
- проблемы с внезапным исчезновением и добавлением устройств на шине PCIe;
Эти проблемы требуют более глобального подхода и будут решены на этапе системной интеграции.
На данный момент мы обходимся включением хост-системы после целевой, чтобы хост-система могла нормально пересчитывать устройства PCIe во время стандартного процесса загрузки.
Также эта проблема не актуальна при использовании NTB. Варианты и аналоги Собственно, как уже упоминал Алексей в последняя статья , адаптер у нас будет в двух вариантах.
Второй вариант не будет оснащен переключателем PCIe, но будет иметь простой редрайвер.
Это более дешевый вариант, подходящий для случаев, когда раздвоение портов не требуется.
Следует также сказать, что используемый нами относительно недорогой чип коммутатора PCIe не имеет контроллера DMA. Поэтому, если соединить эти два адаптера вместе, скорость будет низкой и сильно зависеть от работы процессора — от того, как и какими блоками данных он оперирует. Если хотя бы за одним адаптером стоит DMA-контроллер, реальная скорость обычно составляет около 50-60% от физически доступного предела — то есть около 8-9 ГБ/с в одну сторону.
Хотя, конечно, одна операция передачи данных может происходить и на скорости 16 ГБ/с.
Пиарщики любят писать 32 ГБ/с — это физический предел в ОБОИХ направлениях.
Но информационное взаимодействие на шине PCIe обычно двустороннее — цель отправляет Completion Response для каждой транзакции.
Так что работа с производительностью 32 ГБ/с мне кажется весьма сомнительной.
Естественно, такой выбор чипа вполне рационален: в планируемых сценариях использования хотя бы один адаптер обязательно будет иметь контроллер DMA. Поэтому в нашем случае нет смысла платить вдвое больше за более продвинутый чип PCIe-переключателя со встроенной поддержкой DMA. Мы не планируем продавать этот адаптер как отдельный товар — это не наша сфера деятельности; мы установим его только в комплексных решениях из собственного оборудования.
Если вам нужен аналогичный адаптер с DMA-контроллером, то на рынке появились такие решения.
Вы можете посмотреть Дельфин PXH830 (HBA) или PHX832 (Хост/Цель), хотя эти адаптеры имеют несколько разные параметры.
В модели 830 заявлена возможность разделения портов на 2 x8 или 1 x16; наш режим 4х4 недоступен.
832 может работать в режиме 4x4, но только с пассивными кабелями длиной до 5 м.
Обе модели заявляют о поддержке оптических кабелей длиной до 100 м.
Что дальше? В результате адаптер работал с медными кабелями длиной до 10 метров и с оптическими кабелями длиной до 100 метров, BER в обоих случаях находился в пределах, разрешенных стандартом.
Планируем выпустить вторую ревизию с уменьшенным количеством слоев, улучшить компоновку, протестировать и поиграться с тонкой настройкой параметров оптики для дальнейшего уточнения результатов.
Спасибо за внимание.
Теги: #pcie #PCI Express #проектирование #оптические кабели #медный кабель #Системный анализ и проектирование #Разработка систем связи
-
Влияние Рамы На Характеристики Коптера
19 Oct, 24 -
Правда О Byenokia
19 Oct, 24 -
Хабрахабр Внесен В Реестр Запрещенных Сайтов
19 Oct, 24 -
Балансировка Нагрузки В Openstack (Часть 2)
19 Oct, 24 -
Яндекс Запускает Панель Для Веб-Мастеров!
19 Oct, 24