Auteur Sujet: Débit faible en http/3, mais ok en http/2 sur le même serveur  (Lu 3958 fois)

0 Membres et 1 Invité sur ce sujet

Fyr

  • Abonné Free fibre
  • *
  • Messages: 841
  • Talissieu 01
Débit faible en http/3, mais ok en http/2 sur le même serveur
« Réponse #12 le: 16 mai 2022 à 21:25:30 »
Le support HTTP3 de curl est possible a priori https://curl.se/docs/http3.html (statut expérimental dans la doc) Peut être te faire une version non packagée


ouno

  • Abonné Orange Fibre
  • *
  • Messages: 112
  • Rennes (35)
Débit faible en http/3, mais ok en http/2 sur le même serveur
« Réponse #13 le: 16 mai 2022 à 21:58:26 »
Le support HTTP3 de curl est possible a priori https://curl.se/docs/http3.html (statut expérimental dans la doc) Peut être te faire une version non packagée
Oui le support de HTTP/3 est possible avec curl, mais effectivement expérimental et pas vraiment prêt à être utilisé pour tester des débits...

Par exemple le bug connu 18.3 HTTP/3 download is 5x times slower than HTTP/2 a finalement été reclassé et n'est même plus considéré comme un bug, juste un point nécessitant amélioration.

Le problème a été complètement mis sous le tapis il y a 3 mois via le commit
KNOWN_BUGS: remove "HTTP/3 download is 5x times slower than HTTP/2" (It's not actually a bug. More like room for improvement)
.

pitalugue

  • Abonné Free fibre
  • *
  • Messages: 542
Débit faible en http/3, mais ok en http/2 sur le même serveur
« Réponse #14 le: 17 mai 2022 à 11:37:26 »
On a aussi l'impression qu'il y a autant de librairies que d'implémentations du protocole, ce serait un non-sens. Il va falloir que ça décante.

kgersen

  • Modérateur
  • Abonné Bbox fibre
  • *
  • Messages: 9 091
  • Paris (75)
Débit faible en http/3, mais ok en http/2 sur le même serveur
« Réponse #15 le: 17 mai 2022 à 12:44:21 »
c'est normal et souhaitable qu'il y ai plein d'implémentations car il y a plusieurs langages , plateformes et contexte d'utilisation différents (client, serveur, etc)

La norme de QUIC est sèche depuis 1 an (https://datatracker.ietf.org/doc/html/rfc9000)/ mais il y a 2 versions en exploitation ("h3" et "h3-29",visible avec un curl -v ou dans un navigateur avec F12). A terme il n'y aura pas qu'une version car les concepteurs ne veulent pas que ca se "fige" notamment au niveau des middle box (firewall, routeur, proxy, etc) comme cela a eu lieu avec TCP. Du coup un QUIC v2 est déjà en cours https://www.ietf.org/archive/id/draft-ietf-quic-v2-03.html  (c'est tout frais, le 12 mai) simplement pour forcer les tests et empêcher ce figement (en gros ils veulent pas par exemple que les vendeurs de firewall se contentent juste de tester la valeur de quelques octets d'entête pour savoir si c'est du QUIC ou pas).
Bref il faut pas répéter les erreurs du passé ou on a du conserver une version figée de TCP. L'objectif de QUIC est clairement de ne plus dépendre et être otages des intermédiaires du réseau (box, firewall, opérateurs, etc).

Pour ce qui est des implémentation, un site permet de suivre, en temps réel, les interopérabilité et les débits entre ces implémentations: https://interop.seemann.io/ (ca met du temps a charger les données).
Les mesures de débit sont limité a des transferts de 10 MB donc juste pour valider grossièrement les implémentations.

La norme HTTP/3 (HTTP au dessus de QUIC) n'est pas encore finalisée ( https://quicwg.org/base-drafts/draft-ietf-quic-http.html ). On peut utilisé QUIC pour faire autre chose que du HTTP , comme on utilise TCP pour autre chose.

La plupart des implémentations de QUIC proposent aussi une implémentation de HTTP/3 mais pas forcement. MSQuic de Microsoft par exemple ne propose pas HTTP/3. Ca n'empêche pas Microsoft de finaliser l'implémentation et de l'intégrer dans Windows (cf les perfs avec un connexion 50 Gbps: https://microsoft.github.io/msquic/ )

Curl n'est qu'un surcouche sur une de ces implémentations (voir plusieurs). De base, Curl n'implémente que HTTP/1.1 , depuis pour HTTP/2 et HTTP/3 ils utilisent des implémentations tierces (qui peut changer d'un build a un autre et d'une plateforme a une autre).

A noté aussi que QUIC nécessite une version spéciale de SSL/TLS qui n'est pas encore dispo dans les versions stables des implémentation de SSL/TLS. Ca rejoute une complexité et une dépendance.

bref c'est complexe mais HTTP/3 représente déjà un grosse partie des paquets en production sur Internet donc on n'est plus dans l'expérimental non plus.

pitalugue

  • Abonné Free fibre
  • *
  • Messages: 542
Débit faible en http/3, mais ok en http/2 sur le même serveur
« Réponse #16 le: 17 mai 2022 à 21:56:54 »
Je vous parle bien de librairies, pas du nombre de clients ou services.
En quel cas la prolifération de librairies pour un même jeu de fonction se montre positive ? dans l'histoire de l'informatique ? La question se veut candide.

kgersen

  • Modérateur
  • Abonné Bbox fibre
  • *
  • Messages: 9 091
  • Paris (75)
Débit faible en http/3, mais ok en http/2 sur le même serveur
« Réponse #17 le: 17 mai 2022 à 22:14:54 »
En quel cas la prolifération de librairies pour un même jeu de fonction se montre positive ? dans l'histoire de l'informatique ? La question se veut candide.

y'a plein d'avantages surtout au début d'une techno.
La concurrence entraine une émulation.
Le retex partagé profite a tout le monde (si tout le monde joue le jeu ce qui est le cas en open source) et fait avancé la mise au point de la norme.
Une société ou une équipe qui fait sa version pour son produit va a son rythme, monte ses compétences internes et donc ne dépend pas du rythme, des compétences et des progrès d'une autre société ou équipe.

Tout le monde n'a pas la même API non plus,  donc ces librairies même si elles font la même chose 'en dessous' ne sont pas forcement interchangeables, sans parler des langages différents (c, rust, go, python, etc).

Regardes les implémentations de quic: https://github.com/quicwg/base-drafts/wiki/Implementations y'en a pas tant que ca non plus.

Regardes les libc par exemple, y'a pas qu'une. loin de la.

kgersen

  • Modérateur
  • Abonné Bbox fibre
  • *
  • Messages: 9 091
  • Paris (75)
Débit faible en http/3, mais ok en http/2 sur le même serveur
« Réponse #18 le: 19 mai 2022 à 16:59:32 »
petit test HTTP/3 avec nspeed (version a venir bientot):

transfert 20Gb en localhost (loopback):

comparison HTTP/1.1 vs HTTP/2 vs HTTP/3:
Job 1|  13.9 Gbps|       0 bps| 8.00|    13.9 GB|           0 B|get -http11 https://localhost:7333/20g (127.0.0.1:7333 - 0.110 ms - HTTP/1.1)
Job 1|   5.3 Gbps|       0 bps| 8.00|     5.3 GB|           0 B|get https://localhost:7333/20g (127.0.0.1:7333 - 0.368 ms - HTTP/2.0)
Job 1|   1.7 Gbps|       0 bps| 8.00|     1.7 GB|           0 B|get https://localhost:7333/20g ( - 0.0 ms - HTTP/3)

A noter qu'en HTTP/3 utiliser plusieurs flux n'améliore pas plus le résultat contrairement a HTTP1 et HTTP2:
   Job| Read speed| Write speed| Time| Bytes read| Bytes written|command
 Job 1| 416.5 Mbps|       0 bps| 8.00|   416.6 MB|           0 B|get https://localhost:7333/20g ( - 0.0 ms - HTTP/3)
 Job 2| 415.2 Mbps|       0 bps| 8.00|   415.3 MB|           0 B|get https://localhost:7333/20g ( - 0.0 ms - HTTP/3)
 Job 3| 412.8 Mbps|       0 bps| 8.00|   412.9 MB|           0 B|get https://localhost:7333/20g ( - 0.0 ms - HTTP/3)
 Job 4| 415.3 Mbps|       0 bps| 8.00|   415.4 MB|           0 B|get https://localhost:7333/20g ( - 0.0 ms - HTTP/3)
 Total|   1.7 Gbps|       0 bps| 8.00|     1.7 GB|           0 B|

Le graphe des interfaces montre qu'on a  un pic a 2,1 Gbps et une occupation cpu forte (cpu 4c/8t):
graphiques interfaces & cpu:




A suivre donc.

vivien

  • Administrateur
  • *
  • Messages: 47 186
    • Twitter LaFibre.info
Débit faible en http/3, mais ok en http/2 sur le même serveur
« Réponse #19 le: 19 mai 2022 à 21:44:39 »
Comment tu as fait pour implémenter la partie serveur HTTP/3 ?

Cela serait utilisable avec un autre outil ?

kgersen

  • Modérateur
  • Abonné Bbox fibre
  • *
  • Messages: 9 091
  • Paris (75)
Débit faible en http/3, mais ok en http/2 sur le même serveur
« Réponse #20 le: 19 mai 2022 à 23:18:32 »
Comment tu as fait pour implémenter la partie serveur HTTP/3 ?
j'utilise quic-go vu que NSpeed est écrit en Go.

Cela serait utilisable avec un autre outil ?

c'est a dire ? un autre client ?
oui curl ou meme un navigateur peuvent download/upload de/vers un serveur nspeed.


vivien

  • Administrateur
  • *
  • Messages: 47 186
    • Twitter LaFibre.info
Débit faible en http/3, mais ok en http/2 sur le même serveur
« Réponse #21 le: 20 mai 2022 à 07:17:56 »
Intéressant. Cela permettrait d’identifier de manière certaine si c'est le serveur web Nginx, l'hébergeur, le réseau ou le client qui pose problème pour ma problématique de débit.

ouno

  • Abonné Orange Fibre
  • *
  • Messages: 112
  • Rennes (35)
Débit faible en http/3, mais ok en http/2 sur le même serveur
« Réponse #22 le: 20 mai 2022 à 07:26:48 »
Le graphe des interfaces montre qu'on a  un pic a 2,1 Gbps et une occupation cpu forte (cpu 4c/8t):
Dans tous les cas cela paraît logique d'avoir une utilisation forte en CPU lors d'un test en localhost non ? (surtout en chiffré)
Tu utilises quel modèle de CPU et tu montes à combien en non chiffré HTTP/1.1 ?

kgersen

  • Modérateur
  • Abonné Bbox fibre
  • *
  • Messages: 9 091
  • Paris (75)
Débit faible en http/3, mais ok en http/2 sur le même serveur
« Réponse #23 le: 20 mai 2022 à 10:26:44 »
Dans tous les cas cela paraît logique d'avoir une utilisation forte en CPU lors d'un test en localhost non ? (surtout en chiffré)
Tu utilises quel modèle de CPU et tu montes à combien en non chiffré HTTP/1.1 ?

oui le test localhost est en general toujours 'cpu bound'.

le cpu est un "Intel(R) Core(TM) i7-8559U CPU @ 2.70GHz" (la machine est un Intel NUC 7)

en non chiffré HTTP/1.1 le meme test monte a 58 Gbps et n'utilise que 2 cores, un pour le client un pour le server dont un des 2 moins utilisé.
on voit que le chiffrement utilisé (cipher=TLS_AES_128_GCM_SHA256 crypto=TLS13) impacte fortement le max.
en non chiffré HTTP/2 (mode h2c)  ca monte a moins de  9 Gbps (probleme connu de l'implémentation en Go, il y a bugfix a venir qui permet d'atteindre 30 Gbps) et tres réparti sur plusieurs cores.

test HTTP/1.1 non chiffré suivi d'un test HTTP/2 (h2c):

courbe cpu en meme temps:



on voit que l'implémentation de HTTP/2 (et de HTTP/3 sur le graphique du post précédent) utilise plus de cores ce qui les pénalisent quand y'a qu'un flux.

Apres les test en localhost n'est qu'une indication, un test avec carte réseau reste plus réaliste car le drivers et ses optimisations (offload) sont sollicités.