web-dev-qa-db-fra.com

Quelle est la latence minimale de l'USB 3.0

Tout d'abord, je ne connais pas grand-chose à l'USB, alors veuillez m'excuser à l'avance si ma question est fausse.

Dans l'USB 2.0, l'intervalle d'interrogation était de 0,125 ms, donc la meilleure latence possible pour que l'hôte lise certaines données de l'appareil était de 0,125 ms. J'espère une latence réduite dans les périphériques USB 3.0, mais j'ai du mal à savoir quelle est la latence minimale. La spécification USB 3.0 indique que "l'interrogation de style USB 2.0 a été remplacée par des notifications asynchrones", ce qui implique que l'intervalle d'interrogation de 0,125 ms peut ne plus être une limite.

J'ai trouvé des références pour un SSD USB 3.0 qui ressemblent à des données pouvant être lues à partir de l'appareil en un peu moins de 0,125 ms, et cela inclut tout le temps passé dans le système d'exploitation hôte et le contrôleur flash de l'appareil.

http://www.guru3d.com/articles_pages/ocz_enyo_usb_3_portable_ssd_review,8.html

Quelqu'un peut-il me dire quelle est la latence la plus faible possible? Une réponse théorique est très bien. Une réponse incluant les limites pratiques des différentes versions des piles USB Linux et Windows serait impressionnante.

Pour éviter la question "dites-moi ce que vous essayez d'atteindre", je crée une interface de débogage pour les ASIC que ma société conçoit. un PC se connecte à l'un de nos ASIC via un dongle de débogage. Un cas d'utilisation possible consiste à implémenter des points d'arrêt conditionnels lorsque le matériel ASIC n'implémente que des points d'arrêt simples. Pour ce faire, je dois déterminer quand un point d'arrêt simple a été atteint, évaluer la condition, si faux défini le processeur fonctionne à nouveau. Le point d'arrêt simple peut être atteint des millions de fois avant que la condition ne se vérifie. Nous pouvons implémenter le dongle de débogage sur un FPGA ou un microcontrôleur USB 3.0 standard.

25
Andrew Bainbridge

Répondre à ma propre question ...

J'en suis venu à réaliser que cette question manque en quelque sorte le point de l'USB 3.0. Contrairement à 2.0, ce n'est pas un système à bus partagé. Au lieu de cela, il utilise un lien point à point entre l'hôte et chaque périphérique (je simplifie trop mais l'essentiel est vrai). Avec l'USB 2.0, l'intervalle d'interrogation de 125 us était essentiel à la façon dont le bus était multiplexé par répartition dans le temps entre les périphériques. Cependant, étant donné que 3.0 utilise des liaisons point à point, il n'y a pas de multiplexage à effectuer et donc l'intervalle d'interrogation n'existe plus. Par conséquent, la latence à la livraison des paquets est beaucoup inférieure à celle de l'USB 2.0.

Dans mes expériences avec un devkit Cypress FX-3, j'ai trouvé qu'il est assez facile d'obtenir un aller-retour moyen depuis une application Windows vers l'appareil et vice versa avec un latence moyenne de 30 us. Je soupçonne que la grande majorité de ce temps est consacrée à divers retards du système d'exploitation, par exemple le changement de mode de l'espace utilisateur à l'espace noyau et la latence DPC dans le pilote.

18
Andrew Bainbridge

J'ai quelques ressources pour vous, une que je viens de télécharger, qui est l'intégrale spécifications ... plusieurs fichiers PDF zippés pour USB3, et voici un court extrait de la page 58,59 ( USB 3_r1.0_06_06_2011.pdf):

USB 2.0 transmits SOF/uSOF at fixed 1 ms/125 μs intervals.  A device driver may change 
the interval with small finite adjustments depending on the implementation of Host and 
system software. USB 3.0 adds mechanism for devices to send a Bus Interval Adjustment 
Message that is used by the Host to adjust its 125 μs bus interval up to +/-13.333 μs.  
In addition, the Host may send an Isochronous Timestamp Packet (ITP) within a relaxed 
timing window from a bus interval boundary.  

Ici est une ressource de plus qui semblait intéressante et qui traite du calcul de la latence.

Vous faites un bon point sur les problèmes de latence du système d'exploitation, en particulier dans les systèmes d'exploitation pas en temps réel.

Je pourrais vous suggérer de vérifier également SuperUser, peut-être que quelqu'un a d'autres idées. À VOTRE SANTÉ

6
happy coder

Extraits de embedded.com: "USB 3.0 vs USB 2.0: un résumé de référence rapide pour l'ingénieur occupé"

Différences d'architecture de communication USB 2.0 utilise une architecture de communication dans laquelle la transaction de données doit être initiée par l'hôte. L'hôte interroge fréquemment l'appareil et demande des données, et l'appareil ne peut transmettre des données qu'une fois qu'elles ont été demandées par l'hôte. La fréquence d'interrogation élevée augmente non seulement la consommation d'énergie, elle augmente la latence de transmission car les données ne peuvent être transmises que lorsque l'appareil est interrogé par l'hôte. L'USB 3.0 améliore ce modèle de communication et réduit la latence de transmission en minimisant l'interrogation et en permettant également aux appareils de transmettre des données dès que possible comme il est prêt .

...

Améliorations d'horodatage

Contrairement aux caméras USB 2.0, dont la précision peut varier de 0 à 125 us, l'horodatage provenant des caméras USB 3.0 est plus précis et imite la précision du temporisateur 1394 des caméras FireWire.

...

L'USB 3.0 - ou l'USB ultra-rapide - surmonte les limitations clés d'autres spécifications, toutes ces limitations avec une bande passante six (sur IEEE 1394b) à neuf (sur USB 2.0) plus élevée, une meilleure gestion des erreurs, une alimentation plus élevée, ... et temps de latence et de gigue inférieurs .

P.S. il dit également "des longueurs de câble plus longues" pour USB 3.0, mais un autre paragraphe contredit cela et dit jusqu'à 5 m pour USB 2.0, jusqu'à 3 m pour USB 3.0.

1
Nishi

Je conteste la réponse marquée.

Sous Windows, il n'y a aucun moyen d'obtenir la latence aller-retour indiquée sur USB. SuperSpeed ​​(3.0) ou non. La documentation indique:

The number of isochronous packets must be a multiple of the number of packets per frame.

https://docs.Microsoft.com/en-us/windows-hardware/drivers/usbcon/transfer-data-to-isochronous-endpoints

Les paquets par trame sont donnés par bInterval et déterminent également l'intervalle d'interrogation. Par exemple. si vous souhaitez réaliser un transfert tous les microframe (125usec) vous aurez besoin pour soumettre 8 transferts par URB (USB Request Block), ce qui signifie un intervalle de service de planification de 1 ms .

Tout autre élément nécessite votre propre pilote en mode noyau ou est hors spécifications.

Sur RT Linux je peux confirmer des allers-retours de 2 * 125usec + quelques frais généraux.

0
Paamand