Posté par freem .
En réponse au message Lenteurs terminal.
Évalué à 5.
Dernière modification le 06 février 2019 à 01:17.
On voit bien que les terminaux graphiques ont des valeurs sensiblement autour de 2.0secs, mais le tty est vraiment à la ramasse sous linux.
Est ce qu'il y a des raisons à ça ?
J'étais intrigué, donc j'ai fait un test, plus simple, en bash: time for i in $(seq 1 10000); do printf "%d" $i;done.
Le résultat est environ de 1.84s sur un TTY, sur 5 essais.
Sur urxvt, je suis à environ 0.19s, l'écart est d'un ordre de grandeur de x10.
Sur TTY via ssh, les résultats changent pas mal, mais en moyenne et à vue de nez, dans les 0.25s.
Sur urxvt, via ssh, dans les 0.35s.
À vue de nez, le TTY est en moyenne et à la louche 10x plus lents que les autres solutions.
Le temps mis par les sessions ssh fluctue énormément, ce que j'aurai envie d'associer au réseau et autres usages CPU ponctuels (le chiffrement, ça doit se sentir, il aurait fallu tester telnet, screen ou tmux pour enlever des causes d'interférences), mais sont proches, tout en étant légèrement plus lents que le test sous urxvt seul.
À vue de nez, pour moi, la constante ici c'est: /dev/ttyXX vs /dev/pts/XX. Je m'avance, mais je suppose que /dev/ttyXX accède à l'écran de manière brute, sans cache, en mode caractère, tandis que /dev/pts/XX doit ajouter un cache, qui doit augmenter les performances drastiquement (parce qu'envoyer 10 blocs de 5 octets est plus lents qu'envoyer un seul bloc de 50 octets, moins d'appels systèmes, notamment).
Bon, théorie à confirmer, hein, je n'ai pas fait de vrais bench, y'a pleins d'applications qui tournent sur cette machine et qui parasitent, je n'ai pas non plus fait assez d'essais loggués pour extraire des résultats vraiment précis et surtout, je n'ai pas cherché à caler un petit gperftools derrière tout ça :)
Pour le fun, le même truc codé en C:
* tty, sans SSH: ~0.95s
* tty, via SSH: ~0.005s
* urxvt, sans SSH: ~0.004s
* urxvt, via SSH: ~0.005s
Le ratio change radicalement de catégorie ici (x200?) et l'impact de SSH est négligeable (en fait, je pense que la commande time n'est pas assez précise, il faudrait que j'augmente le nombre d'itérations...).
J'ai envie de dire que ça conforte mon idée: dans le cas des terminaux virtuels, il est probable que les données ne soient envoyées à l'écran qu'avec une certaine fréquence, contrairement au TTY qui doit envoyer dès que la donnée est disponible.
Mais c'est amusant de voir l'écart de performances entre PTS et TTY du coup... je pense que je vais me bricoler un petit bout de code pour coller direct mes shells TTY dans des PTS du coup.
PS: désolé de pas pouvoir aider plus sur la question...
# accélération et divers contrôles de framerate?
Posté par freem . En réponse au message Lenteurs terminal. Évalué à 5. Dernière modification le 06 février 2019 à 01:17.
J'étais intrigué, donc j'ai fait un test, plus simple, en bash:
time for i in $(seq 1 10000); do printf "%d" $i;done.Le résultat est environ de 1.84s sur un TTY, sur 5 essais.
Sur urxvt, je suis à environ 0.19s, l'écart est d'un ordre de grandeur de x10.
Sur TTY via ssh, les résultats changent pas mal, mais en moyenne et à vue de nez, dans les 0.25s.
Sur urxvt, via ssh, dans les 0.35s.
À vue de nez, le TTY est en moyenne et à la louche 10x plus lents que les autres solutions.
Le temps mis par les sessions ssh fluctue énormément, ce que j'aurai envie d'associer au réseau et autres usages CPU ponctuels (le chiffrement, ça doit se sentir, il aurait fallu tester telnet, screen ou tmux pour enlever des causes d'interférences), mais sont proches, tout en étant légèrement plus lents que le test sous urxvt seul.
À vue de nez, pour moi, la constante ici c'est: /dev/ttyXX vs /dev/pts/XX. Je m'avance, mais je suppose que /dev/ttyXX accède à l'écran de manière brute, sans cache, en mode caractère, tandis que /dev/pts/XX doit ajouter un cache, qui doit augmenter les performances drastiquement (parce qu'envoyer 10 blocs de 5 octets est plus lents qu'envoyer un seul bloc de 50 octets, moins d'appels systèmes, notamment).
Bon, théorie à confirmer, hein, je n'ai pas fait de vrais bench, y'a pleins d'applications qui tournent sur cette machine et qui parasitent, je n'ai pas non plus fait assez d'essais loggués pour extraire des résultats vraiment précis et surtout, je n'ai pas cherché à caler un petit gperftools derrière tout ça :)
Pour le fun, le même truc codé en C:
* tty, sans SSH: ~0.95s
* tty, via SSH: ~0.005s
* urxvt, sans SSH: ~0.004s
* urxvt, via SSH: ~0.005s
Le ratio change radicalement de catégorie ici (x200?) et l'impact de SSH est négligeable (en fait, je pense que la commande time n'est pas assez précise, il faudrait que j'augmente le nombre d'itérations...).
J'ai envie de dire que ça conforte mon idée: dans le cas des terminaux virtuels, il est probable que les données ne soient envoyées à l'écran qu'avec une certaine fréquence, contrairement au TTY qui doit envoyer dès que la donnée est disponible.
Mais c'est amusant de voir l'écart de performances entre PTS et TTY du coup... je pense que je vais me bricoler un petit bout de code pour coller direct mes shells TTY dans des PTS du coup.
PS: désolé de pas pouvoir aider plus sur la question...