Это интересно! Pci e скорость


только ли физические ограничения влияют на скорость передачи? / Хабр

Начну издалека. Прошлой зимой довелось мне делать USB-устройство с ядром, размещаемым в ПЛИС. Само собой, очень мне хотелось проверить реальную пропускную способность этой шины. Ведь в контроллере — там слишком много всего наверчено. Всегда можно сказать, что вот тут внесена задержка, или вон там. В случае же с ПЛИС — я вижу блок, прокачивающий данные, вот он сказал мне, что в нём данные есть. А вот я выставил, что всё обработано, и я готов принимать новую порцию (при этом, он уже принимает данные во второй буфер этой же конечной точки). Отлично, ставим готовность с первого же такта и смотрим, что получается, когда USB может «молотить» без остановки.

А получается удивительная вещь. Если USB 2.0 устройство воткнуто в «голубенький» разъём (это который USB 3.0), то скорость получается одна. Если в «чёрненький» — другая. Вот мой график зависимости скорости записи в USB от длины передаваемых данных. USB3 и USB2 — это тип разъёма, устройство всегда USB 2.0 HS.

Я пробовал в разных машинах. Результат — близок. Никто не мог объяснить мне этот феномен. Уже потом я нашёл наиболее вероятную причину. А причина очень проста. Вот свойства контроллера USB 2.0:

У контроллеров, управляющих «голубеньким» разъёмом такого нет. А разница — как раз примерно процентов 20.

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

Первичный эксперимент

Итак. Всё начиналось весьма буднично. Шла проверка одной программы. Проверялся процесс записи данных одновременно на несколько дисков. Аппаратура простая: имеется материнская плата с четырьмя PCIe-слотами. Во все слоты воткнуты совершенно одинаковые карточки с AHCI-контроллерами, каждый из которых поддерживает исключительно PCIe x1.

Каждая карта обслуживает 4 накопителя. И вот выясняется следующий эффект. Берём один диск и начинаем записывать на него данные. Получаем скорость от 180 до 220 мегабайт в секунду (здесь и далее, мегабайт — это 1024*1024 байт):

Берём второй накопитель. Скорость записи на него — от 170 до 190 МБ/с:

Пишем сразу на оба — получаем просадку скорости:

Суммарная скорость получается в районе 290 МБ/с. Но удивительность состоит в том, что отлаживали (так получилось) эту программу мы на тех же накопителях, но на других каналах. И там всё было хорошо. Быстро перетыкаем в те каналы (они будут идти через другую карту), получаем прекрасную работу:

Куплю слот в хорошем районе

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

После первичного разбора выяснилось, что скорость не ограничивается в «длинных» слотах PCIe и ограничивается в «коротких». Длинные — это куда можно вставить карты x16 (правда, один из них работает в режиме не выше x4), а короткие — только для карт x1.

Всё бы ничего, но контроллеры в текущих картах в принципе не могут работать в режиме, отличном от PCIex1. То есть, все контроллеры должны быть в абсолютно идентичных условиях, независимо от длины слота! Ан нет. Кто живёт в «длинном» — работает быстро, кто в «коротком» — медленно. Хорошо. А быстро — насколько быстро? Добавляем третий накопитель, пишем на все три.

В «коротких» слотах ограничение всё ещё в районе 290 МБ/с:

В «длинных» — в районе 400 МБ/с:

Я перерыл весь Интернет. Во-первых, через некоторое время я уже смеялся со статей, где говорится о том, что пропускная способность PCIe gen 1 и gen 2 для x1 составляет 250 и 500 МБ/с. Это «сырые» мегабайты. За счёт оверхеда (я использую это нерусское слово, чтобы обозначить служебный обмен, идущий по тем же линиям, что и основные данные) для gen 2 получается именно 400 мегабайт в секунду полезного потока. Во-вторых, я упорно не мог найти ничего про магическую цифру 290 (забегая вперёд — до сих пор не нашёл).

