Llenguatge de programació P4

Llenguatge de programació P4
P4 és un llenguatge de programació dissenyat per programar regles d'encaminament de paquets. A diferència d'un llenguatge de propòsit general com C o Python, P4 és un llenguatge específic del domini amb una sèrie de dissenys optimitzats per a l'encaminament de la xarxa.

P4 és un llenguatge de codi obert amb llicència i mantingut per una organització sense ànim de lucre anomenada P4 Language Consortium. També compta amb el suport de la Open Networking Foundation (ONF) i la Linux Foundation (LF), dues de les organitzacions paraigües més grans per a projectes de xarxes de codi obert.
El llenguatge es va encunyar originalment el 2013 i es va descriure en un document SIGCOMM CCR de 2014 titulat "Protocol Independent, Packet Routing Processor Programming".

Des dels seus inicis, P4 ha crescut i ha evolucionat de manera exponencial, convertint-se ràpidament en un estàndard per descriure la transmissió de paquets per dispositius de xarxa, inclosos adaptadors de xarxa, commutadors i encaminadors.

"SDN ha transformat la indústria de les xarxes i P4 porta SDN al següent nivell aportant la programabilitat a l'encaminament", va dir Guru Parulkar, director executiu de la Open Networking Foundation.

El llenguatge P4 va ser creat originalment per un grup d'enginyers i investigadors de Google, Intel, Microsoft Research, Barefoot, Princeton i Stanford. L'objectiu era senzill: crear un llenguatge fàcil d'utilitzar que un desenvolupador de programari pogués aprendre en un dia i utilitzar-lo per descriure amb precisió com s'envien els paquets a través de les xarxes.

Des del principi, P4 va ser dissenyat per ser independent de l'objectiu (és a dir, un programa escrit en P4 es podria compilar sense canvis per executar-se en una varietat d'objectius com ara ASIC, FPGA, CPU, NPU i GPU).

