Warum sind USB-Geräte langsamer als 480 MBit / s?

41

Motivation

Bei einer Signalisierungsrate von 480 MBit / s sollten USB 2.0-Geräte Daten mit bis zu 60 MB / s übertragen können. Allerdings scheinen die heutigen Geräte beim Lesen von [ Wiki: USB ] auf 30-42 MB / s beschränkt zu sein . Das ist ein Overhead von 30 Prozent.

USB 2.0 ist seit über 10 Jahren ein De-facto-Standard für externe Geräte. Eine der wichtigsten Anwendungen für die USB-Schnittstelle war von Anfang an der portable Speicher. Leider war USB 2.0 schnell ein Geschwindigkeitsengpass für diese bandbreitenintensiven Anwendungen. Eine heutige Festplatte kann beispielsweise mehr als 90 MB / s sequentiell lesen. In Anbetracht der langen Marktpräsenz und des ständigen Bedarfs an höherer Bandbreite ist zu erwarten, dass das USB 2.0-Eco-System im Laufe der Jahre optimiert wurde und eine Leseleistung erreicht hat, die nahe an der theoretischen Grenze liegt.

Was ist die theoretische maximale Bandbreite in unserem Fall? Jedes Protokoll hat Overhead, einschließlich USB, und gemäß dem offiziellen USB 2.0-Standard beträgt es 53,248 MB / s [ 2 , Tabelle 5-10]. Das bedeutet, dass die heutigen USB 2.0-Geräte theoretisch 25 Prozent schneller sein könnten.

Analyse

Die folgende Analyse zeigt, was auf dem Bus geschieht, während sequentielle Daten von einem Speichergerät gelesen werden. Das Protokoll ist Schicht für Schicht aufgeschlüsselt und wir interessieren uns besonders für die Frage, warum 53,248 MB / s die maximale theoretische Anzahl für Bulk-Upstream-Geräte ist. Abschließend werden wir uns mit den Grenzen der Analyse befassen, die uns Hinweise auf zusätzlichen Overhead geben könnten.

Anmerkungen

In dieser Frage werden nur Dezimalpräfixe verwendet.

Ein USB 2.0-Host kann mehrere Geräte (über Hubs) und mehrere Endpunkte pro Gerät verwalten. Endpunkte können in verschiedenen Übertragungsmodi betrieben werden. Wir beschränken unsere Analyse auf ein einzelnes Gerät, das direkt an den Host angeschlossen ist und im Hochgeschwindigkeitsmodus kontinuierlich vollständige Pakete über einen vorgelagerten Massenendpunkt senden kann.

Rahmung

Die USB-Hochgeschwindigkeitskommunikation wird in einer festen Rahmenstruktur synchronisiert. Jeder Frame ist 125 us lang und beginnt mit einem Start-Of-Frame-Paket (SOF) und ist durch eine End-Of-Frame-Sequenz (EOF) begrenzt. Jedes Paket beginnt mit SYNC und endet mit und End-Of-Packet (EOF). Diese Sequenzen wurden der Übersichtlichkeit halber den Diagrammen hinzugefügt. EOP ist variabel in Größe und Paketdaten abhängig, für SOF sind es immer 5 Bytes.

Bildbeschreibung hier eingeben Öffne das Bild in einem neuen Tab, um eine größere Version zu sehen.

Transaktionen

USB ist ein mastergesteuertes Protokoll und jede Transaktion wird vom Host initiiert. Der Zeitschlitz zwischen SOF und EOF kann für USB-Transaktionen verwendet werden. Das Timing für SOF und EOF ist jedoch sehr streng und der Host initiiert nur Transaktionen, die innerhalb des freien Zeitfensters vollständig abgeschlossen werden können.

Die Transaktion, an der wir interessiert sind, ist eine erfolgreiche Bulk-IN-Transaktion. Die Transaktion beginnt mit einem Token-Paket IN, dann warten die Hosts auf ein Datenpaket DATA0 / DATA1 und bestätigen die Übertragung mit einem Handshake-Paket ACK. Die EOP für alle diese Pakete beträgt 1 bis 8 Bit, abhängig von den Paketdaten. Wir haben hier den ungünstigsten Fall angenommen.