Отлично. Пытаемся глянуть на топологию включения наших контроллеров. Вот она (013-015 — это суффиксы имён устройств, по которым я сопоставил их, чтобы как-то различать). Зелёные —быстрые, красные — медленные.

Контроллер «015» мы даже не рассматриваем. Он живёт в привилегированном слоте, предназначенном для видеокарты. Но 013-й подключён к тому же коммутатору, что и 012-й с 014-м. Чем он отличается?

Отдельные статьи говорят, что разные карты могут отличаться параметрами Max Payload. Я изучил конфигурационное пространство всех карт — этот параметр стоит у всех в одном и том же, минимально возможном значении. Мало того, в документации на чипсет этой материнки сказано, что иного значения и быть не может.

В общем, я перерыл всё в конфигурационном пространстве — всё настроено идентично. А скорость разная! Многократно перечитал документацию на чипсет — никаких настроек пропускной способности. Приоритеты — да, что-то про них написано, но тесты же ведутся при полном отсутствии нагрузки по другим каналам! То есть дело не в них.

На всякий случай, я даже отключил работу программы по прерываниям. Нагрузка на процессор возросла до безумных величин, ведь теперь он постоянно тупо читает бит готовности, но показания скорости не изменились. Так что обвинить в проблемах эту подсистему тоже нельзя.

А что там у других плат?

Попробовали поменять материнскую плату на точно такую же. Никаких изменений. Попробовали заменить процессор (были основания считать, что он барахлит). Тоже никаких изменений скорости (но старый процессор и правда барахлил). Поставили материнскую плату более нового поколения — всё просто летает на всех слотах. Причём предельная скорость уже не 400, а 418 мегабайт в секунду, хоть в «длинных», хоть в «коротких» слотах:

Но здесь — никаких чудес. Привычным движением руки (за эти дни уже привык) считываем конфигурационное пространство и видим, что параметр Max Payload установлен не на 128, а на 256 байт.

Больше размер пакета — меньше количество пакетов. Меньше оверхед на их пересылку — больше полезных данных успевает пробежать за то же время. Всё верно.

Так кто же виноват?

Точного ответа на вопрос из заголовка, со ссылкой на документы, я не дам. Но мысль моя пошла по следующему пути: допустим, что ограничение потока задано внутри чипсета. Его нельзя программировать, оно задано намертво, но оно есть. Например, оно равно 290 мегабайт в секунду на каждую дифф. пару. Больше — режется уже где-то внутри чипсета на его внутренних механизмах. Поэтому в «длинном» слоте (куда можно воткнуть карты вплоть до x4) внутри чипсета для нашей карты ничего не режется, а мы упираемся в физический предел шины x1. В «коротком» же разъёме мы упираемся в это ограничение.

На самом деле, проверить это не просто, а очень просто. Втыкаем в 013-й слот не AHCI, а SAS-контроллер, который обслуживает сразу 8 накопителей и может работать в режимах PCIe вплоть до x4. Подключаем ему 4 шустрых SSD накопителя. Смотрим скорость записи — аж душа радуется:

Теперь добавляем те 4 диска, которые фигурировали в первых тестах. Скорость работы SSD предсказуемо просела:

Вычисляем суммарную скорость, проходящую через SAS-контроллер, получаем 1175 мегабайт в секунду. Делим на 4 (столько линий идёт в «длинный» слот), получаем… Барабанная дробь… 293 мегабайта в секунду. Где-то я это число уже видел!

Итак, в рамках данного проекта было доказано, что дело не в нашей программе или драйвере, а в странных ограничениях чипсета, которые наверняка «зашиты» намертво. Была выведена методика подбора материнских плат, которые могут быть использованы в проекте. А в целом, выводы делаем следующие.

Заключение

  • Зачастую в реальной жизни аппаратура имеет меньшую производительность, чем теоретически возможная. Ограничения могут накладываться даже драйверами, как показано в случае USB. Иногда удаётся подобрать такую аппаратуру, которая (или драйверы которой) не имеет таких ограничений.
  • Ограничения могут быть даже недокументированными, но чётко выраженными.
  • Масса статей, в которых говорится, что одна дифференциальная пара PCIe gen. 1 и gen 2 даёт примерно 250 и 500 мегабайт в секунду, ошибочны. Они копируют друг у друга одну и ту же ошибку — мегабайт «сырых» данных в секунду. Оверхед накапливается на нескольких уровнях интерфейса. При Max Payload 128 байт, на PCIe gen2 реально получается около 400 мегабайт в секунду. В более новых поколениях PCIe всё должно быть чуть лучше, так как там физическое кодирование не 8b/10b, а более экономичное, но пока не найдено ни одного контроллера дисков, на которых можно было бы проверить это на практике.

habr.com

PCI Express 3.0 — в два раза лучше прежнего стандарта

30 ноября

Скоро разработчики смогут воспользоваться преимуществами новой технологии PCI Express третьего поколения. Стандарт пока еще не утвержден, но уже известны его основные характеристики и отличия от существующих версий. Статья представляет собой сокращенный перевод работы [1].

С

каждым новым поколением PCI Express полоса пропускания шины удваивается. Не исключение и стандарт PCI Express 3.0, который появится в скором будущем. Производительность шины будет увеличена до 8 Гбит/с на линии или 128 Гбит/с в режиме передачи по 16 каналам. Основные характеристики различных версий PCI Express приведены в таблице 1. Шина PCI Express 3.0 оптимизирована по ряду параметров и обеспечивает более высокую целостность сигнала. Кроме того, она полностью совместима с предыдущими версиями по стеку протоколов и может взаимодействовать с устройствами, поддерживающими только медленный режим обмена.

Таблица 1. Основные характеристики PCI Express

Стандарт

Скорость передачи сигнала, Гбит/с

Полезная скорость передачи (за вычетом добавочных битов), Гбит/с

Скорость передачи по 16 каналам, Гбит/с

PCI Express 1.0

2,5

2,0

32

PCI Express 2.0

5,0

4,0

64

PCI Express 3.0

8,0

8,0

128

Стандарт PCI Express 3.0 будет внедрен в первую очередь в графические приложения, системы связи и обработки видеосигнала, а также — в широкополосные системы распределения и устройства хранения RAID. Благодаря улучшению целостности сигнала и применению компенсационных схем шина может использоваться в соединительных и системных платах, что позволит снизить их стоимость, уменьшить потребление и одновременно улучшить характеристики.

Полоса пропускания PCI Express 3.0 в два раза превышает пропускную способность PCI Express 2.0 не за счет увеличения скорости передачи. Для сравнения: скорость передачи в PCI Express 2.0 составляет 5 Гбит/с, а с учетом кодирования 8b/10b полезная скорость передачи равна 4 Гбит/с. Самый простой способ удвоить полосу пропускания — это увеличить скорость передачи до 10 Гбит/с, сохранив кодирование 8b/10b. Однако после тщательного анализа было выявлено, что целесообразно заменить избыточное кодирование на скремблирование — тогда количество добавочных битов уменьшается (128b/130b). Таким образом, с применением скремблирования требуемая скорость составляет не 10, а 8 Гбит/с. За счет этого снижается мощность потребления, увеличивается целостность сигнала и, следовательно, снижается стоимость и увеличивается КПД системы. Однако за все надо платить. При добавлении проверочных битов в каждый байт данных гарантируется отсутствие дрейфа постоянной составляющей. Это позволяет обеспечить связь физических сигналов по переменному току и облегчить процедуру восстановления данных, что в свою очередь позволяет упростить схему приемника. Скремблирование — это маскирование данных с помощью известного полинома. При восстановлении данных применяется обратный полином. Недостаток этого подхода заключается в незащищенности от дрейфа постоянной составляющей. Следовательно, необходимо либо корректировать сигнал в приемнике, либо схема приемника должна быть устойчива к этому эффекту. Второй недостаток проявляется на уровне протоколов. При использовании шифрования 8b/10b по добавочным битам всегда можно найти начало и конец пакета. При скремблировании это преимущество теряется, и в приемники и передатчики надо встраивать дополнительные элементы, например, счетчики длины пакетов. Тем не менее, даже такие недостатки с лихвой окупаются теми преимуществами, которые обеспечивает схема скремблирования: работа на физическом уровне идет на сниженной на 20% частоте, а пропускная способность системы передачи не меняется.