El llenguatge també és independent del protocol (és a dir, un programa P4 pot descriure protocols estàndard existents o utilitzar-se per especificar nous modes d'adreçament personalitzats).

A la indústria, P4 s'utilitza per a la programació de dispositius. Potser en el futur els estàndards Internet-RFC i IEEE també inclouran l'especificació P4.

P4 es pot utilitzar tant per a dispositius programables com per a dispositius de funció fixa. Per exemple, s'utilitza per registrar amb precisió el comportament de la canalització de commutació a les API de la interfície d'abstracció de commutació (SAI) utilitzades pel sistema operatiu de commutació SONiC de codi obert. P4 també s'utilitza al projecte ONF Stratum per descriure el comportament de commutació en una varietat de dispositius fixos i programables.

Per primera vegada, la descripció del comportament del commutador i dels adaptadors de xarxa us permet crear un model executable precís de tota la xarxa abans del desplegament. Els grans proveïdors de núvol poden provar i depurar la xarxa completament mitjançant programari, reduint significativament el temps i el cost de les proves d'interoperabilitat al laboratori sense requerir maquinari car.

Mitjançant l'ús de P4, els venedors d'equips de xarxa poden esperar un comportament d'encaminament subjacent comú a tots els productes, permetent la reutilització de la infraestructura de prova, simplificant el desenvolupament de programari de gestió i, en definitiva, assegurant la interoperabilitat.

Per descomptat, P4 es pot utilitzar per escriure programes que descriguin maneres completament noves d'encaminament. Per exemple, P4 s'utilitza àmpliament per a telemetria i mesures en centres de dades, empreses i xarxes de proveïdors de serveis.

La comunitat investigadora també s'ha intensificat. Diversos grups de recerca acadèmics líders en xarxes han publicat noves aplicacions interessants basades en programes P4, com ara l'equilibri de càrrega, els protocols de consens i la memòria cau del valor clau. S'està creant un nou paradigma de programació, la innovació passa del maquinari al programari, permetent que sorgeixin moltes idees inesperades, noves i enginyoses.

La comunitat de desenvolupadors ha fet contribucions importants al desenvolupament de codi, inclosos compiladors, pipelines, models de comportament, API, marcs de prova, aplicacions i molt més. Empreses com Alibaba, AT&T, Barefoot, Cisco, Fox Networks, Google, Intel, IXIA, Juniper Networks, Mellanox, Microsoft, Netcope, Netronome, VMware, Xilinx i ZTE tenen desenvolupadors dedicats; d'universitats com BUPT, Cornell, Harvard, MIT, NCTU, Princeton, Stanford, Technion, Tsinghua, UMass i USI; i projectes de codi obert com CORD, FD.io, OpenDaylight, ONOS, OvS, SAI i Stratum destaquen el fet que P4 és un projecte comunitari independent.

Generació típica de controladors per al llenguatge P4:

Llenguatge de programació P4

Perspectives d'aplicació

Llenguatge de programació P4
Com que el llenguatge està pensat per a aplicacions d'encaminament, la llista de requisits i opcions de disseny és diferent en comparació amb els llenguatges de programació de propòsit general. Les principals característiques de la llengua són:

  1. Independència de la implementació de l'objectiu;
  2. Independència del(s) protocol(s) utilitzat(s);
  3. Reconfigurabilitat de camp.

Independència de la implementació de l'objectiu

Els programes P4 estan dissenyats per ser independents de la implementació, el que significa que es poden compilar per a molts tipus diferents de motors d'execució, com ara processadors de propòsit general, FPGA, sistema en xips, processadors de xarxa i ASIC. Aquests diferents tipus de màquines es coneixen com a objectius P4, i cada objectiu requereix un compilador per convertir el codi font P4 en un model de commutació de destinació. El compilador es pot incorporar al dispositiu de destinació, programari extern o fins i tot un servei al núvol. Com que molts dels objectius originals dels programes P4 eren per a la simple commutació de paquets, és molt comú escoltar el terme "canvi P4" tot i que "objectiu P4" és més precís.

Independència del(s) protocol(s) utilitzat(s).

P4 és independent del protocol. Això vol dir que l'idioma no té suport natiu per a protocols comuns com IP, Ethernet, TCP, VxLAN o MPLS. En canvi, el programador P4 descriu els formats de capçalera i els noms de camp dels protocols requerits al programa, que al seu torn són interpretats i processats pel programa compilat i el dispositiu de destinació.

Reconfigurabilitat de camp

La independència del protocol i el model de llenguatge abstracte permeten la reconfigurabilitat: els objectius P4 haurien de poder canviar el processament de paquets després de desplegar el sistema. Aquesta capacitat s'ha associat tradicionalment amb l'encaminament mitjançant processadors de propòsit general o processadors de xarxa en lloc de circuits integrats de funció fixa.

Tot i que no hi ha res en el llenguatge que impedeixi l'optimització del rendiment d'un conjunt concret de protocols, aquestes optimitzacions són invisibles per a l'autor del llenguatge i, en última instància, poden reduir la flexibilitat del sistema i els objectius i la seva reconfiguració.

Aquestes característiques de l'idioma les van establir inicialment els seus creadors, centrant-se en el seu ús generalitzat a la infraestructura de xarxa.

El llenguatge ja s'utilitza en moltes empreses:

1) Centres de dades d'hiperescala;

L'empresa xinesa Tencent és la companyia d'inversió més gran del món i una de les empreses de capital risc més grans. Les filials de Tencent, tant a la Xina com en altres països del món, s'especialitzen en diverses àrees del negoci d'alta tecnologia, com ara diversos serveis d'Internet, desenvolupaments en el camp de la intel·ligència artificial i l'entreteniment electrònic.

P4 i l'encaminament programable són tecnologies avançades que s'utilitzen en l'arquitectura de xarxa de l'empresa.

Com a un dels creadors, Google s'enorgulleix de constatar la ràpida adopció de P4 a la indústria de les xarxes i en particular al disseny arquitectònic de centres de dades.

2) Societats mercantils;

Goldman Sachs aprofita el treball amb la comunitat de codi obert i desenvolupa estàndards i solucions comunes per innovar la infraestructura de xarxa i oferir millors solucions als clients.

3) Producció;

Tota la indústria de les xarxes es beneficiaria d'un llenguatge com P4 que defineix de manera única el comportament de reenviament. Cisco també creu en transferir les seves línies de productes per utilitzar aquest llenguatge.

