Langage de programmation P4

Langage de programmation P4
P4 est un langage de programmation conçu pour la programmation des règles de routage des paquets. Contrairement aux langages de programmation généralistes tels que C ou Python, P4 est un langage orienté domaine avec un certain nombre de constructions optimisées pour le routage réseau.

P4 est un langage open-source, licencié et soutenu par une organisation à but non lucratif appelée P4 Language Consortium. Il est également soutenu par l'Open Networking Foundation (ONF) et la Linux Foundation (LF), les deux plus grandes organisations parapluies des projets open-source dans le domaine des technologies réseau.
Ce langage a été initialement conçu en 2013 et décrit en 2014 dans un document SIGCOMM CCR intitulé « Programmation du routage de paquets indépendante du protocole ».

Depuis sa création, P4 connaît une croissance exponentielle et se développe rapidement, devenant la norme pour la description du passage de paquets à travers des dispositifs réseau, y compris les adaptateurs réseau, les commutateurs et les routeurs.

« SDN a transformé l'industrie du réseau, et P4 élève le SDN à un nouveau niveau en offrant une programmabilité dans le domaine du routage », a déclaré Guru Parulkar, directeur exécutif de l'Open Networking Foundation.

Le langage P4 a été initialement créé par un groupe d'ingénieurs et de chercheurs de Google, Intel, Microsoft Research, Barefoot, Princeton et Stanford. L'objectif était simple : créer un langage facile à utiliser que les développeurs de logiciels pourraient apprendre en un jour et utiliser pour décrire précisément comment les paquets sont transférés dans le réseau.

