Смекни!
smekni.com

«PC` компьютерных шин и замена pci» (стр. 2 из 5)

Приемник в свою очередь распаковывает прибывшие данные, исправляет ошибки или запрашивает повторную передачу, определяет получателя и перенаправляет пакет далее. Собственно «последовательность» шины вовсе не означает что данные в ней передаются побитно (хотя в случае с PCI Express это действительно так) — последовательность понимается в смысле того, что данные и служебная информация передаются последовательно, по одним и тем же каналам данных (в отличие от параллельной передачи той же информации). Стандарт PCI Express предусматривает следующую схему организации данных (см. рис. 2).

Не вдаваясь глубоко в технические подробности — PCI Express использует традиционную многоуровневую модель, аналогичную сетевой ISO/SOI. На самом верхнем уровне располагаются прикладные приложения, использующие данное PCI-устройство. Для них в новой схеме не изменяется ровным счетом ничего. Для передачи или приема данных через шину PCI приложения обращаются к операционной системе. Она обслуживает инфраструктуру всех PCI-устройств, обрабатывает события — подключение устройств, присвоение им уникального адреса, нахождение подходящего драйвера для работы с конкретным устройством и так далее. На этом уровне по-прежнему сохраняется стопроцентная совместимость с уже существующей моделью PCI Plug`n`Play (PnP) — все старые операционные системы как работали с PCI, так и будут работать с PCI Express. Впрочем, некоторые отличия здесь уже есть, и для полноценной реализации всех возможностей новой шины (скажем, горячего подключения устройств), не предусмотренных в предыдущем стандарте, потребуется немного доработать ОС. В случае продукции Microsoft полноценная поддержка PCI Express обещана, увы, лишь в Longhorn, но можно не сомневаться, что за остающееся до ее выхода время MS выпустит и соответствующие «заплатки» и к некоторым уже существующим системам.

Рис. 2. Схема организации данных в архитектуре шины PCI Express.

Спуск еще на уровень по схеме — и мы попадаем в мир драйверов, обслуживающих конкретные устройства PCI Express. Здесь все также без изменений — разработчикам не придется изучать новую шину, совместимость с PCI стопроцентная. То есть получается, что на программном уровне отличия PCI Express от PCI очень малы — обеспечена полноценная совместимость старой и новой шин. Однако все последующие уровни уже относятся к «железной» реализации и здесь происходят кардинальные изменения.

Прежде всего, добавлено два новых уровня (Transaction Layer и Link Layer), которых иначе как TCP и IP не назовешь — выполняемые функции абсолютно те же, что и у «сетевых» аналогов. Transaction Layer получает запросы на чтение и запись от программного уровня и заведует первоначальной упаковкой данных, передачей их конкретному получателю и гарантиями корректной доставки сообщения. Проще говоря если какой-то пакет не дойдет до получателя либо получатель обнаружит в принятом пакете ошибку, то протокол транспортного уровня будет повторять его передачу до тех пор, пока пакет не будет получен — тем самым гарантируется, что передаваемый через PCI Express поток данных достигнет получателя в целостности и сохранности. Каждый пакет снабжен уникальным идентификатором. На этом уровне поддерживается 32-битная и расширенная 64-битная адресация памяти, а также четыре адресных пространства — новое «пространство сообщений» (Message Space) и три уже известных по шине PCI — память, пространство ввода/вывода и конфигурационное пространство. Пространство сообщений предназначено для упрощения формата передачи данных — замены сигналов боковой полосы (side-band) в спецификации PCI 2.2 и исключения «специальных циклов» старого формата (прерывания, запросы управления энергосбережением, сброс).

Link Layer заведует более приземленными делами - здесь указывается уникальный номер пакета (его маршрутизация осуществляется по заголовку, относящемуся к транспортному уровню), по которому контроллеры шины принимают решение о направлении пакета в конкретную физическую линию передачи данных, здесь же располагается код обнаружения и исправления ошибок в принятом пакете (CRC), номер пакета, позволяющий отличить один пакет от другого, и разная вспомогательная информация (например, удостоверяющая, что пакет не был искажен в ходе его передачи). Однако в отличие от TCP/IP, маршрутизация пакетов (принятие решений о том, на которую шину перенаправить пакет, какой из нескольких претендующих пакетов передать первым) осуществляется на транспортном уровне. Интересно также, что пакет передается только в том случае, когда поступил сигнал готовности от буфера приема. Как следствие, уменьшается число повторов пакета и шина используется более эффективно. Формат пакетов шины PCI Express показан на рис. 3 и детализирован во врезке.

Рис. 3. Формат пакетов шины PCI Express.

Формат пакетов шины PCI-Express

Frame — начальный и конечный фрейм пакета - его добавляет физический уровень для определения начала и окончания передачи пакета данных;
Packet # — номер пакета, добавляется на сетевом уровне чтобы пакеты можно было отличить друг от друга;
Header — заголовок пакета, описывает тип пакета, получателя, приоритет и другие свойства, это информация транспортного уровня;
Data — собственно данные пакеты;
CRC — контрольная сумма пакета.

Fmt — указание типа заголовка (12 или 16 байт) и признак наличия в пакете данных;
Type — тип пакета (один из четырех основных типов - Memory, I/O, Config, Message и бит, определяющий запрос это или ответ на запрос);
RequestorID — получатель пакета (шина, устройство, функция устройства);
Reserved — зарезервированное поле;
Traffic Class — используется для маршрутизации;
Address/Routing — адрес в памяти, куда предназначается пакет (32- или 64-разрядный) или иная информация о маршрутизации пакета;
Length — объем передаваемых в пакете данных;
Attr — вспомогательные атрибуты пакета (Snoop, Ordering);
Tag — идентификатор транзакции (Transaction Tag);
Reserved — зарезервированное поле;
Byte Enables — вспомогательная информация.

В самом низу этой пирамиды (рис. 2) размещается собственно физическая реализация шины передачи данных — это две независимые дифференциальные пары проводников с импедансом 50 Ом (первая пара работает на прием данных, вторая - на передачу), данные по которым передаются с использованием избыточного кодирования по схеме «8/10» с исправлением ошибок. Если говорить более простым языком, то каждый байт (8 бит) данных, по определенной схеме кодируется 10 битами передаваемых данных (10 бит для передачи этой информации многовато, поэтому его и называют избыточным). Избыточное кодирование позволяет исправлять многие простые ошибки, неизбежные на столь высоких частотах, без привлечения протоколов вышележащих уровней и без лишних повторных передач пакетов. Кроме того, это нужно для того, чтобы уменьшить долю «постоянных» составляющих в сигнале (не более 4 нулей или единиц подряд, см. рис. 4) — обеспечить баланс дифференциальной пары по постоянному току и позволить приемнику уверенно синхронизироваться по фронтам поступающего сигнала, поскольку никакого дополнительного («внешнего») синхронизирующего сигнала от тактового генератора в PCI Express не используется.

Рис. 4. Иллюстрация принципа кодирования 8b/10b.

В качестве рабочих напряжений выбраны уровни от 0,2 до 0,4 вольт для логического нуля и от 0,4 до 0,8 вольт для логической единицы (рис. 5). Столь низкие напряжения выбраны из расчета удобства проектирования устройств для шины PCI-Express на современных 180-, 130- и 90-нм чипах, а также с целью снижения электромагнитных наводок и потребляемой мощности.

Как и в любой сети, передаваемые данные дополнительно нарезаются небольшими кусочками - фреймами. При тактовая частоте шины 2,5 ГГц без учета кодирования мы получим скорость передачи в 2,5 Гбит/с в каждом направлении. С учетом выбранной схемы «8/10» получается 250 Мбайт/с, однако многоуровневая сетевая иерархия не может не сказаться на скорости работы и реальная производительность шины оказывается значительно ниже — всего лишь чуть более 200 Мбайт/с в каждую сторону (в пике до 220–230 согласно документации Intel). Впрочем, даже это на 50% больше, чем теоретическая пропускная способность шины PCI. Но это далеко не предел: пожалуй, единственная интересная особенность PCI Express — возможность объединения в одну шину нескольких независимых линий передачи данных. Стандартом предусмотрено использование 1, 2, 4, 8, 16 и 32 линий — передаваемые данные поровну распределяются по ним по схеме «первый байт на первую линию, второй — на вторую, …, n-й байт на n-ю линию, n+1-й снова на первую, n+2 снова на вторую» и так далее (см. рис. 6).

Рис. 5. Схема и электрика шины PCI Express x1.

Рис. 6. Асинхронная передача данных по нескольким линиям шины PCI Express.

Это не параллельная передача данных и даже не увеличение разрядности шины (поскольку все передающиеся по линиям данные передаются абсолютно независимо и асинхронно) — это именно объединение нескольких независимых линий. Причем, передача по нескольким линиям никак не влияет на работу остальных слоев «пирамиды» и реализуется сугубо на «нижнем», физическом уровне (рис. 2). Именно этим достигается великолепная масштабируемость шины PCI Express — она позволяет организовывать шины с максимальной пропускной способностью до 32x200=6,4 Гбайт/с — как раз под стать пропускной способности лучших параллельных шин сегодняшнего дня (см. также таблицу 1).