Увеличенная вдвое полоса пропускания — не единственное нововведение в PCI Express 3.0. Сетевой уровень PCI Express претерпел два изменения: добавлены возможности взаимодействия в качестве управляющего устройства (host), чтобы ускорить работу, и средства для лучшего управления и уменьшения мощности потребления (оповещение о стойкости к задержке, динамическое распределение мощнос­ти и т.д.). Стоит заметить, что эти опции уже были реализованы в PCI Express 2.1, поскольку они не зависят от скорости работы. На физическом уровне улучшена целостность сигнала, особенно в случае прохождения длинных трасс или при наличии разрывов, обусловленных отверстиями на плате и другими явлениями.Схема предварительного усиления позволяет преобразовывать энергию в передатчике в порции сигнала без изменения общей мощности потребления на физическом уровне. Для внесения предыскажений в канал применяется фильтр с конечной импульсной характеристикой (FIR — finite impulse response), чтобы снизить потери и согласовать канал. За счет этого увеличивается целостность сигнала. В схему приемника включен блок коррекции с решающей обратной связью (DFE — Decision Feedback Equalizer). В отличие от других видов фильтров, которые усиливают шум, DFE только удаляет межсимвольную интерференцию и отражения. Этот тип фильтров особенно хорошо подходит для преодоления эффекта дискретных разрывов в канале, которые возникают, например, при резком изменении направления прохождения сигнала в отверстиях или слоях. Фильтр DFE имеет режим с пониженным расходом мощности. Приемник также имеет стационарную линейную схему коррекции (CTLE — continuous time linear equalizer), которая позволяет оптимизировать передачу по длинным каналам. Для компенсации изменений в параметрах аналоговой схемы и применения настроек эквалайзера используется автоматическая калибровка. В итоге в системе могут использоваться более длинные трассы на плате — это повышает гибкость разводки и надежность. Более того, в приемнике есть улучшенный блок детектирования, что позволяет предотвратить потерю сигнала из-за затухания или малой амплитуды сигнала в длинном канале связи. В PCI Express 3.0 появились новые возможности отладки и тестирования: инжекция джиттера для повышения допустимого искажения сигнала и автоматическая генерация глазковой диаграммы. Таким образом, испытать целостность сигнала можно без использования дорогостоящего оборудования. При анализе глазковой диаграммы можно измерить не только ширину глаза, как в PCI Express 2.0, но и его высоту. По мере развития стандарта возможны и другие нововведения.

Разрешение и сложность графических дисплеев продолжают расти. Соответственно, растет потребность в полосе пропускания соединителей для графических карт, а также требования к быстродействию графического процессора. Увеличив полосу в два раза по сравнению с 2.0, PCI Express 3.0 делает изображение более четким, а движение — более реалистичным. Функция multi-cast улучшает работу многопроцессорных систем. Как показано на рисунке 1, для рисования изображения на экране используются два графических процессора.

 

Рис. 1. Двуядерная схема вывода изображения на дисплей

Поскольку обработка изображения производится по заранее известному алгоритму, то центральный процессор может одновременно посылать команды в оба графических процессора, каждый из которых отвечает за свою область на экране. Как показано на рисунке 2, процессор GPU2 пересылает изображение в GPU1 через интерфейс передачи между равноправными устройствами, встроенный в коммутатор PCI Express 3.0. После этого ядро GPU1 выводит на экран обе части изображения. Такая организация обмена не только улучшает качество изображения, но и позволяет разгрузить основной процессор для выполнения других задач. Технология PCI Express 3.0 будет также использоваться в приложениях с высоким быстродействием, таких как захват видеосигнала или широкополосное вещание. Для видеопроцессоров следующего поколения необходимы коммутаторы ввода/вывода, которые потребляют меньше энергии и обеспечивают большую полосу пропускания. Современные системы захвата видеосигнала работают на соединителях PCI и PCI Express 1.0, которые подсоединяют видеокодеки к ЦП. Если потребность в увеличении разрешения будет расти, ее пропускной способности уже не хватит. Стандарт PCI Express 3.0 уже вот-вот появится, и, как и предыдущие версии PCI Express, в нем в два раза будет увеличена пропускная способность и улучшены другие характеристики. Таким образом, PCI Express станет еще более выгодным решением для обработки графики и других приложений, где требуются высокая скорость, малое потребление и сравнительно низкая стоимость.

1. PCI Express Gen 3: Twice as Nice and Then Some//RTC, август 2009 г.

Вы можете скачать эту статью в формате pdf здесь.

www.russianelectronics.ru

SSD SATA против SSD PCI-E

В любом устройстве всегда найдется слабое звено – bottle neck (бутылочное горлышко), самый слабый компонент, который будет лимитировать производительность остальных частей. Долгое время в настольных компьютерах главными “тормозами перестройки” были жёсткие диски, и ни 7200, ни 10000, ни даже 15000 оборотов в минуту, не меняли ситуацию кардинально. С появлением твердотельных накопителей дело сдвинулось с мёртвой точки. Но прогресс не щадит и это быстрое решение. Интерфейс SATA не способен удовлетворить запросы пользователей, поэтому стали появляться новые стандарты и интерфейсы.

Есть два новых пути развития SSD с интерфейсом PCI-E: SATA Express и NVMe – о них следует разговаривать отдельно, да и в продаже их не часто встретишь. Поэтому пока попробуем разобраться с обычными, доступными в рознице накопителями с интерфейсами PCI Express и SATA 6 ГБит/с.

Начнём с плюсов и минусов обоих интерфейсов:

SATA-диски

Краткая справочка из Wikipedia про этот интерфейс. Самый распространенный на сегодняшний день способ подключения твердотельного накопителя.

Достоинства:
  • Доступность на рынке
  • Большое количество производителей
  • Возможность подключения к любым современным материнским платам
  • Демократичная цена
  • Доступны объемы от 64 Гб до 1 Тб
Недостатки:
  • Ограничение по скорости передачи данных — предел интерфейса — 600 МБ/с на один канал.
  • Необходимость работы с контроллерами AHCI, которые разрабатывались для классических жёстких дисков

PCI Express

Снова дам ссылочку на Wikipedia — там много и подробно расписано про разные поколения этого интерфейса. Быстрый, классный, универсальный, дорогой.

Достоинства:
  • Высокая скорость передачи данных — пропускная способность одной линии шины ревизии 3.0 — 1 ГБ/с
Недостатки:
  • Высокая цена на рынке
  • Небольшой ассортимент брендов и моделей
  • Для некоторых моделей характерно падение производительности со временем (неработающий или не настроенный TRIM)
Немного поработав капитаном Очевидность, я хотел бы рассмотреть непосредственно те сценарии, которые пользователи проигрывают в голове, выбирая себе твердотельный накопитель SSD.