Dès le début, P4 a été développé comme étant indépendant de la cible (c'est-à-dire qu'un programme écrit en P4 peut être compilé sans modifications pour s'exécuter sur diverses cibles telles que ASIC, FPGA, CPU, NPU et GPU).

Le langage est également indépendant des protocoles (c'est-à-dire qu'un programme P4 peut décrire des protocoles standard existants ou être utilisé pour spécifier de nouveaux modes d'adressage personnalisés).

Dans l'industrie, P4 est utilisé pour programmer des dispositifs. Il est possible qu'à l'avenir, les RFC Internet et les normes IEEE intègrent également la spécification P4.

P4 peut être utilisé à la fois pour des dispositifs programmables et à fonction fixe. Par exemple, il est utilisé pour enregistrer avec précision le comportement du pipeline du commutateur dans les interfaces API des interfaces d'abstraction de commutateur (SAI), utilisées par le système d'exploitation de commutateur open source SONiC. P4 est également utilisé dans le projet ONF Stratum pour décrire le comportement de commutation à travers de nombreux dispositifs stationnaires et programmables.

La description du comportement des commutateurs et des adaptateurs réseau permet pour la première fois de créer un modèle exécutable précis de l'ensemble du réseau avant le déploiement. Les grands fournisseurs de cloud peuvent tester et déboguer complètement le réseau à l'aide de logiciels, ce qui réduit considérablement le temps et les coûts de test des interactions en laboratoire, sans nécessiter d'équipements coûteux.

En utilisant P4, les fournisseurs d'équipements réseau peuvent compter sur un comportement de routage de base commun dans tous leurs produits, ce qui permet de réutiliser l'infrastructure de test, simplifie le développement de logiciels de gestion et, en fin de compte, garantit la compatibilité.

Bien sûr, P4 peut être utilisé pour écrire des programmes décrivant des méthodes de routage entièrement nouvelles. Par exemple, P4 est largement utilisé pour la télémétrie et les mesures dans les centres de données, les réseaux d'entreprise et les fournisseurs de services.

La communauté de recherche s'est également mobilisée. Plusieurs groupes de recherche académique de premier plan dans le domaine des technologies réseau ont publié des applications nouvelles et intéressantes basées sur des programmes P4, y compris l'équilibrage de charge, des protocoles synchronisés et le mise en cache par clé-valeur. Une nouvelle paradigm de programmation émerge, déplaçant l'innovation du matériel vers le logiciel, ce qui permet l’apparition de nombreuses idées inattendues, nouvelles et brillantes.

La communauté des développeurs a considérablement contribué au développement de code, y compris des compilateurs, des programmes de pipeline, des modèles comportementaux, des interfaces API, des environnements de test, des applications et bien plus encore. Des développeurs dévoués travaillent dans des entreprises telles qu'Alibaba, AT&T, Barefoot, Cisco, Fox Networks, Google, Intel, IXIA, Juniper Networks, Mellanox, Microsoft, Netcope, Netronome, VMware, Xilinx et ZTE ; ainsi que dans des universités, notamment BUPT, Cornell, Harvard, MIT, NCTU, Princeton, Stanford, Technion, Tsinghua, UMass et USI ; et des projets open source, y compris CORD, FD.io, OpenDaylight, ONOS, OvS, SAI et Stratum, soulignent le fait que P4 est un projet public indépendant.

Génération typique de contrôleurs pour le langage P4 :

Langage de programmation P4

Perspectives d'application

Langage de programmation P4
Comme le langage est destiné aux applications de routage, la liste des exigences et des options de conception est différente par rapport aux langages de programmation à usage général. Les principales caractéristiques de la langue sont :

  1. Indépendance de l'implémentation cible ;
  2. Indépendance des protocoles utilisés ;
  3. Reconfigurabilité des champs.

Indépendance de l'implémentation cible

Les programmes P4 sont conçus de manière à ne pas dépendre de l'implémentation, c'est-à-dire qu'ils peuvent être compilés pour de nombreux types différents de machines d'exécution, telles que des processeurs à usage général, des FPGA, des systèmes sur une puce, des processeurs réseau et des ASIC. Ces différents types de machines sont connus sous le nom de cibles P4, et pour chaque cible, un compilateur est nécessaire pour convertir le code source P4 en modèle de commutateur cible. Le compilateur peut être intégré à l'appareil cible, à un logiciel externe ou même à un service cloud. Étant donné que de nombreuses cibles initiales pour les programmes P4 étaient utilisées pour une simple commutation de paquets, on entend souvent le terme « commutateur P4 », même si l'usage de « cible P4 » est plus précis.

Indépendance des protocoles utilisés

P4 est indépendant des protocoles. Cela signifie que le langage ne possède pas de support intégré pour des protocoles courants tels que IP, Ethernet, TCP, VxLAN ou MPLS. Au lieu de cela, le programmeur P4 décrit les formats d'en-tête et les noms des champs des protocoles requis dans le programme, qui sont ensuite interprétés et traités par le programme compilé et l'appareil cible.

Reconfigurabilité des champs

L'indépendance par rapport aux protocoles et le modèle de langage abstrait permettent la reconfiguration — les objectifs de P4 doivent pouvoir modifier le traitement des paquets après le déploiement du système. Cette capacité est traditionnellement associée au routage via des processeurs généralistes ou des processeurs réseau, et non à des circuits intégrés ayant des fonctions fixes.

Bien qu'il n'y ait rien dans le langage qui pourrait empêcher l'optimisation d'un certain ensemble de protocoles, ces optimisations sont invisibles pour l'auteur du langage et peuvent, en fin de compte, diminuer la flexibilité du système et celle de ses objectifs ainsi que leur reconfigurabilité.

Ces caractéristiques du langage ont été initialement établies par ses créateurs dans une perspective d'utilisation généralisée dans l'infrastructure réseau.

Le langage est déjà utilisé dans de nombreuses entreprises :

1) Les centres de données hyperscale ;

La société chinoise Tencent est la plus grande société d'investissement au monde et l'une des plus grandes entreprises de capital-risque. Les filiales de Tencent, tant en Chine que dans d'autres pays, se spécialisent dans divers domaines du secteur technologique, y compris les services internet, le développement de l'intelligence artificielle et les divertissements électroniques.

P4 et le routage programmable sont des technologies de pointe utilisées dans l'architecture réseau de l'entreprise.

En tant que co-créateur, Google se réjouit de l'adoption rapide de P4 dans l'industrie du réseau, en particulier dans le domaine de la conception architecturale des centres de données.

2) Entreprises commerciales ;

Goldman Sachs, en tirant parti de la collaboration avec la communauté open source et du développement de standards et solutions communes, innove déjà dans l'infrastructure réseau et offre les meilleures solutions à ses clients.

3) Industrie ;

L'ensemble de l'industrie du réseau bénéficiera d'un langage tel que P4, qui définit clairement le comportement de redirection. C'est également l'avis de Cisco, qui déplace ses gammes de produits pour utiliser ce langage.

Juniper Networks a intégré P4 et P4 Runtime dans plusieurs de ses produits, et offre un accès logiciel au processeur intégré de Juniper et à son code.

