p4

Le moteur derrière Kvasir : un protocole adressé par événements où les agents possèdent les nœuds, les stage servers détiennent les couches, et le placement est ce qu'un opérateur énonce plutôt que ce que le réseau devine.

p4 exécute un même modèle sur plusieurs machines en le découpant en stages — des tranches contiguës de ses couches — et en donnant à chaque stage son propre processus. Un agent possède les nœuds d'un hôte : il lance les stage servers, route les événements entre eux et répond de leur cycle de vie. Aucun ordonnanceur ne décide où vont les choses ; un opérateur écrit un plan de placement, le charge, et le réseau sert alors exactement cela.

Le chemin d'une requête à travers un déploiement p4.

browser / SDK
  → gateway :8791              # payment, settlement, the wallet app
  → bridge :19000              # OUTER: session, submit, gather
  → p4 agent                   # owns this host's nodes
  → stage servers              # one process per layer slice
Adressage

Un stage compose vers l'agent du stage suivant

Quand un stage termine ses couches, il passe le résultat au stage suivant en demandant à son propre agent d'ouvrir une connexion vers l'agent de ce stage, à l'adresse que cet agent annonce. L'adresse annoncée n'a donc rien de cosmétique : elle doit être joignable depuis tous les autres hôtes de l'anneau, et devrait désigner le réseau le plus rapide qu'ils partagent. Annoncez la loopback et un anneau à deux hôtes se compose silencieusement lui-même.

Cycle de vie

Un seul nombre relie tout un chargement

  • La load generation est choisie par celui qui charge et comparée pour égalité exacte à chaque session, inférence, règlement et déchargement. Elle n'est consignée nulle part sur les machines : le chargeur l'écrit donc sur disque *avant* que la première commande ne parte — sans elle, un modèle chargé ne peut même pas être démonté.
  • La generation d'un nœud et la load generation sont le même nombre. L'adaptateur compare la generation source d'un reçu de libération à celle du chargement auquel il appartient et arrête le nœud quand elles diffèrent : un anneau chargé avec deux nombres différents sert une requête, puis perd sa tête.
  • Un journal opérationnel est exigé avant qu'un modèle ne se charge tout court : c'est le registre d'admission qui rend un chargement rejouable sans danger, pas une aide au débogage.
Ce qu'il ne fait pas

Des omissions délibérées

p4 n'applique aucun template de conversation — il transmet un prompt opaque et attend de l'appelant qu'il ait rendu le format de tour du modèle. Il ne prend aucune décision de placement. Et il ne porte aucune notion de qui doit être payé : les stages rapportent les lignes de tokens qu'ils ont exécutées, et le règlement est le contrat de quelqu'un d'autre. Chacune de ces coutures, Kvasir la comble dans le [bridge](/wiki/bridge), ce qui garde le moteur assez étroit pour suivre l'upstream.

L'agent et le stage server natif forment une seule release. Un agent compilé depuis un arbre plus récent échoue au READY sur une capacité absente du HELLO du stage server — après avoir chargé le modèle entier. Compilez les deux depuis le même checkout.