Шина USB 2.0 должна уйти

20 Июн 2013

Шина USB 2.0 должна уйти

Преимущество в скорости, которое есть у шины USB 3.0 по сравнению с пред­шественницей, общеизвестно. Но пока SuperSpeed-устройства не ста­ли широко рас­про­стра­нен­ны­ми, давайте сравним их с USB 2.0 ре­ше­ни­я­ми.

Предметом исследований будет потребляемая мощность и тра­фик USB HCI-контроллера.

Примечание. Терминология, используемая в статье, станет более дос­туп­ной, если предварительно ознакомиться с ма­те­ри­а­лом «Шина USB требует обратной совместимости».

Контроллер EHCI загружает шину

Понятно, что обмен с периферийными USB-устройствами требует операций на PCI-шине или внутренней шине на­бо­ра системной логики. Гораздо хуже ситуация выглядит тогда, когда, вне зависимости от наличия под­клю­чен­ных устройств, запущенный USB-контроллер генерирует трафик. Это архитектурный недостаток реализации USB 2.0, который не подлежит исправлению в силу ряда причин.

Убедиться в наличии шинного трафика, инициируемого EHCI-контроллером, можно наблюдая сигналы арбитража Request и Grant на слоте PCI:

  • REQ# (Request, контакт B18 слота PCI) – запрос к арбитру от bus-master устройства;
  • GNT# (Grant, контакт A17 слота PCI) – подтверждение от арбитра для bus-master устройства.

Если на любой из указанных линий есть импульсы, это означает, что bus-master генерирует трафик. Грамотнее на­блю­дать сигнал Grant, который сообщает, что доступ предоставлен. Но делать это следует строго в том слоте, где установлен контроллер. Ведь линии Request и Grant разведены для каждого слота индивидуально.

В качестве тестового устройства мы использовали PCI-адаптер USB 2.0 на чипе NEC D720100AGM. Выбор про­дик­то­ван тем, что для EHCI-контроллера, интегрированного в системную логику, такой опыт поставить невозможно: искомые сигналы находятся внутри моста.

Анализ жизнедеятельности USB 2.0 был бы неполным, если бы мы не проанализировали ситуацию с трафиком в сре­де операционных систем Microsoft. Оказалось, что Windows приостанавливает EHCI-контроллер, если к нему не под­ключены периферийные устройства. Но важно то, что при наличии USB-устройства трафик есть всегда, независи­мо от того, происходит ли передача данных или нет.

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

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

Как дела, xHCI?

Для xHCI-контроллера выполнить эксперимент с загрузкой PCI Express шины невозможно, в силу того, что на ней нет возможности идентифицировать bus-master трафик путем наблюдения одного сигнала. Характеристику контроллера для USB 3.0 шины придется делать окольными путями. Поможет в этом выдержка из документации к uPD72020x – одному из самых популярных дискретных USB-контроллеров для PCIe-шины, выпущенному компанией Renesas. Там о его преимуществах сказано буквально следующее: «Power reduction with no peripheral connection», т.е. в отсутствие подключенных USB-устройств потребляемая мощность снижается.

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

Неочевидные преимущества обещают очевидные выгоды

Преимущество EHCI перед xHCI в том, что минимизировано количество операций драйвера с MMIO-регистрами, занимающее много процессорных тактов.

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

Указанное обстоятельство может привести к необъективности при измерении утилизации процессора в системе с контроллером xHCI:

  1. Сводя результат к одной цифре – утилизации процессора мы забываем о том, что EHCI-контроллер использует режим bus-master постоянно, независимо от наличия подключенных устройств и заданий от драйвера. Это приводит к появлению дополнительного трафика на шинах, замедляющего работу CPU, даже тогда, когда в системе нет USB-устройств или устройства есть, но передачи данных не происходит.
  2. Если мы измеряем утилизацию центрального процессора, оценивая, насколько понизилась его производительность при выполнении операций на USB, мы снова не учитываем того, что для xHCI производительность процессора понижается только при выполнении заданий от драйвера.

Недостатки xHCI-контроллера – расход большого количества тактов процессора при обращении драйвера к MMIO регистру Doorbell – сразу видны. Его преимущества – экономия шинного трафика в режиме ожидания – при измерениях также видится как недостаток, ибо замедления процессора при USB-операциях по сравнению с режимом простоя слишком очевидны.

А недостатки EHCI нивелируются тем, что в ряде чипсетов используется режим кэширования трафика EHCI Caching (п.5.19.10 PCH Data Sheet для чипсетов 8-й серии и п.5.18.10 – для 7-й серии). С его помощью удается избежать доступа к оперативной памяти для ряда USB-операций, что дает возможность снизить нагрузку на шину. Дополнительный бонус применения EHCI Caching – использование энергосберегающего состояния процессора и оперативной памяти, несмотря на bus-master активность EHCI.

Если учесть, что подобные улучшения состоялись в процессе смены поколений чипсетов, перспектива для роста USB 3.0 более радужна. На повестке дня оптимизация шинной архитектуры и использование механизмов отложенной записи для регистра Doorbell, которые помогут нивелировать имеющийся недостаток xHCI путем сокращения количества процессорных тактов, затрачиваемых на запись в MMIO-регистр. И они не заставят себя ждать. В итоге, мы распрощаемся с USB 2.0. Доказательство этого – возможность поддержки всех видов USB-устройств (Low Speed, Full Speed, High Speed, Super Speed) одним контроллером xHCI без использования контроллеров-компаньонов.