`

СПЕЦИАЛЬНЫЕ
ПАРТНЕРЫ
ПРОЕКТА

Архив номеров

Как изменилось финансирование ИТ-направления в вашей организации?

Best CIO

Определение наиболее профессиональных ИТ-управленцев, лидеров и экспертов в своих отраслях

Человек года

Кто внес наибольший вклад в развитие украинского ИТ-рынка.

Продукт года

Награды «Продукт года» еженедельника «Компьютерное обозрение» за наиболее выдающиеся ИТ-товары

 

PCI Express: особенности новой шины

0 
 

Основные идеи

PCI Express сочетает концепции и технологии, отчасти уже знакомые нашим читателям. Трудясь над проектом Arapahoe, как изначально называлась шина, инженеры Intel не пытались изобрести велосипед. Они лишь воспользовались современными разработками в области сетей и устойчивого к ошибкам кодирования информации, и в этом смысле PCI Express -- настоящее дитя своего времени.

Нынешнее свое название стандарт получил в 2002 г. после образования альянса PCI Special Interest Group (PCISIG), к чему Intel приложила все усилия. Ее способность убеждать позволила привлечь к числу сторонников даже AMD, продвигающую свою шину HyperTransport, в чем IT-сообщество усмотрело явный успех корпорации на пути популяризации PCI Express.

Шина должна вобрать в себя все удельные интерфейсы-"королевства", на которые поделена базовая платформа современного ПК. Ведь вследствие недостаточной пропускной способности PCI оказалась вытесненной на периферию, а взаимодействие со всеми прочими подсистемами ввода/вывода (например, интегрированными сетевыми адаптерами класса Gigabit Ethernet), контроллерами памяти и графическими подсистемами осуществляется с помощью специальных шин. Согласно новой идеологии центральным коммуникационным хабом материнской платы станет Root Complex. Этот узел является точкой соприкосновения трех интерфейсов: шины памяти, PCI Express и процессорной шины.

Root Complex имеет один или несколько портов PCI Express. Все прочие разветвления выполняются путем установки коммутаторов и мостов, аналогичным образом подключаются наследуемые и прочие специализированные интерфейсы, например PCI-X или "старая" PCI. С логической точки зрения все коммуникации в системе относятся к категории точка--точка и соединяют конечные устройства напрямую. Коммутаторы (switch) в основном занимаются пересылкой пакетов согласно адресу получателя, хотя иногда на них возложены и более сложные функции.


Стек протоколов: физический уровень

PCI Express особенности новой шины
Рис. 1. Данные кодируются согласно схеме 8b/10b
PCI Express особенности новой шины
Рис. 2. Заголовок пакета Transaction Layer
PCI Express особенности новой шины
Рис. 3. Cтек протоколов PCI Express
PCI Express особенности новой шины
Рис. 4. Пример топологии PCI Express
PCI Express особенности новой шины
Рис. 5. Логическая схема коммутатора (Switch)
PCI Express особенности новой шины
Рис. 6. Сравнение архитектур PCI и PCI Express
PCI Express особенности новой шины
Рис. 7. Схема формирования пакета
Следуя общепринятой сетевой идеологии, стек PCI Express разделили на слои: Transaction, Data Link и Physical. Начнем с нижнего. На аппаратном уровне есть много интересного, правда, далеко не нового. Например, данные передаются последовательно, с применением дифференциального усиления: один провод содержит интерпретацию сигнала со знаком "плюс", а другой -- со знаком "минус". Помехи одинаково воздействуют на оба провода, и когда дифференциальный приемник на другом конце линии инвертирует сигнал, полученный с одного из них, и складывает с парным ему сигналом-"антонимом", возникшие в пути искажения "аннигилируются" (поскольку в итоге дают отклонения с разными знаками).

Технологию, примененную в PCI Express, именуют симплексной, и это означает, что данные передаются одновременно в обоих направлениях по двум парам проводов или дорожке (Lane). Иначе схему можно называть дифференциальным дуплексом. Первая версия стандарта специфицирует пропускную способность одного симплексного канала как 2,5 Gbps в одну сторону или 5 Gbps в обе. Но это только точка отсчета, поскольку частота в официальных документах описана как Scaleably frequency.

Впрочем, приведенные выше значения являются "грязными", если провести аналогию с зарплатой. Разработчики Intel по ряду причин отказались от использования отдельной линии для передачи синхроимпульсов. Вместо этого они искусственно ограничили длительность последовательностей единиц и нулей, вызывающих проблемы с синхронизацией, -- ведь с точки зрения электроники это постоянный ток. В результате приемник оказывается не в состоянии зафиксировать границы символов.

Каждый входящий символ обозначается последовательностью из кодовой книги, не содержащей двух одинаковых битов подряд. Исходная последовательность битов разбивается на две группы -- по 3 и 5 бит. В кодовой книге им соответствуют последовательности из 4 и 6 бит, которые объединяются в символ размером 10 бит. Из общего словаря выделены 12 управляющих символов, использующихся для передачи служебных сообщений и отличительной маркировки пакетов Transaction Layer и Data Link Layer.

Такой формат записи символа называется 8b/10b. Накладные расходы кодирования составляют 20%, т. е. 2 бита на каждые 10. Следовательно, реальная производительность соединений PCI Express будет на 1/5 ниже заявленных номинальных значений. Чтобы в отсутствие данных для передачи не было утрачено достигнутое между приемником и передатчиком согласование, даже во время вынужденного бездействия по линиям транслируется последовательность из нулевых символов "00", кодированных согласно схеме 8b/10b.

Непосредственно перед передачей данные подвергаются еще одной трансформации -- скрэмблингу. Он выполняется путем проведения операции XOR над 8 битной поступающей последовательностью и 16 битным сдвиговым регистром.

Инициализация линии начинается с пересылки "тренировочных" последовательностей. В них могут кодироваться параметры соединения. Вероятные расхождения в частотах тактовых генераторов приемника и передатчика компенсируются за счет дополнительных последовательностей SKP, которые периодически вставляются в передаваемые данные. Периодичность вычисляется исходя из разницы между абсолютными показателями тактовых генераторов соединенных устройств. Специфицирован и метод передачи под названием Spread Spectrum Clock (SSC), что означает модулирование скорости передачи на 1% с частотой не выше 33 кHz.

Дополнительное кодирование как метод синхронизации не является идеальным решением, поскольку необходимость предварительной обработки повышает латентность. Такое положение дел не удовлетворит разработчиков систем с интенсивным обменом информацией в реальном масштабе времени, например многопроцессорных систем или компонентов чипсета. Скорее всего, они вынуждены будут пользоваться каким-либо иным протоколом или создавать собственный.

Архитектура физического уровня не ограничена единственным соединением. PCI Express предусматривает конфигурации с 2, 4, 8, 12, 16 и 32 симплексными линиями связи. Причем, несмотря на последовательный характер шины, данные все же равномерно распределяются между всеми доступными линиями по принципу, известному как roundrobin, то есть по кругу. Если линий две, то это выглядит следующим образом: первый байт -- первой линии, второй -- второй, третий -- снова первой и т. д. Простая арифметика дает максимальную производительность шины с 32 линиями равную 20 Gbps, а с учетом накладных расходов на синхронизацию -- 16 Gbps, по 8 Gbps в каждую сторону.


Стек протоколов: уровень Data Link

Слой Data Link контролирует правильность приема пакетов, он добавляет к пакету, полученному от Transaction Layer, номер последовательности и контрольную сумму (CRC). Data Link управляет линией связи, информируя выше- и нижележащие слои стека о ее текущем состоянии (активная, неактивная, инициализируется и др.).

Всего в спецификациях определено три класса пакетов Data Link Layer Packets: относящиеся к подтверждению приема пакета (Ack, Nak), инициализации потокового контроля (InitFC) и управлению энергопотреблением (Power Management). Проверка корректности передачи пакетов выполняется путем отсылки подтверждений -- наличие пакетов Ack и Nak говорит само за себя. Пакеты, получаемые от Transaction Layer, помечаются идентификаторами последовательности длиной 12 бит и помещаются в специальный буфер повторной ретрансляции. Оттуда они удаляются лишь после получения подтверждения приема. Как только количество пакетов в буфере повторной передачи превышает установленное значение, Data Link требует от физического уровня реинициализировать линию.

Подтверждения приема могут быть объединены (сколлапсированы) приемником. Поскольку передатчик всегда рассматривает только Ack или Nak с самым свежим номером последовательности, нет смысла выдавать все накопившиеся в буфере подтверждения -- достаточно выслать только последнее.


Стек протоколов: уровень транзакций

Transaction Layer, как следует из его названия, ведает оформлением раздельных неопубликованных транзакций (Non Posted (split) transactions), состоящих из запроса (Requester) и ответа (Completer). Ответы формируются только для транзакций Non Posted, если требуется подтвердить выполнение операции (например, чтение из памяти). Для разрешения ситуаций, когда ответ не приходит вообще, вводится понятие максимального времени ожидания ответа (timeout), по истечении которого начинается повторная ретрансляция переданных, но не подтвержденных пакетов.

Transaction Layer оперирует четырьмя различными адресными пространствами: памяти, ввода/вывода, конфигурации и сообщений. Адрес операции доступа к памяти может быть 32 (для адресов до 1 GB) или 64 разрядным. В случае необходимости Transaction Layer имеет право дополнить пакет своей собственной 32 битной контрольной суммой (ECRC), которая сохраняется в поле TLP Digest (Transaction Layer Packet Digest).

Теперь подробнее о типах пакетов Transaction Layer. Первые три имеют в достаточной степени красноречивые названия, чтобы понять их суть: обмен данными с памятью, операции ввода/вывода и конфигурация устройств PCI Express (Memory, I/O, Config). В заголовке пакета указывается идентификационный номер Requester ID (включает в себя идентификаторы шины, устройства и функции), идентификатор типа трафика (Traffic Class), адрес, сведения о маршрутизации и значение, определяющее длину этого пакета или пакета, которым должно ответить запрошенное устройство. Также в заголовке находится ряд дополнительных атрибутов, один из них отмечает принадлежность к транзакции. Информация о типе трафика необходима для управления приоритетом. Существует 8 уровней приоритета -- по числу возможных виртуальных каналов. По умолчанию используется нулевой уровень, подразумевающий первоочередную обработку пакета.

Идеология виртуальных каналов позволяет избежать взаимного блокирования в идеале независимых процессов. Но если с точки зрения проводных ресурсов (единая линия) каналы действительно эфемерны, то для коммутаторов они вполне реальны. Чтобы обеспечить независимость каналов, требуются аппаратные ресурсы для их раздельной обработки: буферы, управляющая логика и т. д. Окончательно каналы идентифицируют с помощью Virtual Channel ID, который присваивается произвольно каждому классу трафика. Правило уникальности нумерации действует исключительно в рамках порта, причем разрешается несколько классов трафика ассоциировать с одним виртуальным каналом.

Поддержка изохронного трафика тесно связана с понятиями виртуального канала и приоритета, которые и дают возможность управлять качеством сервиса. Чтобы добиться минимальной латентности и высокой производительности, программное обеспечение обязано установить для портов, задействованных в передаче данных, ограничение на максимальный размер пакета и проверить значение их регистра Maximum Time Slots на соответствие требованиям, предъявляемым изохронным потоком.

Изохронный трафик может передаваться как между конечным устройством и Root Complex, так и согласно идеологии точка--точка между двумя конечными устройствами посредством коммутатора. Допускается сосуществование в шине сразу нескольких активных изохронных потоков, которые будут занимать различные виртуальные каналы. Прежде чем пересылать такой трафик, устройство должно "договориться" с шиной о возможности гарантировать выделение затребованной пропускной способности и обеспечении необходимой латентности. Каждому генератору изохронных потоков выдается лимит пропускной способности, и любые пакеты, отправленные свыше этого лимита, будут игнорироваться шиной.

Отныне пакеты-сообщения приходят на смену известному нам испокон веков механизму прерываний (MSI, Message Signalling Interrupt). Прежние аппаратные сигналы прерываний остаются в стандарте только как дань поддержке наследованного оборудования и будут инкапсулироваться при передаче по шине в пакеты Message особого вида INTx. Введено 8 таких пакетов: для инициализации и завершения прерываний INTA, INTB, INTC и INTD. Когда устройство генерирует прерывание, образуется виртуальный "провод", и все коммутаторы, получившие на вход такое сообщение, обязаны ретранслировать его в неизменном виде вышестоящим в иерархии элементам шины (вплоть до Root Complex). Устройства PCI Express должны поддерживать и уметь обрабатывать оба типа прерываний, а устаревшее программное обеспечение сможет, как и раньше, отслеживать инкапсулированные INTx прерывания по регистрам Interrupt Pin.

Заметим также, что существует возможность управлять маршрутизацией пакетов типа Message с помощью специального подполя Routing в поле типа пакета. Оно принимает следующие значения: маршрутизация к Root Complex, маршрутизация в соответствии с адресом или Requester ID, широковещательная рассылка от Root Complex и терминирование на приемнике.

PCI Express, как и следовало ожидать, полностью соответствует требованиям спецификаций PCI Bus Power Management Interface Specification 1.1 и ACPI 2.0. Управление энергопотреблением выполняется отдельно на уровне каждого соединения. Есть несколько состояний энергопотребления: L0s, L1, L2 и L3. При выходе из L0s не нужна реинициализация соединения, и работоспособность линии может быть восстановлена за счет быстрого тренировочного периода (Fast Training Sequence). В состоянии L1, добавленном в схему для соблюдения формальной совместимости с PCI, все рабочие напряжения и тактовые частоты подаются, но уровень потребления и готовности ниже, чем в L0s. Основной источник питания и тактовые генераторы отключаются после перехода в состояние L2. Уровень L3 соответствует состоянию "выключено".

Устройства, как и во времена PCI, следует проектировать с учетом поддержки перехода между состояниями: от D0 (работает) и до D3 (D3hot и D3cold -- "выключено" или "спит"). Управление сбережением энергии и уведомление шины и устройств о событиях Power Management Events осуществляется сообщениями специального формата PM_PME Message. О пробуждении устройству разрешается сигнализировать не только сообщениями, но и с применением специального аппаратного сигнала-маячка Beacon. Он представляет собой произвольный набор данных, модулированный в импульсы продолжительностью от 2 нс до 16 мкс. Чтобы пробуждение состоялось, устройству следует заранее побеспокоиться об установке специального бита в регистре Power management Control/Status из конфигурационного пространства шины, подтверждающего поддержку функций управления питанием.

Особо прописана процедура выключения энергии. Контроллер перед началом данной операции высылает широковещательное сообщение, которое ретранслируется далее всеми коммутаторами в системе. Причем каждый из них сначала собирает все подтверждения о приеме от устройств, расположенных ниже по иерархии, и лишь затем рапортует своим пакетом Ack вышестоящему коммутатору или Root Complex.

PCI Express имеет и собственный, дополнительный набор энергосберегающих механизмов под названием ASPM (Active State Power Management). Его изюминкой является возможность автоматического перевода соединений в состояние пониженного энергопотребления без команды со стороны программного обеспечения. Как только прекращается передача данных по соединению, начинается отсчет 7 мкс, по истечении которых оно переходит в режим L0s. Возврат в рабочее состояние происходит при необходимости передать новые данные. Устройства в процессе конфигурирования сообщают шине свои параметры (лучшее и худшее времена выхода из состояний энергосбережения) и уровень поддержки ASPM.

В это же время устанавливается тип используемых символов при 8b/10b-кодировании и полярность линии (распределение ролей между двумя проводами дорожки -- где сигналы будут положительными, а где отрицательными). Как только нарушается неактивное состояние (Electrical Idle или отсутствие нулевой последовательности битов, напряжение на линии стабильно) на любой из линий, которые не были задействованы в установленных соединениях, производится ее опрос с целью обнаружить приемник подключенного "по-горячему" устройства.

Обмен данными включает в себя отсылку пакета и получение подтверждения приема. Механизм действует следующим образом: отправляется некоторое количество пакетов, их копии помещаются в буфер ретрансляции и запускается таймер. По истечении установленного времени все накопившиеся в буфере пакеты повторно отправляются адресату. Таймер реинициализируется при получении любого подтверждения или после ретрансляции неподтвержденных пакетов.

Правильный выбор политики отсылки подтверждений представляет собой определенную проблему. Частота подтверждений зависит от размера буфера ретрансляции. Большой буфер приводит к удорожанию системы и увеличению потребления электроэнергии. Но слишком большое количество подтверждений в состоянии отнимать существенную долю пропускной способности шины. Поэтому разработчикам рекомендуют так проектировать рабочие циклы, чтобы отсылка подтверждений начиналась только в отсутствие пакетов с данными, ожидающими отправки.

Потоковый контроль относится к юрисдикции Transaction Layer и основывается на "доверии": при инициализации устройство обязано сообщить о готовности принять некоторое минимальное количество пакетов. Информация о "кредите доверия" распространяется специальными пакетами формата FCP (Flow Control Packets). Они информируют передатчик о том, что принимающая сторона готова обработать определенное количество данных. По исчерпании кредита передача приостанавливается до получения новых FCP от адресата. О корректности доставки пакетов и организации ретрансляции поврежденных данных должен беспокоиться физический уровень и Data Link. Также потоковый контроль не управляет обменом, происходящим между нижележащими уровнями стека. Есть возможность установить бесконечный кредит доверия, но если этого сделано не было, каждые 30 мкс устройством должны генерироваться пакеты с обновлением информации о кредите -- Update FCP.

Конфигурация шины осуществляется как старым методом, бинарно совместимым с унаследованными устройствами PCI, так и новым -- с увеличенным адресным пространством. В отличие от PCI и PCI-X, в спецификациях PCI Express не установлено максимально допустимое время для инициализации устройства. Если последнее не успевает закончить стартовые процедуры до получения запроса о конфигурации, оно может ответить на него специальным сообщением Configuration Request Retry Completion Status. Это подтверждает работоспособность устройства и позволяет Root Complex завершить конфигурацию.

Уведомление об ошибке происходит путем отсылки пакета Message особого типа. Набор сообщений невелик: всего три, с помощью которых система различает фатальные, не фатальные неисправимые и исправимые ошибки. Другой механизм информирования об ошибках называется несколько экстравагантно "data poisoning", или говоря официальным языком -- Error Forwarding. Суть его состоит в передаче пакета с установленным битом EP в заголовке в случае регистрации внутренней для устройства ошибки. Например, такова реакция устройства при нарушении целостности данных в кэше или буфере и ошибке контроля четности при чтении из памяти.

Если ошибку следует обрабатывать программным образом на более высоком уровне, нежели стек протоколов PCI Express, то устройству разрешается информировать о ней посредством поля Completion Status в пакете-ответе Completion. Это возможно только для неопубликованных транзакций (Non-Posted Transactions), которые требуют ответа для нормального их завершения. Любое сообщение об ошибке вызывает изменение битов в регистре PCI Status, что обеспечивает совместимость с PCI на программном уровне.


Железно!

С аппаратной точки зрения разъемы PCI Express будут включать в себя 4 разновидности набора контактов, поддерживающих 1, 4, 8 или 16 соединений. При этом карты с меньшим количеством контактов допускается устанавливать в большие слоты. По желанию конструктора плат расширения они могут поддерживать горячее подключение. Предусмотрено три набора контактов питания: +3,3 В -- основное, +3,3 В -- вспомогательное (aux) и +12 В. Напряжения были выбраны из соображения совместимости с ныне выпускаемой логикой. Отдельная спецификация определяет внешний вид разъемов PCI Express для мобильных устройств.

При необходимости карты можно снабжать набором дополнительных контактов для реализации таких возможностей, как улучшенная синхронизация (дифференциальное кодирование синхроимпульсов) или распознавание установленной карты при горячем подключении. Специальная линия отведена для информирования о стабильности подачи питающего напряжения. Она обеспечивает корректность функционирования при переходе между состоянием пониженного энергопотребления (сон) и рабочим режимом. Для инициализации "уснувшего" устройства используется еще одна линия. Зарезервированы контакты также для SMBus (System Management Bus) -- стандартной шины управления платами расширения.

Задача определения момента горячего подключения устройства-платы возложена на ближайший к нему коммутатор или на Root Complex. Об установке платы сигнализирует замыкание нескольких контактов. Они разбиты на две группы: один расположен у левого края разъема, а остальные соединены накоротко и позволяют детектировать установку в "широкий" разъем (например, на 16 контактов) "узкого" устройства (на 4 или 8 контактов). Причем физически сигнальные контакты несколько короче всех остальных, чтобы дать интерфейсной электронике небольшую "фору" для завершения переходных процессов до появления в информационном регистре шины бита, свидетельствующего о завершении подключения.

Пользователь способен контролировать функционирование устройств, подключаемых и отключаемых "по-горячему", с помощью двух предусмотренных стандартом световых индикаторов, называющихся Power и Attention. Они могут быть установлены как на шасси системы, так и непосредственно на подключаемом модуле. Мигающий светодиод Attention привлекает внимание пользователя к устройству, что позволяет визуально идентифицировать его при выполнении различных действий с программным или аппаратным обеспечением. Постоянное свечение этого индикатора свидетельствует о возникновении проблем. Непрерывно горящий светодиод Power информирует, что модуль находится в рабочем состоянии, а мигающий говорит о процессе инициализации или отключения устройства. Инсталлированные модули будут блокироваться в системе с помощью механического и электромеханического замков. Возле каждого слота должна находиться кнопка Attention, нажатие на которую предваряет установку в слот или извлечение из него карты расширения.

Вместе с функцией горячего подключения в стандарт ввели понятие энергетического бюджета (Power Budget). Устройства теперь информируют шину о своей потребности в энергии, а программное обеспечение -- выставляет в регистрах значения максимальной мощности, которую в состоянии обеспечить система питания. Вопросами распределения энергии занимается ПО Power Budget Manager.

Максимальная длина контактной линии при соблюдении всех правил корректной проводки в четырехслойных платах достигает 50 см. Однако в случае мобильных систем ее придется ограничить, поскольку такая дальнобойность налагает повышенные требования на приемопередатчики, что ведет к повышенному расходу электроэнергии.

Разработан стандарт на миниатюрные "монофункциональные" карты расширения PCI Express Mini Card, которые в два раза уже (30 мм) современных Mini-PCI Card type III. Вдобавок введены карты формата NEWCARD Module, призванные заменить CardBus и PC Card (PCMCIA) в мобильных ПК. Внешне они практически не отличаются от привычных PC Card, и даже в подражание запланирован их выпуск в трех различных формфакторах: обычные, двойной ширины и полуторные. Что касается размеров обычных плат для настольных систем, то они были подобраны исходя из соображений совместимости: 111x312 мм (полная длина), 167 мм (половинная длина) и 69x167 мм (low-profile).

Конструкция серверного варианта ориентирована на решение задачи горячего подключения/отключения плат расширения без необходимости открывать корпус. Чтобы упростить установку новых плат, они могут быть изготовлены в формате специального модуля, имеющего удобный защитный корпус. Это делает процедуру замены платы аналогичной замене съемного винчестера или дублирующего блока питания. В спецификациях говорится о двух видах модулей: Base и Full Module половинной и полной ширины соответственно. Установка параллельно материнской платы осуществляется за счет PCI Express Riser.

В сторону увеличения по сравнению с PCI и AGP пересмотрены энергетические ограничения -- максимальное потребление для стандартной платы установлено на уровне 60 Вт.


Итоги

В настольных системах PCI Express заменит шины PCI и AGP, не затрагивая интерфейс с памятью и дисковые интерфейсы. В мобильных ПК процесс пойдет дальше, и на языке новой шины "заговорят" стыковочные станции, адаптеры PC Card и собственно карты расширения, а также различные интегрированные на материнской плате устройства (сетевые адаптеры, беспроводные адаптеры и т. д.). В серверах PCI Express вторгается в дисковую подсистему и станет способен обслуживать контроллеры RAID-массива. На слайдах, опубликованных в Интернете, показывается и прямое подключение к шине InfiniBand. В общем, то ли еще будет...

Автор благодарит альянс PCI-SIG и лично Михо Хасуо (Miho Hasuo)
за предоставленную возможность ознакомиться с полным
текстом PCI Express Base Specifications v.1.0a.

0 
 

Напечатать Отправить другу

Читайте также

 
 
IDC
Реклама

  •  Home  •  Рынок  •  ИТ-директор  •  CloudComputing  •  Hard  •  Soft  •  Сети  •  Безопасность  •  Наука  •  IoT