Atteindre 8,8 Gbit/s de trafic vidéo sur un seul cœur de processeur en Go
Microsoft
Un développeur de Habr décrit la construction d'un moteur de streaming RTSP-vers-HLS personnalisé en Go, appelé Ruseon Core, pour gérer le problème du troupeau tonitruant. Le moteur utilise un tampon en anneau sans copie avec sync.Pool pour éviter les allocations, atteignant un débit de 8,8 Gbit/s sur un seul cœur, avec une utilisation minimale de la mémoire et du processeur, contrairement à FFmpeg ou MediaMTX.
Après qu'un lien partagé a provoqué un troupeau tonitruant et un manque de mémoire du serveur, l'auteur a décidé de créer un moteur de streaming personnalisé en Go plutôt que de louer du matériel plus puissant. Ce moteur, nommé Ruseon Core, ingère les flux RTSP et produit du HLS sans transcodage, en relayant simplement les octets. La caractéristique clé est un tampon circulaire à zéro copie avec sync.Pool : les trames sont écrites une seule fois dans un tampon provenant d'un pool et partagées avec tous les abonnés, éliminant ainsi les allocations et la pression du ramasse-miettes. Le benchmark montre 13,9 ns/op et 0 B/op. Les tests de charge avec k6 (1000 utilisateurs) sur un Ryzen 5600x ont atteint 8,8 Gbps (81 Go en 70 secondes) avec 60 000 réponses HTTP réussies et aucune défaillance. La protection des abonnés utilise des envois non bloquants sur des canaux avec abandon des trames pour les clients lents, et un indicateur NeedsIFrame pour se resynchroniser sur la prochaine image clé. Une fenêtre glissante de 5 segments HLS est conservée en mémoire ; les segments obsolètes renvoient une erreur 404, ce qui amène les lecteurs comme hls.js à sauter à l'extrémité en direct. Le système utilise 250 Mo de RAM pour 100 flux, mais les tampons des sockets du système d'exploitation ajoutent une surcharge. L'auteur met en garde contre les pièges de sync.Pool et suggère que pour les charges de travail sans transcodage, éviter FFmpeg et contrôler la mémoire avec zéro copie est bénéfique.
Source: Habr — хаб ИИ —
original