Zwischen jedem dieser drei Pakete müssen wir Wartezeiten berücksichtigen. Diese befinden sich zwischen dem letzten Bit des IN-Pakets vom Host und dem ersten Bit des DATA0-Pakets des Geräts sowie zwischen dem letzten Bit des DATA0-Pakets und dem ersten Bit des ACK-Pakets. Wir müssen keine weiteren Verzögerungen berücksichtigen, da der Host direkt nach dem Senden einer ACK mit dem Senden des nächsten IN beginnen kann. Die Kabelübertragungszeit ist auf maximal 18 ns festgelegt.

Eine Massenübertragung kann bis zu 512 Bytes pro IN-Transaktion senden. Der Host wird versuchen, so viele Transaktionen wie möglich zwischen den Frame-Begrenzern auszugeben. Obwohl die Massenübertragung eine niedrige Priorität hat, kann sie die gesamte verfügbare Zeit in einem Slot in Anspruch nehmen, wenn keine andere Transaktion aussteht.

Um eine ordnungsgemäße Taktwiederherstellung zu gewährleisten, definieren die Standards ein Methodenaufruf-Bit-Stuffing. Wenn das Paket eine sehr lange Sequenz derselben Ausgabe erfordern würde, wird eine zusätzliche Flanke hinzugefügt. Das sichert eine Flanke nach maximal 6 Bits. Im schlimmsten Fall würde dies die Gesamtpaketgröße um 7/6 erhöhen. Das EOP unterliegt keinem Bitstuffing.

Bildbeschreibung hier eingeben Öffne das Bild in einem neuen Tab, um eine größere Version zu sehen.

Bandbreitenberechnungen

Eine Bulk-IN-Transaktion hat einen Overhead von 24 Bytes und eine Nutzlast von 512 Bytes. Das sind insgesamt 536 Bytes. Der Zeitschlitz zwischen ist 7487 Bytes breit. Ohne Bit-Füllung ist Platz für 13.968 Pakete. Mit 8000 Micro-Frames pro Sekunde können Daten mit 13 * 512 * 8000 B / s = 53,248 MB / s gelesen werden

Für völlig zufällige Daten erwarten wir, dass Bitfüllung in einer von 2 ** 6 = 64 Sequenzen von 6 aufeinanderfolgenden Bits erforderlich ist. Das ist eine Steigerung von (63 * 6 + 7) / (64 * 6). Das Multiplizieren aller Bytes, die einer Bitfüllung unterliegen, mit diesen Zahlen ergibt eine Gesamttransaktionslänge von (19 + 512) * (63 * 6 + 7) / (64 * 6) + 5 = 537,38 Bytes. Das ergibt 13.932 Pakete pro Micro-Frame.

In diesen Berechnungen fehlt ein weiterer Sonderfall. Der Standard definiert eine maximale Geräteantwortzeit von 192 Bitzeiten [ 2 , Kapitel 7.1.19.2]. Dies muss bei der Entscheidung berücksichtigt werden, ob das letzte Paket noch in den Frame passt, falls das Gerät die volle Antwortzeit benötigt. Wir könnten das mit einem Fenster von 7439 Bytes erklären. Die resultierende Bandbreite ist jedoch identisch.

