Cinq ans après notre première série de tests sur le nombre maximal de capteurs USB que l'on pouvait utiliser sur une machine et sur l'efficacité des différents types de hubs pour gérer ce type de trafic, nous vous proposons une série de nouveaux tests pour savoir si la situation a évolué depuis 2016...
Les principales leçons de 2016 étaient:
- Les hubs Single-TT qui causaient des pertes de paquets en case de fort trafic Full-Speed
- La nécessité d'alimenter tous les hubs et de respecter une topologie en arbre
- La limitation à 13 modules Yoctopuce pour le contrôleur internet Intel USB3 xHCI
- La limitation à ~10 modules Yoctopuce sur le Rapsberry Pi 2
Voyons donc comment le contexte a évolué sur ces différents points en cinq ans...
Les nouveaux hubs que nous avons testé
Les hubs USB en 2021
De nos jours, plus grand monde n'achète de hub USB 2.0 puisque les hubs 3.0/3.1 sont devenus très bon marchés. Les problèmes de perte de paquets des hub Single-TT sont-ils de l'histoire ancienne? Nous avons acheté différents hubs au goût du jour pour tester:
Modèle | Chipset | Ports | Profondeur | Type | Prix |
---|---|---|---|---|---|
Manhattan 163606 | Genesys+autres | 4xUSB3,20xUSB2 | 3 | desktop | 65€ |
IcyBox IB-AC6113 | VIA VL813 | 13xUSB3 | 4 | desktop | 65€ |
LogiLink UA0229 | Genesys GL3520 | 10xUSB3 | 3 | desktop | 30€ |
Delock 64039 | VIA VL813 | 13xUSB3 | 3 | desktop | 190€ |
Delock 64112 | VIA VL813 | 10xUSB3 | 2 | desktop | 210€ |
Nous avons aussi inclus dans nos tests les hubs USB 3.0 ExSys achetés la dernière fois puisqu'ils sont toujours en vente et ont une bonne réputation. Pour mémoire, ils utilisent le chipset Genesys GL3520.
On note d'emblée qu'il n'y a que peu de chipsets USB 3.0 différents: Genesys et VIA semblent avoir accaparé le marché. Microchip (anciennement SMSC) commercialisent aussi un chipset USB 3.0 que nous aurions volontiers testé, mais nous n'avons malheureusement pas trouvé de produit en vente qui l'utilise.
Les contrôleurs hôtes USB
Les contrôleurs hôtes semblent avoir plus évolué que les hubs eux-mêmes. En particulier, l'implémentation Intel XHCI prédominante en 2016 qui limitait drastiquement le nombre de devices USB que l'on peut connecter à une machine a été remplacée par des nouvelles versions plus généreuses.
Dans le but de tester USB sous une charge soutenue, nous avons effectué nos tests avec des machines relativement puissantes, essentiellement un Lenovo Thinkpad X1 Extreme 2nd generation et un Fujitsu Lifebook U9310X. Nous avons aussi fait quelques tests avec une Workstation Fujitsu Celsius, et sur deux beaucoup plus petites machines: le Lenovo ThinkCentre M75n, qui est un mini PC fanless, et sur le Raspberry Pi..
Une des nouveautés apparues depuis 2016 est la généralisation du bus Thunderbolt et de ses connecteurs USB C. Contrairement à ce qu'on pourrait penser, ce n'est pas une si bonne nouvelle pour les périphériques USB. En effet, de nombreux fabricants ont remplacé des ports racine USB par des ports Thunderbolt, sur lequel on vient connecter une "docking station", qui n'est en réalité qu'un gros hub avec de nombreux périphériques. Mais souvent, comme par exemple la docking station Lenovo Thinkpad Thunderbolt 3 Dock Gen 2, ce premier étage de hub quasiment obligatoire ajoute déjà deux niveaux de hubs USB. Sachant que USB ne permet pas plus de cinq niveaux de hubs USB, cela limite les hubs utilisables à ceux qui ont trois niveaux au maximum. Les autres doivent impérativement être branchés sur une prise USB A directement sur la machine.
Fiabilité
Le première bonne nouvelle est que l'évolution des contrôleurs USB sur l'hôte globalement augmenté la fiabilité. Le contrôleur ou les drivers de Windows semblent mieux gérer certaines erreurs de communication ou de protocole. Par exemple, alors que le chipset Genesys GL850 était inutilisable en 2016 avec du trafic USB Full-Speed soutenu, il peut presque passer inaperçu de nos jours. Ce n'est que dans des cas particuliers qu'on peut le mettre en défaut, ou en mettant un analyseur USB pour constater qu'en réalité il se produit des erreurs qui conduisent à des déconnexions transitoires qui sont récupérées par le contrôleur de manière quasi transparente.
En combinant cette amélioration de fiabilité avec avec l'augmentation du nombre de endpoints USB sur les contrôleurs hôtes, et la bande passante annoncée de 5Gbps par port sur USB 3.0, on espérait donc passer tous nos tests de charge avec au moins 50 modules sans plus aucune difficulté. Voyons si c'est vraiment le cas...
Protocole de test
Nous avons utilisé le même type de test qu'il y a cinq ans: des modules USB Full-speed (comme les modules Yoctopuce) conçus pour envoyer des messages à chaque frame, et auxquels on envoie des commandes pour faire clignoter la LED.
Dans un premier temps, le test est lancé une fois tous le modules énumérés, et on vérifie simplement qu'il tient sur la durée sans remonter d'erreur de communication à la pile logiciel.
Dans un deuxième temps, le logiciel déclenche périodiquement un redémarrage d'un des modules pour simuler des déconnexion et reconnexion, pour vérifier que l'énumération USB fonctionne toujours en condition de charge, sachant que c'était un des points faibles dans le passé.
Résultats
La bonne nouvelle est que le premier test de charge passe avec tous les hubs testé. Une des combinaisons les plus ambitieuses que nous avons testées comprenait
- Le Fujitsu Lifebook U9310X
- Le hub Logilink UA0229 (10 ports)
- Le hub Delock 64039 (13 ports)
- Le hub IcyBox IB-AC6113 (13 ports)
- 34 modules Full-Speed de test
Dans cette configuration, le système déclarait 64 périphériques USB connectés, dont 23 hubs. Ces 64 périphériques sont la limite maximale que supporte le contrôleur USB du Fujitsu Lifebook. C'est déjà beaucoup mieux qu'en 2016, mais on voit que la limite n'est pas si loin. La cause principale est que les hubs USB 3.0 comptent en réalité chacun comme deux périphériques: un hub USB 2.0 et un hub USB 3.0. Donc lorsqu'un hub 13 ports est constitué de 4 hubs USB 3.0, il coûte déjà 8 périphériques à lui tout seul. Ce qui signifie que pour chaque ajout de 3 ports USB, vous payez deux périphériques supplémentaires... Pas étonnant à ce prix qu'Intel ait été obligé de monter la limite du nombre de périphériques supportés par ses contrôleurs hôtes !
Notez que sur le portable Lenovo, la présence de deux contrôleurs hôtes distincts permet de doubler la limite du nombre de périphériques. Il est bon de savoir qu'avec certaines machines il est donc possible d'aller encore plus haut.
Dans la même configuration, le deuxième test de charge avec des redémarrages de modules montre les limites d'USB 3.0. Après quelques secondes déjà, la pile USB commence à remonter des erreurs de communication, et des paquets USB se perdent. On pourrait penser être loin des limites: avec nos 34 modules qui envoient 64 bytes chaque milliseconde, on envoie 2MB par seconde, très loin des 5 Gbps annoncés par USB 3.0. Mais visiblement il s'agit comme il y a cinq ans de problèmes d'allocation de ressources: le système USB 3.0 est capable de streamer de la vidéo à haut débit, mais pas de gérer 34 trames USB Fullspeed chaque milliseconde.
Notez que nous n'avons pas pu déterminer précisément quel était le maillon faible entre le contrôleur et les hubs: quelle que soit la combinaison de hubs USB 3.0 testés avec une trentaine de modules, les erreurs de communications se produisent relativement rapidement.
La seule combinaison qui a résisté à pleine vitesse avec plus de 30 modules à notre test avec énumération est la suivante:
- Le Lenovo ThinkPad X1 Extreme 2nd gen, alimenté
- 12 hubs USB 2.0 en deux arbres (chipset SMSC USB2514BUI), alimentés, répartis sur les deux contrôleurs du ThinkPad
- 36 modules Full-Speed de test
La configuration qui marche le mieux...
Comme quoi les améliorations de 2021 ne sont pas forcément apportées par l'USB 3.0, contrairement à ce qu'on aurait pu penser...
Le portable Fujitsu Lifebook U9310X s'en sort très bien avec 20 modules Full-Speed de test, mais il perd des paquest en charge complète à 36 modules. C'est très probablement dû fait qu'il n'a qu'un seul contrôleur USB hôte, puisque le comportement est identique avec le ThinkPad si l'on met tout l'arbre sur un seul des contrôleurs.
Dans la catégorie petites machines, le ThinkCentre M75n, qui n'a qu'un seul contrôleur hôte, s'en sort aussi très bien avec un arbre de 20 modules Full-Speed de test.
Nous avons lancé les mêmes tests sur un Raspberry Pi 3B+ sous Linux armhf. Le contrôleur USB tient la charge, mais on voit clairement que le trafic est très ralenti, sans comparaison avec les tests sous Windows. La raison est que, pour palier à des problèmes endémiques de perte aléatoire de paquets USB sur les petites machines ARM, depuis plusieurs années notre librairie active automatiquement un mécanisme de quittance pour chaque paquet envoyé. Du coup, cela va bien moins vite, mais par contre, cela fonctionne... même avec les 36 modules de test.
Nous n'avons pas encore lancé le test sur un Raspberry Pi 4, faute d'en avoir un sous la main cette semaine, mais nous n'avons en réalité pas beaucoup d'espoir pour lui. Il faut dire que le support USB Full-Speed du Raspberry Pi 4 est problématique au point que notre mécanisme de quittance de paquet ne permet pas de palier au problème, et à ce jour l'équipe de support de Raspberry Pi n'est pas parvenu à régler le problème.
Conclusion
L'amélioration des contrôleurs hôtes a permis d'augmenter considérablement le nombre de capteurs Yoctopuce que l'on peut brancher sur un PC depuis nos derniers tests en 2016. Mais si vous voulez un système robuste capable de gérer de nombreux capteurs, il vous faudra néanmoins prendre soin à:
- la topologie des hubs, à faire en arbre
- l'alimentation des hubs
- au delà de 20 modules, la répartition des modules sur plusieurs contrôleurs hôtes
- pour une robustesse accrue, la gestion des connexions et déconnexions USB dans le logiciel, à l'aide des callbacks
Finalement, on peut mentionner qu'il existe toujours l'option de palier aux limites d'USB par la connexion de capteurs via quelques YoctoHub-Ethernet, car un bus Ethernet supporte mieux la charge de nombreuses petites trames qu'un bus USB. Au niveau logiciel, cela ne vous changera presque rien de passer un capteur d'USB à Ethernet puisque la librairie Yoctopuce supporte les deux de manière quasiment transparente.