J'ai vu des systèmes « rapides » fondre de la manière la plus stupide. Pas parce que le code était faux. Parce que la plomberie l'était.

Une fois, j'ai aidé une petite équipe à expédier une application de flux en direct.

Il semblait propre dans les tests. Puis le jour du lancement est arrivé. La latence a explosé.

CPU bloqué. Paquets perdus. Les utilisateurs criaient.

Et le post-mortem a été brutal : nous copions les mêmes données encore et encore entre des couches qui n’en avaient pas besoin.

Mémoire vers le noyau. Noyau vers l'utilisateur. Utilisateur vers utilisateur.

Comme porter un verre d'eau à travers une pièce… en le versant d'abord dans cinq autres tasses. Ce n'est pas « avancé ». C'est du gaspillage.

C'est le genre de douleur ennuyeuse que Fogo ($FOGO) essaie d'éliminer. Pas avec des vibrations. Avec de la mécanique.

Deux des grandes idées ici sont le système Tango (mémoire partagée sans copie) et le réseau AF_XDP. Ça sonne comme du jargon.

C'est en fait simple : arrêtez de déplacer des octets comme un camion de livraison qui continue de recharger la même boîte. Gardez la boîte au même endroit.

Laissez tout le monde qui en a besoin ouvrir le couvercle, en toute sécurité, et passer à autre chose.

La plupart des blockchains, et la plupart des applications à forte charge en général, gaspillent du temps dans les lacunes. Pas dans « le calcul ». Dans les transferts.

Une partie termine le travail et jette des données à la partie suivante, qui les copie, les vérifie, les recopie, et ainsi de suite.

Chaque copie coûte CPU, cache et temps. Et le pire ? Cela crée du jitter. Vous n'obtenez pas juste « plus lent ». Vous devenez inégal.

Une seconde fluide, la suivante entrecoupée. Les marchés ne se soucient pas de votre latence moyenne. Ils punissent les pics.

La mémoire partagée sans copie est une attaque directe contre cela. « Mémoire partagée » signifie que deux parties d'un système peuvent voir la même région de données en même temps, comme deux personnes lisant le même tableau blanc au lieu de s'envoyer des photos de celui-ci.

« Zéro-copie » signifie que vous évitez de dupliquer ces données lorsqu'elles passent entre les étapes. Dans une pile normale, vous passez des messages en copiant des tampons.

Dans une pile zéro-copie, vous passez des pointeurs ou des poignées vers le même tampon. Les octets restent en place. Les règles de propriété changent.

Cette partie de propriété est tout le jeu. Si tout le monde peut toucher les mêmes données, vous avez besoin de règles strictes pour qu'ils ne se marchent pas sur les pieds.

C'est là qu'une conception comme Tango est importante. Pensez à Tango moins comme « un tour de magie » et plus comme un contrôle du trafic pour la mémoire.

Qui peut écrire, quand.

Qui peut lire, quand.

Comment recycler les tampons sans que quelqu'un lise des données périmées.

Comment éviter les verrous qui se transforment en un parking. Si c'est fait correctement, vous obtenez un débit élevé avec un minimum de drame.

Si c'est mal fait, vous obtenez des bogues de concurrence qui vous font remettre en question vos choix de vie.

Alors, pourquoi cela importe-t-il pour une chaîne comme Fogo ? Parce que les blockchains sont essentiellement des pipelines constants.

Les transactions arrivent. Elles sont vérifiées.

Ordonné. Exécuté. Écrit. Diffusé.

Chaque étape touche des données. Si chaque étape copie des tampons, vous payez une taxe à chaque saut. Dans un système chargé, cette taxe devient votre plafond.

Les gens adorent discuter de « TPS ». Très bien. Mais si votre chemin de mémoire est en désordre, votre nombre TPS est un résultat de laboratoire, pas un être vivant.

La mémoire partagée sans copie fonctionne également bien avec les CPU modernes. Les CPU détestent attendre la mémoire.

Ils adorent le cache. Les copies expulsent les données du cache et forcent les recharges. C'est du temps que vous ne récupérez jamais.

Le zéro-copie garde les données chaudes chaudes. Moins de churn.

Moins de ratés de cache. Latence plus prévisible. Et la prévisibilité est ce que vous voulez dans l'infrastructure.

« Cohérent plutôt que théorique » est le moyen poli de le dire.

Le réseau est l'autre moitié de l'histoire du goulet d'étranglement. Même si votre pipeline interne est serré, vous devez toujours ingérer et envoyer des paquets sans vous noyer dans la surcharge du noyau.

Le réseau Linux traditionnel est solide, mais il est conçu pour un usage général. L'usage général signifie sécurité et flexibilité.

Cela signifie également des couches supplémentaires. Copies supplémentaires. Changement de contexte supplémentaire. Sous une charge lourde, ces « extras » deviennent votre véritable limite.

AF_XDP est un type de socket Linux conçu pour pousser des paquets rapidement.

Voici le modèle mental clair : il permet aux applications en espace utilisateur de recevoir et d'envoyer des paquets en utilisant des anneaux de mémoire partagée, avec moins de passages par la pile réseau du noyau habituelle.

Vous utilisez toujours le noyau, mais vous sautez beaucoup de cérémonie. Moins de copies, moins de surcharge, latence plus faible, taux de paquets plus élevés.

Si votre travail est de déplacer des paquets avec un contrôle serré, AF_XDP est un outil sérieux.

Et ce n'est pas de la magie non plus. Vous payez pour cette vitesse avec de la complexité.

Vous devez gérer des anneaux, des tampons et de la mémoire fixe.

Vous devez penser aux files d'attente NIC, à l'affinité CPU et à la pression de retour.

La pression de retour signifie simplement : que se passe-t-il lorsque des paquets arrivent plus vite que vous ne pouvez gérer. Si vous l'ignorez, vous perdez des paquets ou vous bloquez.

Les deux sont mauvais. Une chaîne qui veut un réseau haute performance doit traiter AF_XDP comme un instrument chargé.

Un grand son, mais vous avez besoin de mains stables.

Donc, le tableau avec Fogo est assez clair : réduire la copie interne avec un design de mémoire partagée (Tango), et réduire la surcharge réseau avec AF_XDP.

La combinaison cible deux points de congestion classiques : le mouvement de la mémoire et le mouvement des paquets.

Si ceux-ci sont propres, le système passe plus de temps à faire le travail réel de vérification, d'exécution et de finalisation plutôt que de déplacer des octets comme un stagiaire stressé.

C'est le bon type de « discours sur la performance ». Il ne s'agit pas de crier un grand nombre. Il s'agit d'où les systèmes meurent vraiment.

Je me fiche de ce qu'une démo dit si le chemin de données est négligé. J'ai vu trop de piles gagner le benchmark et perdre la réalité.

Si Fogo s'engage réellement à utiliser le zéro-copie et AF_XDP de manière disciplinée, c'est une véritable position de conception.

Plus difficile à construire.

Plus difficile à déboguer.

Mais c'est le chemin qui peut rester stable lorsque la charge devient moche.

Pourtant, rien de tout cela n'est un déjeuner gratuit. Les conceptions de mémoire partagée peuvent cacher des bogues désagréables. Le réseau à haute vitesse peut amplifier de petites erreurs en pannes.

La seule chose qui me convainc, c'est le temps sous pression : charge soutenue, trafic en désordre, churn de nœuds et travail réel d'opérations.

C'est là que « haute performance » cesse d'être une diapositive et commence à être un système.

Pas de conseils financiers.

@Fogo Official #fogo $FOGO

FOGO
FOGO
0.02219
-1.68%