Was ist übrig

  • Die Fehlererkennung und -behebung wurde nicht behandelt. Möglicherweise sind Fehler häufig genug oder die Fehlerbehebung ist zeitaufwendig genug, um die durchschnittliche Leistung zu beeinträchtigen.

  • Wir haben eine sofortige Reaktion von Host und Gerät nach Paketen und Transaktionen angenommen. Ich persönlich sehe keinen Bedarf an großen Verarbeitungsaufgaben am Ende von Paketen oder Transaktionen auf beiden Seiten und kann mir daher keinen Grund vorstellen, warum der Host oder das Gerät nicht in der Lage sein sollte, sofort mit ausreichend optimierten Hardwareimplementierungen zu reagieren. Insbesondere im normalen Betrieb könnten die meisten Buchhaltungs- und Fehlererkennungsarbeiten während der Transaktion ausgeführt werden und die nächsten Pakete und Transaktionen könnten in die Warteschlange gestellt werden.

  • Übertragungen für andere Endpunkte oder zusätzliche Kommunikation wurden nicht berücksichtigt. Möglicherweise erfordert das Standardprotokoll für Speichergeräte eine kontinuierliche Seitenkanal-Kommunikation, die wertvolle Slot-Zeit in Anspruch nimmt.

  • Möglicherweise ist ein zusätzlicher Protokoll-Overhead für Speichergeräte für den Gerätetreiber oder die Dateisystemschicht erforderlich. (Paketnutzlast == Speicherdaten?)

Frage

  • Warum können heutige Implementierungen kein Streaming mit 53 MB / s durchführen?

  • Wo liegt der Engpass bei den heutigen Implementierungen?

Und ein mögliches Follow-up: Warum hat niemand versucht, einen solchen Engpass zu beseitigen?

Verweise

[1] Die offizielle USB 2.0-Spezifikation

[2] Schneller PDF-Spiegel der Spezifikation

Chris
quelle
2
Sie wissen, dass USB 2.0 durch USB 3.0 abgelöst wurde, das wesentlich schneller ist, oder?
JonnyBoats
8
Aus der Tiefe der Forschung und der offensichtlichen Vertrautheit mit dem USB-Standard geht hervor, dass Chris mit USB 3.0, @JonnyBoats, vertraut ist.
Tyblu
5
@JonnyBoats, die faire Antwort darauf wäre: "Sie wissen, dass die meisten Computer immer noch über USB 2.0 verfügen und ein Standard-Update nicht alle Hardware-Upgrades sofort durchführt?" Ich bezweifle, dass dies beabsichtigt war, aber der Kommentar, den Sie geschrieben haben, wirkt in seiner jetzigen Form etwas beleidigend.
Kortuk
Kortuk: Danke für den Hinweis, ich habe definitiv nicht die Absicht, jemanden zu beleidigen. Mein Punkt ist, dass sich USB, wie die meisten Spezifikationen, mit der Zeit entwickelt. 2.0 ist schneller als 1.0 und 3.0 kommt jetzt auf den Markt und ist noch schneller. Ich würde mir vorstellen, dass sich weit mehr Unternehmen auf die Einführung von 3.0 konzentrieren als auf die Verbesserung von 2.0
JonnyBoats
1
Der Microframe bietet möglicherweise Platz für 13 Pakete, viele Host-Controller können dies jedoch nicht. Im Jahr 2006 waren die meisten auf 8 Outs und 10 Ins beschränkt - ich habe keine Ahnung, ob sich seitdem viel geändert hat oder nicht.
user2793784

Antworten:

15

Irgendwann in meinem Leben leitete ich das USB-Geschäft für große Semi-Unternehmen. Das beste Ergebnis, an das ich mich erinnere, war ein NEC-SATA-Controller, der den tatsächlichen Datendurchsatz von 320 Mbit / s für Massenspeicher überträgt. Wahrscheinlich können aktuelle SATA-Laufwerke dies oder etwas mehr. Dies war mit BOT (einige Massenspeicherprotokoll läuft auf USB).

Ich kann eine detaillierte technische Antwort geben, aber ich denke, Sie können sich selbst ableiten. Was Sie sehen müssen, ist, dass dies ein Spiel mit dem Ökosystem ist und dass jede wesentliche Verbesserung jemanden wie Microsoft erfordern würde, der seinen Stack ändert, optimiert usw., was nicht passieren wird. Interoperabilität ist weitaus wichtiger als Geschwindigkeit. Da die vorhandenen Stacks die Fehler bei der Auswahl der Geräte sorgfältig abdecken, da die anfänglichen Geräte, als die USB2-Spezifikation herauskam, der Spezifikation wahrscheinlich nicht so gut entsprachen, da die Spezifikation fehlerhaft war, das Zertifizierungssystem fehlerhaft usw. usw. Wenn Sie ein Home-Brew-System mit Linux oder benutzerdefinierten USB-Host-Treibern für MS und einem schnellen Geräte-Controller erstellen, können Sie sich wahrscheinlich den theoretischen Grenzen nähern.

