Artisan Numérique

/cli/terminal/performances/ttyplay/ttyrec/urxvt/xterm/ Tester les performances d'un terminal avec ttyrec

Alors évidemment si vous n'utilisez le terminal que pour taper trois lignes de commandes à chaque lune bleue, la vitesse de ce denier importe peu au fond. N'importe quel machin basé sur libvte fera l'affaire.

En revanche pour ceux qui comme moi utilisent leur terminal de manière intensive et permanente, la vélocité de cet émulateur est un facteur important de choix. Mais plutôt que de vous balancer la nième liste de chiffres, déclenchant la nième guerre des trolls sur le thème "mon terminal il déchire plus que le tien", je vais vous proposer ici une manière simple de faire vous-même le test. Et ainsi de bencher votre usage.

Méthodologie

Le problème d'un bench en général est qu'il est difficile de savoir quoi tester exactement pour refléter au mieux un usage réel. Sur le net on trouve un paquet de tests basés sur des trucs aussi exotique que des cat de docs monstrueuses. Mais au final ce type d'approche ne teste qu'une partie du système (ici la capacité à sortir du caractère monochrome au kilomètre et le système de scrolling). Je ne blâme personne, je m'y suis moi aussi essayé ;-)

Pour faire un véritable test objectif, quoi de mieux au fond que de simuler son propre usage. Pour un environnement graphique ce serait chose complexe, il faudrait enregistrer clavier, souris et tout le tintouin pour rejouer les sessions. Mais pour un terminal, il suffit finalement de capturer le flux de séquences d'échappements. Laissez moi donc vous parler d'un utilitaire bien sympathique, ttyrec.

Enregistrement de vos habitudes de travail

ttyrec n'est pas outil de bench, mais un système permettant d'enregistrer, puis de rejouer (commande ttyplay) une session en mode texte. Cela permet de créer des tutoriaux, mais aussi de se connecter sur une session distante lorsqu'un ami veut vous montrer comment faire telle ou telle chose. Nous, nous allons l'utiliser ici pour capturer une session et la rejouer à fond la caisse.

En interne, ce petit utilitaire va capturer les séquences jouées dans un terminal pendant que vous travailler. Pour se faire, il faut déjà installer le paquet ttyrec et simplement lancer ttyrec. Cela fonctionne un peu comme un shell. L'utilitaire vous rend la main immédiatement mais ne vous y trompez pas. Tout ce qui se passe à partir de maintenant est enregistré dans le fichier ttyrecord dans le dossier où vous vous trouvez.

À partir de là faite ce que vous avez à faire. Moi j'ai lancé une session vim avec plein de panneaux (nerdtree, tagbar, etc.) et bien évidement un code source bien long avec la coloration syntaxique activée. J'ai scrollé, déplié les pliages, navigué dans les symboles par popup, pour finalement sortir de vim et taper exit ce qui clôture l'enregistrement. Au final j'ai obtenu un fichier ttyrecord de près d'un méga.

Ça joue !

Maintenant reste à rejouer cela avec la commande ttyplay ttyrecord. Lancée telle quelle, la commande va lire le fichier ttyrecord à la vitesse normale. C'est à dire à votre vitesse à vous. C'est très pratique pour montrer à quelqu'un comment fonctionnent des commandes, mais peu utile dans notre cas.

Heureusement il y a une option -n qui va débrider l'outil et ignorer toutes le temps d'attentes. ttyplay -n ttyrecord va donc jouer les séquences à pleine vitesse poussant le terminal à son maximum. Il ne nous reste alors plus qu'à ajouter un coup time pour bencher le tout :

gastontime ttyplay -n ttyrecord
....
0,00s user 0,05s system 13% cpu 0,354 total%

Ce qui nous donne 0.354 seconde pour jouer 1mo de séquence ANSI. Pas si pire :-)

Conclusion

Voilà il ne vous reste plus qu'à faire de même et à tester vos prétendants terminaux. Pour info les 0.354s sont obtenues avec URXVT qui gère donc l'unicode, avec un fond pixmap et une police TTF. À titre de indicatif xterm avec une police TTF, mais sans fond pixmap prend 16s... Je précise "à titre indicatif" car j'imagine qu'il doit y avoir des choses optimisables côté xterm.

Dans tous les cas, ce type d'approche permet d'apprécier correctement je pense la vélocité réelle d'un terminal, hors toute subjectivité, en se basant sur son usage. Ainsi quelqu'un qui testera la même chose avec top et juste des commandes, aura j'imagine des chiffres entre XTerm et Urxvt beaucoup plus proche rendant le choix entre les deux probablement inutile.

Dans mon cas cependant, cela m'a permis de corriger pas mal de choses tant dans le réglages d'urxvt que dans les options de compilation. À titre d'exemple, je laissais le terminal "fabriquer" les polices grasses, italic, etc à partir d'une police de base. En faisant cela, le test prenait 3 secondes et non 0.3, une paille ;-).