Juniper Networks ha inclòs P4 i P4 Runtime en diversos productes i proporciona accés programàtic al processador incrustat Juniper i al seu codi de programari.

Ruijie Networks és un gran defensor de P4 i dels beneficis que aporta a les xarxes. Amb P4, l'empresa pot crear i oferir les millors solucions de la seva classe a una àmplia gamma de clients.

4) Proveïdors de telecomunicacions;

AT&T va ser un dels primers adoptants de P4, un dels primers a utilitzar P4 per definir el comportament que volia veure a les seves xarxes i a utilitzar dispositius de reenviament programables P4 a la seva xarxa.

A Deutsche Telekom, l'idioma s'utilitza per crear prototips de funcions clau de xarxa com a part del programa Access 4.0.

5) Indústria de semiconductors;

El llenguatge va permetre a Barefoot implementar un nou paradigma per oferir capacitats de programari al pla d'encaminament de la xarxa.

Xilinx va ser un dels fundadors de P4.org i va participar activament en el desenvolupament del llenguatge P4 i el va implementar en plataformes programables basades en FPGA per a maquinari SmartNIC i NFV, llançant un dels primers compiladors P416 com a part del disseny SDNet.

6) Programari.

VMware creu que P4 crea una gran energia, innovació i comunitat que impulsa una transformació significativa i necessària a la xarxa. VMware ha format part d'aquest moviment de la indústria des del principi, ja que una nova onada d'innovació està impulsada per enfocaments basats en programari que amplien les capacitats d'infraestructura i les implementen en els productes més recents.

Així, P4 és un llenguatge de programació independent de l'objectiu i del protocol que s'utilitza per la indústria i l'acadèmia per definir de manera única el comportament d'encaminament de paquets com a programa, que al seu torn es pot compilar per a diversos objectius. Avui, els objectius inclouen commutadors de maquinari i programari, commutadors d'hipervisor, NPU, GPU, FPGA, SmartNIC i ASIC.

Les principals característiques del llenguatge amplien significativament l'abast de la seva aplicació i garanteixen la seva ràpida implementació en arquitectures de xarxa.

Per on començar

P4 és un projecte obert, tota la informació rellevant es troba al web P4.org

Enllaç al repositori https://github.com/p4lang, on podeu obtenir exemples de codi font i tutorials.

Connectar per a Eclipse amb suport P4, però podem recomanar Estudi P4 de Descalç.

Llenguatge de programació P4

Vegem les principals abstraccions del nucli:

Definició de capçaleres — amb la seva ajuda, es determinen les capçaleres de protocol.

La definició de la capçalera especifica:

  • descripció dels formats de paquets i noms de camps de capçalera
  • camps permesos fixos i variables

Per exemple

header Ethernet_h{
    bit<48>  dstAddr;
    bit<48>  srcAddr;
    bit<16>  etherType;
}

header IPv4_h{
    bit<4>  version;
    bit<4>  ihl;
    bit<8>  diffserv;
    bit<16>  totalLen;
    bit<16>  identification;
    bit<3>  flags;
    bit<13>  fragOffset;
    bit<8>  ttl;
    bit<8>  protocol;
    bit<16>  hdrChecksum;
    bit<32>  srcAddr;
    bit<32>  dstAddr;
    varbit<320>  options;
}

Analitzadors — la seva tasca és analitzar els titulars.

L'exemple d'analitzador següent determinarà la transició de l'estat final de la màquina d'un estat inicial a un dels dos estats finals:

Llenguatge de programació P4

parser MyParser(){
 state  start{transition parse_ethernet;}
 state  parse_ethernet{
    packet.extract(hdr.ethernet);
    transition select(hdr.ethernet.etherType){
        TYPE_IPV4: parse_ipv4;
        default: accept;
        }
    }…
}

Taules — conté estats de la màquina que enllaçen les claus d'usuari amb accions. Activitat — una descripció de com s'ha de manipular el paquet.

Les taules contenen estats (definits a nivell de gestió) per al reenviament de paquets, descriuen la unitat Match-Action

