Раз уж мы затронули немножко в комментариях к предыдущей статье тему расширения PCI Express и вывода шины за пределы шасси, следует наверное рассказать об этом чуть подробнее.
Небольшой дисклеймер – информацию обо всем, о чем говорится ниже, можно найти используя Google. Мы, конечно, про некоторые вещи знаем гораздо больше подробностей, чем можем рассказывать исходя из условий NDA.
История
Начнем издалека – с истории PCI Express вообще и нюансов с этим связанных. Спецификация первой ревизии появилась в далеком 2003 году, при этом поддерживалась скорость в 2.5 GTs на лэйн и агрегация до 16 лэйнов на порт (кстати, это наверное единственное, что так и не изменилось – несмотря на робкие упоминания и даже официальную поддержку в версии 2.0 ширины в x32, насколько мне известно никто порты такой ширины реально так и не поддерживает до сих пор). Обратите внимание, что скорость указана в GTs (транзакций в секунду) – это не биты данных, реальная битовая скорость ниже за счет кодирования 8b/10b (для версий до 2.1 включительно).
В течение следующих лет началось эволюционное развитие стандарта:
• 2005 год – релиз спецификации 1.1, содержащей незначительные улучшения без увеличения скорости
• 2007 год – стандарт версии 2.0, скорость на лэйн выросла в два раза (до 5GTs или 4Gbps)
• 2009 год – релиз версии 2.1, содержащей множество улучшений, по сути являющихся подготовкой к переходу к третьей версии
• 2010 – существенный скачок, переход к версии 3.0, который помимо увеличения канальной скорости до 8 GTs принес переход к новой кодировке (128b/130b), что позволило значительно сократить накладные расходы на передачу собственно данных. То есть если для версии 2.0 при скорости 5 GTs реальная битовая скорость составляла всего 4 Gbps, то для версии 3.0 при скорости 8 GTs битовая скорость составляет ~7.87 Gbps – разница ощутимая.
• 2014 – релиз спецификации 3.1. В него включены различные улучшения обсуждавшиеся в рамках рабочих групп.
• 2017 – ожидается релиз финального варианта спецификации 4.0.
Последствия
Далее будет большое лирическое отступление. Как видно из графика выхода спецификаций, рост скорости шины фактически остановился аж на семь лет, в то время как производительность компонентов вычислительных систем и сетей интерконнекта и не думала стоять на месте. Здесь надо понимать, что PCI Express, хоть и является независимым стандартом, развиваемым рабочей группой с огромным количеством участников (PCI Special Interest Group – PCI-SIG, мы тоже являемся членами этой группы), направление его развития тем не менее во многом определяется мнением и позицией Intel, просто потому, что подавляющее большинство PCI Express устройств стоит именно в обычных домашних компьютерах, ноутбуках и low-end серверах – царстве процессоров с архитектурой x86. А Intel – корпорация большая, и у нее могут быть свои планы, в том числе и слегка идущие в разрез с желаниями других участников рынка. И многие из этих участников были, мягко говоря, недовольны задержкой увеличения скорости (особенно те, кто вовлечен в создание систем для High Performance Computing – HPC, или, попросту — суперкомпьютеров). Mellanox например давно уже уперся в развитии InfiniBand в бутылочное горлышко PCI Express, NVIDIA тоже явно страдала от несоответствия скорости PCI Express потребностям в передаче данных между GPU. Причем чисто технически скорость увеличить можно было бы уже давно, но многое упирается в необходимость сохранения обратной совместимости. К чему это все в итоге привело:
• NVIDIA создала свой собственный интерконнект (NVLINK, первая версия имеет скорость 20 GTs на лэйн, вторая будет иметь уже 25 GTs) и объявляет о готовности лицензировать его всем желающим (к сожалению только хостовую часть, лицензирование end-point’а пока не предполагается)
• IBM добавляет в процессоры POWER8 поддержку NVLINK 1.0 (уже доступна в процессорах POWER8+)
• В POWER9 (которые появятся на рынке в 2017 году) IBM будет поддерживать NVLINK 2.0, а также на тех же самых физических портах можно будет использовать протокол OpenCAPI – когерентный интерфейс для подключения ускорителей.
• В POWER9 IBM реализует PCI Express на скорости 16 GTs, что соответствует драфту спецификации 4.0 – то есть, похоже, Intel окажется не первым, кто поддержит новый стандарт.
Roadmap по процессорам POWER
Ремарки
Кстати, относительно указания скорости есть любопытный момент. Общепринятым вариантом указания скорости работы PCI Express устройства являются обозначения типа Gen1, Gen2, Gen3. По факту же к этому надо относиться именно как к указанию поддерживаемой скорости, а не соответствия стандарту соответствующей версии. То есть, например, устройству, полностью соответствующему стандарту 3.1 никто не запрещает не уметь работать на скорости выше 5 GTs.
Собственно, чем хорош PCI Express с точки зрения разработчика – тем, что это наиболее прямой и унифицированный (поддерживаемый самыми разными платформами) способ подключить что бы то ни было к центральному процессору с минимальными накладными расходами. Конечно, у процессоров Intel есть еще QPI – но это шина, доступ к которой дают очень (ОЧЕНЬ!) ограниченному кругу особо приближенных компаний. У IBM в POWER8 это X-Bus, A-Bus и, в будущем (для POWER9) – OpenCAPI, но о стоимости лицензирования первых двух вообще лучше не думать а второй пока еще вообще нет (хотя она как раз должна быть открытой). Ну и конечно прямое подключение через PCI Express актуально только тогда, когда хочется много, быстро и с минимальной задержкой. Для всех остальных случаев есть USB, SAS/SATA, Eth и иже с ними.
Ближе к кабелям
Несмотря на то, что PCI Express изначально задумывался именно для подключения компонентов внутри компьютера, желание подключить что-нибудь кабелем возникло достаточно быстро. В быту этого как правило не требуется (ну разве что для ноутбуков иногда хотелось бы внешнюю видеокарту подключить или что-нибудь типа того), но для серверов, особенно с появлением PCI Express коммутаторов, это стало очень актуальным – необходимое количество слотов иногда не так уж просто разместить внутри одного шасси. Да и с развитием GPU и сетей вычислительного интерконнекта, особенно с появлением технологии GPU Direct, желание иметь много устройств подключенных по PCI Express к одному хосту только возрастало.
Первые варианты кабельного подключения PCI Express были стандартизированы еще в 2007 году (спецификация 1.0), вторая ревизия вышла в 2012 году, сохранив неизменным тип разъемов и кабеля. Нельзя сказать, что такое подключение получило очень широкое распространение (все же ниша достаточно узкая), но тем не менее несколько крупных вендоров выпускали как разъемы, так и кабели, в том числе активную оптику. Одной из наиболее известных компаний, предлагающих различные варианты шасси расширения с подключением шины PCI Express кабелем, является One Stop Systems.
Кабель для внешних подключений PCI Express
Однако кабель (и разъем), выбранные изначально, сегодня уже не очень удобны. Первая (и довольно существенная) неприятность заключается в том, что невозможно разместить количество разъемов, необходимое для вывода порта шириной x16, на одной низкопрофильной карте (точнее, можно использовать специальный коннектор для x16, но при этом теряется универсальность в плане использований портов меньшей ширины, да и сам этот тип коннектора как-то не прижился). Второе неудобство происходит из того, что такой тип кабелей особо больше нигде не используется.
Между тем в индустрии существует стандарт с долгой историей использования кабелей, а именно – SAS. И текущая версия SAS 3.0 работает на скорости 12GTs, что в полтора раза превосходит скорость PCI Express Gen3, то есть SAS-кабели неплохо подходят и для подключения по ним PCI Express. Кроме того, Mini-SAS HD коннекторы еще очень удобны тем, что по одному кабелю идет сразу 4 лэйна, и существуют сборки на 2 и 4 коннектора, что позволяет использовать порты шириной x8 и x16. Размеры коннекторов при этом достаточно компактны, чтобы сборка на 4 коннектора уместилась на низкопрофильной карте. Дополнительным плюсом этих кабелей является то, что и в самом коннекторе, и в кабельной сборке сигналы Tx и Rx разнесены – это позволяет снизить их взаимное влияние. Соответственно сейчас все больше решений, где надо вывести PCI Express кабелем за пределы шасси, используют именно Mini-SAS HD.
Кабель и разъемы Mini-SAS HD
Как следствие описанного выше, а также того, что в скором будущем выйдет SAS 4.0 который будет иметь скорость 24GTs и сохранит при этом кабели того же форм-фактора (Mini-SAS HD), участники PCI-SIG решили стандартизировать использование именно этого типа кабелей для внешнего подключения PCI Express (включая ревизию 4.0 в будущем).
Что надо учитывать при передаче PCI Express по кабелю
Теперь немного о нюансах использования кабелей (любых) и проблемах, которые приходится решать. Интересующие нас кабели бывают двух типов – пассивные медные и активные оптические. С медными проблем меньше, но для них все равно нужно учитывать следующие моменты:
• при использовании пассивных кабелей из соображений обеспечения целостности сигнала необходимо на плате адаптера ставить или редрайверы, или коммутатор PCI Express; коммутатор необходим в случае, если хочется иметь возможность бифуркации порта x16, приходящего с хоста, на большее число портов (например 2x8 или 4x4), а также если удаленная сторона не поддерживает работу с раздельным 100MHz Reference Clock или необходимо обеспечить наличие непрозрачного моста (NT Bridge) между двумя хостами;
• в случае если необходим агрегированный линк (x8, x16) стоит обратить особое внимание на допустимый разброс длины кабелей конкретного производителя (он бывает особенно велик для длинных кабелей, и тогда можно получить значительный перекос длины между лэйнами одного порта, который превысит заложенные в стандарте допуски);
• нужно учитывать, что в кабеле Mini-SAS HD проходят только четыре дифф. пары и линии земли, то есть весь набор sideband сигналов, необходимых для полноценной работы PCI Express, там не протянуть; это может быть не критично, если кабель используется для связи двух коммутаторов, а вот в случае когда нужно просто удаленно подключить endpoint возможно придется использовать дополнительные кабели для проброса сигналов сброса и управления Hot Plug’ом;
• наверное излишне упоминать, что обе стороны должны быть заземлены, иначе возможно возникновение паразитного тока через линии земли кабеля, что совсем нежелательно.
Применение активных оптических кабелей позволяет не задумываться о части вопросов, которые приходится решать при использовании пассивной меди (редрайверы можно не ставить, поскольку конечной точкой прохождения электрического сигнала является сам трансивер, заземление тоже перестает волновать, так как две стороны кабеля являются гальванически изолированными), но при этом оптика не только не решает остальные проблемы присущие пассивным кабелям, но и привносит новые, присущие только ей:
• помимо ограничения на одинаковую длину кабелей появляется еще и ограничение на их идентичность – крайне нежелательно в пределах одного порта использовать кабели разных производителей, поскольку они могут иметь разную задержку на трансиверах;
• оптические трансиверы не поддерживают передачу состояния «Electrical Idle»;
• сюрприз – активные трансиверы сильно греются, и их нужно охлаждать;
также могут быть определенные нюансы, связанные с импедансом трансиверов, уровнями их сигналов и терминированием.
Альтернативы Mini-SAS HD
Конечно же Mini-SAS HD — не единственный тип кабелей и разъемов, которые можно использовать для подключения PCI Express. Можно вспомнить к примеру про классические QSFP или CXP, которые вполне подходят для этих целей, или подумать о более экзотических вариантах вроде установки оптического трансивера прямо на плату и выходе с карты сразу оптикой (у того же Avago Broadcom есть много подходящих вариантов, ну или вот например Samtec FireFly) — но все эти варианты оказываются существенно дороже или не очень удобны исходя из габаритов разъемов.
Кроме упомянутой выше инициативы по стандартизации Mini-SAS HD в качестве кабеля для внешних подключений PCI-SIG также занимается разработкой нового стандарта кабелей, который хоть и носит название OCuLink (Optical & Cuprum Link), скорее все же будет подразумевать только пассивные медные кабели, как для внутренних (в пределах шасси), так и для внешних подключений. Разъемы и кабели этого стандарта достаточно компактны, на рынке уже существуют серийные продукты, соответствующие этому, еще не выпущенному стандарту (у Molex это называется NanoPitch, Amphenol также предлагает кабели такого форм-фактора, в том числе и активные). К сожалению, эти разъемы также не подразумевают размещение четырех коннекторов на низкопрофильной карте. В сочетании с тем, что ни один вендор из тех, с кем мы общаемся, пока не планирует делать активную оптику с такими коннекторами, это вряд ли будет способствовать использованию этого типа кабелей для внешних подключений. А вот как вариант для внутренних кабелей это достаточно интересно, более того, мы уже видели проекты с их использованием и сами собираемся применять этот тип кабелей в нашем сервере для подключения дискового контроллера к материнской плате.
Внутренний кабель стандарта OCuLink
Что делаем мы
Теперь немножко про наши продукты. У нас есть проект, про него мы наверное тоже чуть позже будем подробнее рассказывать, который предполагает создание шасси с развитой коммутационной топологией PCI Express и подключение его к нескольким хостам. Понятно, что в этом случае не обойтись без вывода PCI Express через кабели, и для этого мы сделали плату адаптера на базе PCI Express коммутатора PLX (который был куплен Avago, который еще и переименовался в Broadcom после того, как и его тоже купил – в общем эти поглощения уже надоели, поэтому будем называть его по-прежнему PLX). Для нашего решения мы использовали кабели Mini-SAS HD – все же это нам кажется оптимальным вариантом, и судя по направлению работы PCI-SIG – мы не одиноки в этом убеждении.
Адаптер для вывода PCI Express через кабель собственной разработки
После получения и тестирования первых образцов мы с некоторым удивлением обнаружили, что при использовании качественных пассивных кабелей можно обеспечить работоспособность шины на скорости 8GTs (Gen3) через кабель длиной до 10 метров (длиннее пассивных кабелей мы просто не видели). А если требуется больше – то мы можем работать и с активными оптическими кабелями (проверили – работает).
На самом деле ставить достаточно дорогой чип коммутатора PCI Express в нашем проекте есть смысл только на одной стороне – стороне хоста, чтобы обеспечить возможность бифуркации порта x16 на четыре порта по x4. На другом конце кабеля достаточно поставить адаптер с редрайверами, поскольку в нашем варианте на этой стороне все будет и так подключаться к PCI Express коммутатору, который можно запрограммировать на требуемое разбиение порта.
И немножко о совместимости
При использовании Mini-SAS HD для передачи PCI Express стоит обратить внимание еще на один нюанс. Нумерация пар в коннекторе, предполагаемая SAS, не очень удобна для брейкаута в случае PCI Express. До тех пор, пока вы не предполагаете работать со сторонним оборудованием это не критично – можете подключать как вздумается вообще. Но если есть желание обеспечить совместимость с другими продуктами в будущем, то лучше придерживаться рекомендации PCI-SIG из изменить порядок подключения лэйнов.
Рекомендуемый для PCI Express порядок подключения пар на коннекторе
Автор: YADRO