Ruijie Networks est un fervent partisan de P4 et des avantages qu'elle apporte aux réseaux. Grâce à P4, l'entreprise peut créer et fournir des solutions de classe mondiale à un large éventail de clients.

4) Fournisseurs de télécommunications ;

AT&T a été l'un des premiers supporters de P4, l'un des premiers à utiliser P4 pour définir le comportement souhaité dans les réseaux, et à utiliser des dispositifs de redirection programmable P4 dans son réseau.

Chez Deutsche Telekom, le langage est utilisé pour prototyper des fonctions clés du réseau dans le cadre du programme Access 4.0.

5) Industrie des semi-conducteurs ;

Le langage a permis de réaliser une nouvelle paradigm de transfert de capacités logicielles dans la planification du routage des réseaux par Barefoot.

Xilinx a été l'un des fondateurs de P4.org, contribuant activement au développement du langage P4 et l'implémentant sur des plateformes programmables basées sur FPGA pour les équipements SmartNIC et NFV, lançant l'un des premiers compilateurs P416 dans le cadre de la conception de SDNet.

6) Logiciels.

Chez VMware, on considère que P4 crée une énergie énorme, une innovation et une communauté qui mènent à des transformations significatives et nécessaires dans les réseaux. VMware a initialement fait partie de ce mouvement industriel, car une nouvelle vague d'innovation est provoquée par des approches logicielles qui élargissent les capacités des infrastructures et les mettent en œuvre dans les produits les plus récents.

Ainsi, P4 est un langage de programmation indépendant de l'objectif et du protocole, utilisé par l'industrie et le monde académique pour définir de manière précise le comportement du routage des paquets en tant que programme, qui peut ensuite être compilé pour plusieurs objectifs. Aujourd'hui, les cibles incluent les commutateurs matériels et logiciels, les commutateurs de machine virtuelle, les NPU, les GPU, les FPGA, les SmartNIC et les ASIC.

Les principales caractéristiques du langage étendent considérablement ses domaines d'application et garantissent sa mise en œuvre rapide dans les architectures réseau.

Par où commencer

P4 est un projet open source, toutes les informations actuelles sont disponibles sur le site P4.org

Lien vers le dépôt https://github.com/p4lang, où vous pouvez obtenir les codes sources d'exemples et de matériaux de formation.

Plugin pour Eclipse avec prise en charge de P4, mais nous pouvons recommander P4 Studio de Barefoot.

Langage de programmation P4

Examinons les principales abstractions du noyau :

Définition des en-têtes — ils sont utilisés pour définir les en-têtes de protocole.

Dans la définition des en-têtes, on spécifie :

  • la description des formats de paquets et les noms des champs d'en-tête
  • les champs fixes et variables autorisés

Par exemple

en-tête Ethernet_h{
    bitdstAddr;
    bitsrcAddr;
    bitetherType;
}

en-tête IPv4_h{
    bitversion;
    bitihl;
    bitdiffserv;
    bittotalLen;
    bitidentification;
    bitflags;
    bitfragOffset;
    bitttl;
    bitprotocol;
    bithdrChecksum;
    bitsrcAddr;
    bitdstAddr;
    varbitoptions;
}

Analyseurs — leur tâche est d'analyser les en-têtes.

L'exemple suivant d'analyseur déterminera la transition de l'état final de la machine d'un état initial à l'un des deux états finaux :

Langage de programmation P4

parseur MonParseur(){
 état  début{transition parse_ethernet;}
 état  parse_ethernet{
    paquet.extraire(hdr.ethernet);
    transition sélectionner(hdr.ethernet.etherType){
        TYPE_IPV4: parse_ipv4;
        défaut: accepter;
        }
    }…
}

Tables — contiennent des états de machine liant des clés utilisateur à des actions. Actions — description de la manière dont on doit manipuler le paquet.

Les tables contiennent des états (définis au niveau de gestion) pour le transfert de paquets, décrivent l'unité d'action Match-Action

Le rapprochement des paquets se fait par :

  • Correspondance exacte
  • Le plus long préfixe correspondant (LPM)
  • Correspondance triple (masquage)

table ipv4_lpm{
    lectures{
        ipv4.dstAddr: lpm;
    } actions {
        transmettre();
    }
}

Toutes les actions possibles doivent être définies dans les tables à l'avance.