Потребительские сценарии

  • Обычные пользователи Откровенно говоря, большей части юзеров будет безразлично какой интерфейс имеет SSD-диск, более того, мало кто по настоящему почувствует разницу между SATA 3 ГБит/с и SATA 6 ГБит/с. При использовании только веб-браузеров, электронной почты, базовых офисных программ пользователь не увидит разницы и будет счастлив просто наличию SSD-диска в системе, так как программы будут загружаться очевидно быстрее, чем на HDD.
  • Продвинутые юзеры работающие с мультимедиа материалами, часто ищут способы увеличения производительности дисковой системы. Простой пример: буйно начал расти сегмент 4К-видео. Несжатый поток 4К (3840х2160, 12 бит, 24 кадра в секунду) потребует пропускной способности около 900 МБ/с. И даже если вы работаете со сжатыми потоками, то при одновременной обработке нескольких, обязательно упрётесь в потолок SATA 6 ГБит/с. RAID 0 спасёт ситуацию, но скорее всего в пике при построении RAID 0 на 4-х накопителях будет около 1,6 ГБ/с. PCI Express предлагает решение вопроса: каждая линия PCI-Express имеет пропускную способность до 1,0 ГБ/с (то есть в 1,6 раза больше, чем SATA) при почти таком же энергопотреблении – разумеется, грешно не пользоваться такими возможностями. И пусть цена на SSD PCI Express выше, любители работать с видео высокого разрешения просто обязаны смотреть именно на такой стандарт.
  • Геймеры Для настоящих хардкорщиков (а по мне так просто нетерпеливых людей), конечно же, нужен PCI Express. Огромные по размеру TitanFall или CoD:Ghosts будут грузится достаточно долго, я уж молчу про авиасимуляторы, “вес” которых доходит до сотен гигабайт. Для обычных же людей, которые любят Diablo III и прочие Bioshock Infinite, будет вполне достаточно топового SSD 6 ГБит/с.
  • Энтерпрайз-клиенты Ожидания клиента в этой сфере существенно выше, чем просто быстрая загрузка или обработка видеофайла. Чем крупнее сервер, тем больше к нему осуществляется обращений от пользователей и тут на первый план выходят IOPS. Для вышеперечисленных категорий людей обычная очередь к контроллеру составляет 3-5 запросов, в энтерпрайзе все измеряется сотнями. SSD прекрасно проявляют себя, когда нужно показывать высокую производительность на протяжении долгого времени, и если классических дисков потребуется несколько сотен, то высокопроизводительный SSD может справиться в одиночку.
При работе по интерфейсу SATA консьюмерские SSD достигают уровня производительности в 100,000 IOPS, в то время как топовые PCI-E накопители способны выдерживать нагрузку в 1,000,000 IOPS. При этом, как правило, они рассчитаны на работу с интерфейсом PCI-E 2.0, а значит переход на PCI-E 3.0 даст существенный прирост производительности в будущем.

Вместо вывода

Что можно сказать в итоге. Для розничных покупателей и геймеров можно и нужно выбирать среди SATA-дисков. Большинство офисных пользователей будут счастливы, если в их рабочих станциях поселятся быстрые и бесшумные накопители, но 90 процентов из них никогда даже не задумаются о том, какой интерфейс у диска и бывают ли они вообще разные. Геймерам же придётся сложнее, выбор большой, запутаться сложно, зачастую производитель недобросовестно завышает показатели чтения и записи. Следите за нашим блогом и мы расскажем, какая методика тестирования на самом деле правильная.

Для корпоративного рынка и людей, работающих с мультимедиа контентом – крайне рекомендованы накопители с интерфейсом PCI-Express. Обработка огромных растровых изображений или работа с 4К-видео с GoPro Hero4 – всё это потребует от системы хранения высокой производительности. Если ваша основная задача – производить контент – смело выбирайте диски PCI-Express. Энтерпрайз сегмент уже практически перешёл на контроллеры NVMe – о таких SSD будет отдельный пост – они заслуживают много внимания.

Теоретические раскладки обязательно надо проверять на практике. Поэтому следующий пост будет про практическое сравнение PCI-E SSD диска и SATA SSD (в том числе в режиме RAID 0). С наступающим Новым Годом!

habr.com