Els paquets coincideixen amb:

  • Coincidència exacta
  • Coincidència de prefix més llarga (LPM)
  • Concordança triple (emmascarament)

table ipv4_lpm{
    reads{
        ipv4.dstAddr: lpm;
    } actions {
        forward();
    }
}

Totes les accions possibles s'han de definir prèviament en taules.

Les accions consisteixen en codi i dades. Les dades provenen del nivell de gestió (per exemple, adreces IP/números de port). Certes primitives sense bucle es poden especificar directament a l'acció, però el nombre d'instruccions ha de ser previsible. Per tant, les accions no poden contenir cap bucle ni declaracions condicionals.

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;
}

Mòduls Match-Action — accions per crear una clau de cerca, cercar en una taula, realitzar accions.

A la figura es mostra un exemple típic de mòdul:

Llenguatge de programació P4

Control de flux — indica l'ordre en què s'utilitzen els mòduls Match-Action. Aquest és un programa imperatiu que defineix la lògica d'alt nivell i la seqüència de Match-Action. El flux de control enllaça tots els objectes mitjançant la definició del nivell de control.

Objectes externs són objectes específics amb una arquitectura clarament definida i interfícies API. Per exemple, càlcul de suma de control, registres, comptadors, comptadors, etc.

extern register{
    register(bit<32> size);
    void read(out T result, in bit<32> index);
    void write(in bit<32> index, in T value);
}

extern Checksum16{
  Checksum16();    //constructor
  void clear();    //prepare unit for computation
  void update(in T data);    //add data to checksum
  void remove(in T data);  /remove data from existing checksum
  bit<16> get(); //get the checksum for the data added since last clear
}

Metadades — estructures de dades associades a cada paquet.

Hi ha 2 tipus de metadades:

  Metadades personalitzades (estructura buida per a tots els paquets)
    Aquí pots posar el que vulguis
    Disponible a tot el gasoducte
    convenient per utilitzar-lo amb els vostres propis propòsits, per exemple, per emmagatzemar un hash de paquet

  Metadades internes - proporcionades per l'arquitectura
    Aquí es defineixen el port d'entrada i el port de sortida
    Marca de temps quan el paquet es va posar a la cua, profunditat de la cua
    multicast hash / multicast cua
    Prioritat del paquet, importància del paquet
    Especificació del port de sortida (p. ex., cua de sortida)

Compilador P4

El compilador P4 (P4C) genera:

  1. Temps d'execució del pla de dades
  2. API per gestionar l'estat de la màquina al pla de dades

Llenguatge de programació P4

Exemple d'un interruptor de programari en llenguatge P4

Els codis font es poden descarregar des del repositori.

p4lang/p4c-bm: crea una configuració JSON per a bmv2
p4lang/bmv2: un commutador de programari que entén les configuracions JSON de la versió bmv2

La figura mostra el diagrama de compilació del projecte:

Llenguatge de programació P4

Manipulacions amb taules, registres de lectura, comptadors:

  • table_set_default <table name> <action name> <action parameters>
  • table_add <table name> <action name> <match fields> => <action
    parameters> [priority]
  • table_delete <table name> <entry handle>


El codi font conté el programa simple_switch_CLI per a un ús còmode de l'API del commutador de programari.

Podeu descarregar aquest i altres exemples des del repositori.

Llenguatge de programació P4

PS A principis d'aquest estiu, Intel va signar un acord per adquirir Barefoot Networks en un esforç per satisfer ràpidament les necessitats dels usuaris de Hyperscale Cloud. Tal com va dir Navin Shenoy (vicepresident executiu i director general del Data Center Group d'Intel Corporation), això permetrà a Intel oferir càrregues de treball més grans i més oportunitats per als clients del centre de dades.

En la meva opinió personal, no hem d'oblidar que Intel és líder en la producció de xips FPGA i té un excel·lent entorn Quartus. Això vol dir que podem esperar que amb l'arribada d'Intel, Barefoot no només ampliarà la seva línia de productes, sinó que també Quartus i P4 Studio rebran actualitzacions i addicions serioses a la línia Toffino i Toffino 2.

Membre oficial de la comunitat P4 - empresa Grup de factors.

Font: www.habr.com

Afegeix comentari