In Bezug auf das Streaming sollte die ISO sehr schnell sein, aber die Controller implementieren dies nicht sehr gut, da 95% der Apps Bulk-Transfer verwenden.

Wenn Sie beispielsweise heute einen Hub-IC bauen und die Spezifikation genauestens einhalten, werden Sie praktisch keine Chips mehr verkaufen. Wenn Sie alle Fehler auf dem Markt kennen und sicherstellen, dass Ihr Hub-IC diese toleriert, können Sie wahrscheinlich auf den Markt kommen. Ich bin heute immer noch erstaunt, wie gut USB funktioniert, wenn man bedenkt, dass es viele schlechte Software und Chips gibt.

Frank
quelle
6

Dies ist ein sehr altes Thema, aber es hat noch keine Antwort. Das ist mein Versuch:

Warum können heutige Implementierungen kein Streaming mit 53 MB / s durchführen?

Die Berechnungen sind fast in Ordnung, aber Sie vergessen ein paar Dinge in der verfügbaren Anzahl von Bytes zwischen Frame-Markern:

  1. Jeder Mikroframe hat zwei Schwellenwerte, die als EOF1 und EOF2 bezeichnet werden. Bei / nach EOF1 darf keine Busaktivität auftreten. Die Platzierung dieses Punktes ist eine komplizierte Sache, aber die typische Position beträgt 560 Bit-Zeiten vor dem nächsten SOF. Ein Host muss seine Transaktionen so planen, dass eine mögliche Antwort des Channels diesen Schwellenwert nicht überschreitet. Welches ungefähr 70 Bytes aus Ihren berechneten 7487 Bytes heraus isst.

  2. Sie gehen von "Zufallsdaten" aus. Dies ist völlig unbegründet, die Daten können alles sein. Daher muss der Host Transaktionen für die ungünstigste Nutzlast planen, mit maximalem Bit-Stuffing-Overhead von 512 * 7/6 = ~ 600 Byte. Plus 24 Byte Transaktionsaufwand, wie Sie zu Recht berechnet haben. Dies ergibt (7487-70) / 624 = 11,88 Transaktionen pro Mikrorahmen.

  3. Der Host muss etwa 10% der Bandbreite für Steuertransaktionen für andere Aktivitäten reservieren, sodass wir etwa 10,7 Transaktionen erhalten.

  4. Der Host-Controller hat auch eine gewisse Latenz beim Verwalten seiner verknüpften Liste, sodass zwischen den Transaktionen eine zusätzliche Lücke besteht.

  5. Das Gerät kann 5 Hubs / Hops vom Stamm entfernt sein, und die Antwortverzögerung kann bis zu 1700 ns betragen, was weitere 106 Byte jedes Transaktionsbudgets beansprucht. Bei der Rohschätzung werden nur 10,16 Transaktionen pro uFrame ausgeführt, wobei die reservierte Bandbreite nicht berücksichtigt wird.

Der Host kann keine adaptive Neuplanung basierend auf der tatsächlichen Transaktionsankunft innerhalb des uFrames durchführen. Dies wäre aus Software-Sicht unzulässig. Daher verwendet der Treiber den konservativsten Zeitplan, bis zu 9 Massentransaktionen pro uFrame, was 36 MB / s entspricht. zweite. Dies ist, was ein sehr guter USB-Stick liefern kann.

Einige verrückte künstliche Benchmarks können bis zu 11 Transaktionen pro uFrame durchführen, was 44 MBit / s ergibt. Und dies ist das absolute Maximum für das HS-USB-Protokoll.

Wo liegt der Engpass bei den heutigen Implementierungen?

Wie man oben sehen kann, gibt es keinen Flaschenhals, der gesamte rohe Bitzeitraum wird durch Protokoll-Overhead aufgefressen.

Ale..chenski
quelle