USB 3.0 — это разъем, скорость и сила (тока)

27 Фев 2013

USB 3.0 — это разъем, скорость и сила (тока)

Сложность и нелогичность архитектуры USB 2.0 вынудила разработчиков USB 3.0 избрать другой путь совершен­ство­вания протокола универсальной последовательной шины. Вместо подключения двух контроллеров к одному разъему, как было в предыдущей версии, скоростной вариант USB-шины реализован путем интеграции двух разъемов в еди­ном конструктиве. На какие еще компромиссы вынуждена была пойти IT-индустрия в угоду совместимости?

Какие know-how были применены для достижения при­ори­тет­ных целей: производительности, минимизации потре­бля­емой мощности и поддержки виртуализации?

Производительность: о чем молчат разработчики?

Контроллер USB 3.0 eXtensible Host Controller Interface поддерживает новый, более скоростной режим передачи данных, который называется SuperSpeed. Он обеспечивает обмен данными по шине до пяти гигабит в секунду. Для сравнения, контроллер USB 2.0 EHCI в режиме High Speed поддерживает скорость до 480 мегабит в секунду.

Архитектура xHCI предусматривает построение контроллера в виде двух раздельных подсистем: USB2 и USB3. Каждая из них использует свою группу сигналов на разъеме USB3. Это сделано для совместимости со «старыми» USB устройствами (Low-, Full-, High-Speed) без использования контроллеров-компаньонов и Rate Matching Hub (RMH). Впрочем, спецификация дает разработчику право самостоятельно выбрать топологию шины. Appendix D этого документа устанавливает правила подключения и декларирования хабов, подразделяя их на Integrated Hubs (реализованные на кристалле контроллера) и Embedded Hubs (реализованные в виде дополнительных микро­схем на системной плате).

Правила подключения и декларирования хабов для USB 3.0
Рис 1. Иллюстрация правил подключения и декларирования USB-хабов в составе xHCI-контроллера

Позволим себе предположить, что для поддержки Low и Full Speed устройств может существовать программно-невидимый, аппаратно обслуживаемый «прозрачный» RMH, о котором умалчивает спецификация.

Анатомия энергоэффективности

Вспомним, как работает старый EHCI-контроллер USB2.0? Независимо от наличия запросов на передачу данных, он циклически считывает из оперативной памяти расписание транзакций (Schedule), инициируя постоянный трафик на шине памяти, а также генерируя события, требующие обеспечения когерентности кэш-памяти. Разумеется, это приводит к увеличению мощности, потребляемой не только самим USB-контроллером, но и связкой «процессор–память». Данная активность препятствует переходу системы в энергосберегающие состояния.

Для чего нужна такая инициатива со стороны EHCI? Согласно спецификации, разработчики EHCI стремились свести общение драйвера с контроллером к передаче информации через оперативную память. Использование расписания транзакций и минимизация количества обращений драйвера к MMIO-регистрам контроллера, уменьшает утилизацию CPU за счет экономии тактов процессора.

Разработчики xHCI с целью уменьшения потребляемой мощности решили отказаться от постоянной загрузки шины. Контроллер xHCI использует протокол, при котором драйвер подготавливает блоки заданий в оперативной памяти (в кольцевом буфере, который называется Command Ring), после чего процессор выполняет запись в один из MMIO-регистров регистрового блока Doorbell Registers. Запись в этот регистр сообщает контроллеру о том, что в оперативной памяти подготовлен блок задания. Только после этого xHCI инициирует bus-master операции.

Оптимизация шинной архитектуры и использование механизмов отложенной записи для регистра Doorbell, сокращают количество процессорных тактов, затрачиваемых на запись в MMIO регистр.

«Частная жизнь» контроллера

Одним из нововведений в xHCI является Scratchpad Buffers. Контроллер декларирует потребность в специальной области оперативной памяти для приватного использования и взаимодействует с ней в режиме bus-master. Использование RAM для собственных нужд остается внутренним делом контроллера, поэтому и форматирование ее не регламентируется.

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

Резюме

Поддержка всех режимов передачи данных по шине USB единым xHCI-контроллером не является результатом какого-либо таинственного и изящного решения. Сложность не ликвидируется, а прячется внутрь путем полностью аппаратной реализации технологий, апробированных еще в процессе разработки EHCI-контроллера. Названия этих технологий нам известны: контроллеры-компаньоны и Rate Matching Hub. Новшество в том, что данные ресурсы стали программно-невидимыми. Хотя с другой стороны, это и неплохо: задача разработчиков драйверов упростилась.

P.S. Все цвета USB

Описание USB-архитектуры на языке ACPI AML кода включает не только декларацию топологии, но и указание цветов разъемов в формате R, G, B. Такое решение позволяет программному обеспечению визуализировать на экране «истинный вид» объектов. Это достигается за счет использования ACPI-объекта  _PLD (Physical Device Location).

Строго говоря, использование данного ACPI-объекта не связано напрямую с архитектурой USB 3.0 или спе­ци­фи­ка­цией xHCI-контроллера. Теоретически, ничто не мешает использовать его для других устройств. Но вопрос цве­то­вой маркировки разъемов стал актуальным в связи с атрибутированием шины USB 3.0 синим цветом.