Citation :
Alors je ne vais pas être très objectif car python ce n'est pas un langage que j'apprécie beaucoup, mais bon, je vais essayer quand même.
C'est un language pour apprendre et découvrir, s'amuser à importer plein de librairies et ne rien savoir coder
C'est pas ma tasse de thé non plus, pour plein d'autres raisons. Par contre c'est très réducteur de dire que c'est un langage pour s'amuser. Ca reste un langage puissant supportant énormément de concepts avancés.
Mais bon on est hors sujet ici et nos préférences n'ont pas trop d'intérêt.
Citation :
Leur protocole de test c'est de simuler l'appui sur un bouton en activant une des gpios sur le pi puis mesurer le temps que le kernel récupère l'info en provenance du driver de manette.
Dans le meilleur des mondes (celui d'un softeux), ça marcherait.
Sauf que c'est du python et qu'en plus tu fais ça sur la même machine que ce que tu veux tester...
Le python est un language interprété, le plus bas de l'échelle en terme de vitesse d'exécution.
En même temps, c'est un peu normal, l'interpréteur python doit lire ligne par ligne le script, comprendre ce qu'il faut faire et exécuter les différentes actions.
Alors oui, un langage interprété est plus lent qu'un compilé. Indéniable.
Cependant ce n'est pas si lent et ce n'est pas interprété ligne à ligne. Lors du lancement cela parse la syntaxe, construit un AST et ensuite compile du bytecode qui sera exécuté.
Tout ça pour dire que lorsqu'il est en train de tourner, il est très rapide et suffisamment pour la mesure qu'on souhaite effectuer ici.
Citation :
Par exemple dans le cas d'activer le bouton simulé, il faut remonter toutes les couches de l'OS jusqu'à celle qui gère le bas niveau.
Autant dire que sur un OS temps réel tu ne maitrise absolument pas ce temps, l'OS peut bien faire ce qu'il veut, si il a décidé que ce n'était pas sa priorité, il fait autre chose. Surtout que c'est exécuté côté utilisateur et pas côté kernel.
Si tu regardes le script, il lance la commande d'un appui (comme expliqué, ça remonte toutes les couches,...), lit le temps machine en nano seconde (alors que l'OS a peut être fait autre chose en attendant).
De là ça ouvre le système de fichier (re quelques couches à traverser) pour vérifier l'état du bouton lu par le kernel, part dans une boucle infinie (en saturant le processeur au passage) et dès qu'il a l'info, va relire le temps machine.
Et c'est la comparaison entre temps de début et temps de fin qui est retenu et moyenné.
100% d'accord, mais tout ce temps CPU perdu entre kernel/userland et autre context switching, il concerne toutes les solutions testées. Donc si l'un obtient 0.5ms et un autre 50ms, on peut supposer que les 49.5ms supplémentaire du second ne sont pas liées au protocole de test mais à une différence entre les solutions testées.
C'est d'ailleurs intéressant que tu évoques la capacité du kernel à prendre la main sur l'exécution, il me semble que le recalboxjamma utilise les interruptions générée par les multiplexeurs afin "notifier" le Pi.
Citation :
Tu satures un processeur en attendant un résultat et tu mesures le temps avec un language absolument pas fait pour.
De plus tu es dépendant de la machine sur lequel ça tourne, des librairies, de l'interpréteur python, etc... Un pi3 est par exemple est plus lent à basculer les gpio qu'un pi4. Certaines versions de python sont plus rapides que d'autres, etc...
Tout ça pour dire qu'on est TREEEES TREEEES loin d'un résultat fiable. Pour moi, il est strictement impossible de mesurer un temps dans ces conditions.
Même en codant ça en C (language compilé), côté user, j'aurais des doutes sur la fiabilité.
D'accord également, ce n'est pas 100% fiable ni ultra optimisé mais le but n'est pas là: il s'agit de lancer plusieurs "click" et de mesurer le temps pour que cela revienne sur le /dev/.
Le Pi4 sera plus rapide, un logiciel optimisé sera plus rapide, etc... Oui, c'est encore une fois le but du test de comparer le tout et de voir quelle solution est la plus efficace (peu importe la raison).
Citation :
Le seul truc où j'aurais un peu plus confiance c'est un déclenchement externe (GBF ou autre) et une version modifiée du module kernel de gestion des inputs qui par exemple active un gpio (en direct du coup) quand l'info lui est remonté.
Là, tu compares les temps avec du vrai matos (un oscillo, analyseur logique) et tu auras peut être des résultats cohérents.
Pour le coup ça sera ultra pertinent que on mesurera la latence globale allant du bouton jusqu'à la réaction à l'écran; ce qui au final est la vraie valeur utile au joueur.
Citation :
Quand à Shannon Nyquist, tout à fait d'accord, mais va faire comprendre ça au grand public qu'un polling à la fréquence de rafraichissement / 2 est largement suffisant.
20ms/2 en 50hz et 16ms/2 en 60hz.
Le hard d'origine fait logiquement un polling à chaque frame. Même certaines manettes n'acceptent pas un polling plus rapide (les megadrives 6 boutons par ex)
C'est sûr qu'afficher 0,5ms de temps de réponse c'est plus vendeur

Si c'était réel et qu'on reprend le théorème, on doit être à 250us de polling, soit 64 fois ce qu'on a besoin. Chez moi, on appelle ça du pignolage de mouche.
D'ailleurs, pour le fun, voici le polling d'un adaptateur usb 0 lag :

on est à un peu plus de 9ms de polling.
De toutes façons l'input lag, c'est un éternel débat...
Et oui... Du coup c'est quoi la fréquence sur le rpijamma ?