Les actions se composent de code et de données. Les données proviennent du niveau de gestion (par exemple, adresses IP / numéros de ports). Des primitives définies et sans cycles peuvent être spécifiées directement dans l'action, mais le nombre de commandes doit être prévisible. Par conséquent, les actions ne peuvent contenir aucun cycle ou opérateurs conditionnels.

action ipv4_forward(macAddr_t dstAddr, egressSpec_t port){
    standard_metadata.egress_spec = port;
    hdr.ethernet.srcAddr = hdr.ethernet.dstAddr;
    hdr.ethernet.dstAddr = dstAddr;
    hdr.ipv4.ttl = hdr.ipv4.ttl - 1;
}

Modules Match-Action — actions de création de clé de recherche, de recherche dans la table, d'exécution des actions.

Un exemple typique de module est donné ci-dessous :

Langage de programmation P4

Flux de contrôle — indique l'ordre d'application des modules Match-Action. C'est un programme impératif définissant la logique de haut niveau et la séquence Match-Action. Le flux de contrôle lie tous les objets en définissant le niveau de gestion.

Objets externes — ce sont des objets spécifiques avec une architecture et des interfaces API clairement définies. Par exemple, le calcul de la somme de contrôle, registres, compteurs, etc.

externe enregistrer{
    enregistrer(bit taille);
    void lire(out T résultat, in bit index);
    void écrire(in bit index, in T valeur);
}

externe Checksum16{
  Checksum16();    //constructeur
  void clear();    //préparer l'unité pour le calcul
  void update(in T data);    //ajouter des données au checksum
  void remove(in T data);  //supprimer les données du checksum existant
  bitget(); //obtenir le checksum pour les données ajoutées depuis le dernier nettoyage
}

Métadonnées — structures de données associées à chaque paquet.

Il existe 2 types de métadonnées :

  Métadonnées utilisateur (structure vide pour tous les paquets)
    Vous pouvez y mettre tout ce que vous voulez
    Disponible tout au long du pipeline
    pratique à utiliser pour vos besoins, par exemple, pour stocker le hachage du paquet

  Métadonnées internes — fournies par l'architecture
    Le port d'entrée, le port de sortie sont déterminés ici
    Horodatage lorsque le paquet a été mis en file d'attente, profondeur de la file
    multicast hash / file d’attente multicast
    Priorité du paquet, importance du paquet
    Spécification du port de sortie (par exemple, file d’attente de sortie)

Compilateur P4

Le compilateur P4 (P4C) génère :

  1. Exécution du plan de données
  2. API pour gérer l’état de la machine dans le plan de données

Langage de programmation P4

Exemple de commutateur logiciel en P4

Le code source peut être téléchargé depuis le dépôt.

p4lang/p4c-bm : crée une configuration JSON pour bmv2
p4lang/bmv2 : commutateur logiciel qui comprend les configurations JSON de la version bmv2

Le schéma de compilation du projet est illustré ci-dessous :

Langage de programmation P4

Manipulations avec les tables, les registres de lecture, les compteurs :

  • définir_table_par_défaut <table name> <action name> <action parameters>
  • ajouter_table <table name> <action name> <match fields> => &lt;action
    parameters> [priority]
  • supprimer_table <table name> <entry handle>


Le code source inclut le programme simple_switch_CLI pour une utilisation facile de l’API du commutateur logiciel.

Cet exemple et d’autres peuvent être téléchargés depuis le dépôt.

Langage de programmation P4

P.S. Au début de l'été, Intel a signé un accord pour acquérir Barefoot Networks, dans le but de répondre rapidement aux besoins des utilisateurs de l'Hyperscale Cloud. Comme l’a déclaré Navin Shenoy (vice-président exécutif et directeur général du Data Center Group chez Intel Corporation) — cela permettra à Intel de fournir des charges de travail plus importantes et davantage de possibilités pour les clients des centres de données.

À mon avis, il ne faut pas oublier qu'Intel est un leader dans la production de puces FPGA et qu'elle dispose d'un excellent environnement Quartus. Ainsi, avec l'arrivée chez Intel, Barefoot bénéficiera non seulement d'une extension de sa gamme de production, mais aussi de mises à jour sérieuses pour Quartus et P4 Studio, ainsi que de l’introduction des lignes Toffino et Toffino 2.

Membre officiel de la communauté P4 — entreprise Facteur group.

Source : habr.com

Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS 🔥 Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster