Передача пакетов и пропускная способность на примере интерфейса PCI Express 1.0

 

Уровень транзакций формирует пакеты TLP, в которых содержатся код коман­ды, адресная информация, данные и некоторые другие поля. Для обеспечения надежной доставки пакетов TLP канальный уровень при передаче снабжает их своим заголовком, содержащим 12-разрядный последовательный номер TLP, и 32-разрядным полем LCRC (CRC канального уровня). Таким образом, канальный уровень к каждому пакету TLP добавляет 6 байт накладных расходов. На каж­дый пакет TLP передатчик должен получить положительное подтверждение Ack — пакет канального уровня (DLLP). Если подтверждение не приходит, то механизм тайм-аута заставляет передатчик повторить посылку пакета. Преду­смотрен и пакет отрицательного подтверждения Nak, вызывающий повторную передачу без ожидания.

Физический уровень вводит свое обрамление передаваемых пакетов: перед нача­лом пакета передается специальный символ STP (для TLP-пакета) или SDP (для DLLP-пакета); после пакета — символ END. Эти специальные символы от­личаются от символов, представляющих данные после кодирования 8В/10В.

Рассмотрев структуры пакетов, можно оценить пропускную способность (производительность) базового соединения интерфейса PCI Express 1.0 (1 разряд, скорость — 2,5Г бит/с).

Самая короткая транзакция — запись двойного слова в пространство ввода-вы­вода — в прямом канале транзакций записи в порт занимает 128 нс (0,128 мкс), в обратном — 80 + 32 = 112 нс. Если подсчитать максимальную скорость передачи данных при непрерывных записях в порт, получаем v = 4/0,128 = 31,25М байт/с. При этом будет занят и встречный канал с коэффициентом загрузки 112/128 = 0,875. Результат по скорости близок к возможностям стандартного интерфейса PCI (32 разряда и 33 МГц), в котором такая транзакция требует четырех тактов интерфейса. Чтение портов ввода-вывода на интерфейсе PCI Express 1.0 даст те же результаты (на интерфейсе PCI ре­зультат будет хуже).

Теперь рассмотрим самый выгодный (в состязаниях по производительности) вариант транзакции: запись в оперативную память пакета из 1024 двойных слов (с короткой 32-разрядной ад­ресацией). Здесь скорость передачи данных составляет 4096/16,5 = 248М байт/с — это уже уровень производительности интерфейса PCI (32 разряд и 66 МГц) при длинных па­кетных передачах. Загрузка встречного канала подтверждениями канального уровня в этом случае пренебрежимо мала. Скорость чтения из оперативной памяти будет не­много ниже, поскольку каждая транзакция чтения состоит из двух пакетов TLP — запроса чтения и пакета завершения с данными.

Если встречный канал удается загрузить полезным трафиком, то можно гово­рить об удвоении пропускной способности интерфейса PCI Express 1.0 за счет возможности ра­боты в полнодуплексном режиме. Однако в примере с записью в порт вво­да-вывода о таком удвоении речи быть не может, поскольку встречный канал загружен довольно плотно. Если пересчитать полезную скорость на один сиг­нальный контакт разъема, то в самом выгодном полнодуплексном варианте по­лучаем 248 х 2/4 = 12М байт/с на контакт. Для сравнения можно взять вари­ант интерфейса PCI-X 533 МГц, обеспечивающий пиковую скорость записи, приближающуюся к 533х4 =2132М байт/с. В операциях чтения из оперативной памяти интерфейс PCI-X выглядит гораздо скромнее — пиковая скорость всего 533М байт/с. При этом используется около 50 сигнальных контактов (не считая многочисленных земляных), так что на каж­дый контакт приходится примерно по (10-40)М байт/с. В порту интерфейса AGP при той же пиковой скорости сигналов было еще больше, так что заявления о высокой эффек­тивности использования контактов в интерфейсе PCI Express имеют под собой основу. Полнодуплексный режим работы в предыдущих интерфейсах PCI/PCI-X, AGP был невозможен.

Напомним, что данные подсчеты производились для базового соединения (xl, 1 линия); применив интерфейс х32 (32 линии), можно получить максимальную скорость записи в оперативную память 248 х 32 = 7936М байт/с. А если брать полную загруз­ку полнодуплексного соединения, то интерфейс PCI Express 1.0 может обеспечить суммарную пропускную способность 15872М байт/с. Таким образом, в самом мощном вари­анте интерфейс PCI Express 1.0 оставляет далеко позади порт интерфейса AGP с его пиком 2132М байт/с. Правда, говорить о малом числе контактов уже не приходится — канал интерфейса PCI Express х32 1.0 требует 2х2х32+ 128 сигнальных контактов (в интерфейсе AGP их меньше).