lingua di prugrammazione P4

lingua di prugrammazione P4
P4 hè una lingua di prugrammazione pensata per programà e regule di routing di pacchetti. A cuntrariu di una lingua per u scopu generale cum'è C o Python, P4 hè una lingua specifica di u duminiu cù una quantità di disinni ottimizzati per a routing di a rete.

P4 hè una lingua open source licenziata è mantinuta da una urganizazione senza prufittu chjamata P4 Language Consortium. Hè ancu sustinutu da a Open Networking Foundation (ONF) è a Linux Foundation (LF), duie di e più grandi organizzazioni parapluie per i prughjetti di rete open source.
A lingua hè stata creata in u 2013 è descritta in un documentu SIGCOMM CCR 2014 intitulatu "Protocol Independent, Packet Routing Processor Programming".

Dapoi u so principiu, P4 hè cresciutu è evulutu in modu esponenziale, diventendu rapidamente un standard per a descrizzione di a trasmissione di pacchetti da i dispositi di rete, cumpresi adattatori di rete, switches è routers.

"SDN hà trasfurmatu l'industria di a rete, è P4 porta SDN à u prossimu livellu purtendu a prugrammabilità à u routing", hà dettu Guru Parulkar, direttore esecutivu di Open Networking Foundation.

A lingua P4 hè stata creata in origine da un gruppu di ingegneri è circadori di Google, Intel, Microsoft Research, Barefoot, Princeton è Stanford. U scopu era simplice: creà una lingua faciule d'utilizà chì un sviluppatore di software puderia amparà in un ghjornu è aduprà per descriverà accuratamente cumu i pacchetti sò mandati in e rete.

Da u principiu, P4 hè statu cuncepitu per esse indipindente di destinazione (vale à dì, un prugramma scrittu in P4 puderia esse cumpilatu senza cambià per eseguisce nantu à una varietà di miri cum'è ASIC, FPGA, CPU, NPU è GPU).

A lingua hè ancu indipendente di u protokollu (vale à dì, un prugramma P4 pò discrive i protokolli standard esistenti o esse usatu per specificà novi modi d'indirizzu persunalizati).

In l'industria, P4 hè utilizatu per a prugrammazione di u dispositivu. Forsi in u futuru Internet-RFC è i normi IEEE includeranu ancu a specificazione P4.

P4 pò esse aduprata sia per i dispositi di funzioni programmabili sia fissi. Per esempiu, hè utilizatu per registrà accuratamente u cumpurtamentu di u pipeline di switch in l'API Switch Abstraction Interface (SAI) aduprate da u SO di switch SONiC open source. P4 hè ancu utilizatu in u prughjettu ONF Stratum per descriverà u cumpurtamentu di cambià in una varietà di dispusitivi fissi è programabili.

Per a prima volta, a descrizzione di u cumpurtamentu di u cambiamentu è l'adattatori di rete permette di creà un mudellu eseguibile precisu di a reta sana prima di implementazione. I grandi fornitori di nuvola ponu pruvà è debug a rete interamente utilizendu software, riducendu significativamente u tempu è u costu di teste di interoperabilità in u laboratoriu senza bisognu di hardware caru.

Utilizendu P4, i venditori di l'equipaggiu di rete ponu aspittà un comportamentu di routing sottostanti cumuni in tutti i prudutti, chì permette a reutilizazione di l'infrastruttura di prova, simplificendu u sviluppu di software di gestione è, infine, assicurendu l'interoperabilità.

Di sicuru, P4 pò esse usatu per scrive prugrammi chì descrizanu modi completamente novi di routing. Per esempiu, P4 hè largamente utilizatu per a telemetria è e misurazioni in i centri di dati, l'impresa è e rete di fornitori di serviziu.

A cumunità di ricerca hà ancu intensificatu. Diversi gruppi di ricerca di rete accademichi di punta anu publicatu applicazioni novi eccitanti basati nantu à i prugrammi P4, cumpresi l'equilibriu di carica, i protokolli di cunsensu è u caching di valore chjave. Un novu paradigma di prugrammazione hè creatu, l'innuvazione si move da u hardware à u software, chì permette à parechje idee inaspettate, novi è ingegnose.

A cumunità di sviluppatori hà fattu cuntributi significativi à u sviluppu di codice, cumpresi compilatori, pipelines, mudelli di cumportamentu, API, frameworks di teste, applicazioni è più. Cumpagnia cum'è Alibaba, AT&T, Barefoot, Cisco, Fox Networks, Google, Intel, IXIA, Juniper Networks, Mellanox, Microsoft, Netcope, Netronome, VMware, Xilinx, è ZTE anu sviluppatu dedicatu; da università cumpresi BUPT, Cornell, Harvard, MIT, NCTU, Princeton, Stanford, Technion, Tsinghua, UMass, è USI; è prughjetti open source cumpresi CORD, FD.io, OpenDaylight, ONOS, OvS, SAI è Stratum evidenzianu u fattu chì P4 hè un prughjettu di a cumunità indipendente.

Generazione tipica di cuntrolli per a lingua P4:

lingua di prugrammazione P4

Perspettivi di l'applicazione

lingua di prugrammazione P4
Siccomu a lingua hè destinata à l'applicazioni di routing, a lista di i requisiti è l'opzioni di cuncepimentu hè diversu cumparatu cù e lingue di prugrammazione generale. E caratteristiche principali di a lingua sò:

  1. Indipendenza da l'implementazione di destinazione;
  2. Indipendenza di u protocolu (s) utilizatu;
  3. Reconfigurabilità di u campu.

Indipendenza da l'implementazione di destinazione

I prugrammi P4 sò pensati per esse l'implementazione indipendenti, vale à dì chì ponu esse compilati per parechji tipi di mutori di esecutivu, cum'è processori di u scopu generale, FPGA, sistema-on-chips, processori di rete è ASIC. Sti sfarenti tippi di machini sò cunnisciuti cum'è P4 targets, è ogni target richiede un compilatore per cunvertisce u codice fonte P4 in un mudellu di switch target. U compilatore pò esse integratu in u dispositivu di destinazione, u software esternu, o ancu un serviziu di nuvola. Perchè assai di l'ughjetti originali per i prugrammi P4 eranu per un cambiamentu di pacchettu simplice, hè assai cumuni per sente u terminu "P4 switch" ancu s'ellu "P4 target" hè più precisu.

Indipendenza di u protocolu (s) utilizatu

P4 hè un protocolu indipendente. Questu significa chì a lingua ùn hà micca supportu nativu per protokolli cumuni cum'è IP, Ethernet, TCP, VxLAN o MPLS. Invece, u programatore P4 descrive i formati di l'intestazione è i nomi di campu di i protokolli richiesti in u prugramma, chì à u turnu sò interpretati è processati da u prugramma compilatu è u dispusitivu di destinazione.

Reconfigurabilità di u campu

L'indipendenza di u protokollu è u mudellu di lingua astratta permette a ricunfigurabilità - i miri P4 anu da pudè cambià l'elaborazione di pacchetti dopu chì u sistema hè implementatu. Questa capacità hè stata tradizionalmente assuciata à u routing attraversu processori di u scopu generale o processori di rete invece di circuiti integrati di funzione fissa.

Ancu s'ellu ùn ci hè nunda in a lingua chì impedisce l'ottimisazione di u funziunamentu di un inseme particulari di protokolli, sti ottimisazioni sò invisibili à l'autore di a lingua è ponu ultimamente riduce a flessibilità di u sistema è i scopi è a so reconfigurabilità.

Queste caratteristiche di a lingua sò state inizialmente stabilite da i so creatori cun un focusu nantu à u so usu generalizatu in l'infrastruttura di rete.

A lingua hè digià usata in parechje cumpagnie:

1) centri di dati Hyperscale;

A cumpagnia chinesa Tencent hè a più grande sucietà d'investimentu in u mondu è una di e più grandi imprese di capitale di venture. I filiali di Tencent, sia in Cina sia in altri paesi di u mondu, sò spicializati in parechji spazii di l'affari high-tech, cumpresi diversi servizii Internet, sviluppi in u campu di l'intelligenza artificiale è l'intrattenimentu elettronicu.

P4 è u routing programmable sò tecnulugii avanzati chì sò usati in l'architettura di rete di a cumpagnia.

Cum'è unu di l'uriginatori, Google hè fieru di nutà a rapida adopzione di P4 in l'industria di a rete è in particulare in u disignu architettonicu di u centru di dati.

2) Cumpagnia cummerciale;

Goldman Sachs prufittà di travaglià cù a cumunità open source è di sviluppà standard è suluzioni cumuni per innuvà l'infrastruttura di rete è furnisce soluzioni megliu per i clienti.

3) Pruduzzione;

L'intera industria di a rete prufittà di una lingua cum'è P4 chì definisce unicu cumportamentu di spedizione. Cisco crede ancu in u trasferimentu di e so linee di prudutti per aduprà sta lingua.

Juniper Networks hà inclusu P4 è P4 Runtime in una quantità di prudutti, è furnisce l'accessu programmaticu à u processatore integratu Juniper è u so codice software.

Ruijie Networks hè un forte sustegnu di P4 è di i benefici chì porta à e rete. Cù P4, a cumpagnia pò creà è furnisce i migliori suluzioni di a classe à una larga gamma di clienti.

4) Prestatori di telecomunicazioni;

AT&T era un primu aduttatu di P4, unu di i primi à utilizà P4 per definisce u cumpurtamentu chì vulia vede in e so rete, è per utilizà i dispositi di trasmissioni programabili P4 in a so reta.

In Deutsche Telekom, a lingua hè aduprata per prototipà e funzioni chjave di a rete cum'è parte di u prugramma Access 4.0.

5) industria semiconductor;

A lingua hà permessu à Barefoot di implementà un novu paradigma per furnisce capacità di software à u pianu di routing di a rete.

Xilinx hè statu unu di i fundatori di P4.org è hà participatu attivamente à u sviluppu di a lingua P4 è l'hà implementatu in e plataforme programabili basate in FPGA per u hardware SmartNIC è NFV, liberendu unu di i primi compilatori P416 cum'è parte di u disignu SDNet.

6) Software.

VMware crede chì P4 crea una tremenda energia, innovazione è cumunità chì guidanu una trasfurmazioni significativa è necessaria in a reta. VMware hà fattu parte di stu muvimentu di l'industria da u principiu, cum'è una nova onda d'innuvazione hè guidata da approcci basati in software chì estendenu e capacità di l'infrastruttura è l'implementanu in l'ultimi prudutti.

Cusì, P4 hè un linguaghju di prugrammazione indipendente da u protokollu è da u protokollu chì hè utilizatu da l'industria è l'accademia per definisce unicu cumportamentu di routing di pacchetti cum'è un prugramma, chì à u turnu pò esse cumpilatu per parechje miri. Oghje, i miri includenu switch hardware è software, switch hypervisor, NPU, GPU, FPGA, SmartNIC è ASIC.

E caratteristiche principali di a lingua allarganu significativamente u scopu di a so applicazione è assicuranu a so implementazione rapida in architetture di rete.

Getting Started

P4 hè un prughjettu apertu, tutte l'infurmazioni pertinenti sò nantu à u situ web P4.org

Ligame di repository https://github.com/p4lang, induve pudete uttene esempi di codice fonte è tutoriali.

Cunnettà si per Eclipse cù supportu P4, ma pudemu ricumandemu P4 Studio da Barefoot.

lingua di prugrammazione P4

Fighjemu l'astrazioni principali di u kernel:

Definizione di intestazioni - cù u so aiutu, i capi di protokollu sò determinati.

A definizione di l'intestazione specifica:

  • descrizzione di formati di pacchetti è nomi di campi di l'intestazione
  • campi permessi fissi è variabili

Per esempiu

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

Parsers - u so compitu hè di analizà i tituli.

L'esempiu di parser seguente determinarà a transizione di u statu finali di a macchina da un statu iniziale à unu di dui stati finali:

lingua di prugrammazione 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;
        }
    }…
}

Tabelli - cuntene stati di a macchina chì liganu e chjave di l'utilizatori cù l'azzioni. Actions - una descrizzione di cumu u pacchettu deve esse manipulatu.

I tavulini cuntenenu stati (definiti à u livellu di gestione) per l'invio di pacchetti, descrizanu l'unità Match-Action

I pacchetti sò assuciati da:

  • Partita esatta
  • A più longa corrispondenza di prefissu (LPM)
  • Triple matching (masking)

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

Tutte l'azzioni pussibuli devenu esse definite in tavule in anticipu.

L'azzioni sò custituiti da codice è dati. I dati venenu da u livellu di gestione (per esempiu, indirizzi IP / numeri di portu). Certi primitivi senza loop ponu esse specificati direttamente in l'azzione, ma u numeru di struzzioni deve esse prevedibile. Per quessa, l'azzioni ùn ponu cuntene alcunu loops o dichjarazioni cundiziunali.

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

Moduli Match-Action - azzioni per creà una chjave di ricerca, ricerca in una tavula, eseguisce azzioni.

Un esempiu tipicu di un modulu hè mostratu in a figura:

lingua di prugrammazione P4

Cuntrolla u flussu - indica l'ordine in quale i moduli Match-Action sò usati. Questu hè un prugramma imperativu chì definisce a logica d'altu livellu è a sequenza Match-Action. U flussu di cuntrollu liga tutti l'uggetti definendu u livellu di cuntrollu.

Oggetti esterni sò oggetti specifichi cù una architettura chjaramente definita è interfacce API. Per esempiu, calculu di checksum, registri, cuntatori, cuntatori, 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
}

Metadata - strutture di dati assuciati cù ogni pacchettu.

Ci hè 2 tipi di metadata:

  Metadati persunalizati (struttura viota per tutti i pacchetti)
    Pudete mette tuttu ciò chì vulete quì
    Disponibile in tuttu u pipeline
    cunvene per aduprà per u vostru propiu propiu, per esempiu, per almacenà un pacchettu hash

  Metadata interna - furnita da l'architettura
    U portu di input, u portu di output sò definiti quì
    Timestamp quandu u pacchettu era in fila, a prufundità di a fila
    multicast hash / multicast queue
    Priorità di u pacchettu, impurtanza di u pacchettu
    Specificazione di u portu di output (per esempiu, fila di output)

compilatore P4

U compilatore P4 (P4C) genera:

  1. Runtime di u pianu di dati
  2. API per a gestione di u statu di a macchina in u pianu di dati

lingua di prugrammazione P4

Esempiu di un cambiamentu di software in lingua P4

I codici surghjenti ponu esse scaricati da u repository.

p4lang/p4c-bm: crea una cunfigurazione JSON per bmv2
p4lang/bmv2: un cambiatore di software chì capisce e cunfigurazioni JSON di a versione bmv2

A figura mostra u schema di compilazione di u prugettu:

lingua di prugrammazione P4

Manipulazioni cù tavule, registri di lettura, cuntatori:

  • 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>


U codice fonte cuntene u prugramma simple_switch_CLI per un usu còmuda di l'API di switch software.

Pudete scaricà questu è altri esempi da u repository.

lingua di prugrammazione P4

PS A principiu di l'estiu, Intel hà firmatu un accordu per acquistà Barefoot Networks in un sforzu di risponde rapidamente à i bisogni di l'utilizatori di Hyperscale Cloud. Comu Navin Shenoy (vicepresidente esecutivu è direttore generale di u Gruppu di Data Center in Intel Corporation) hà dettu, questu permetterà à Intel di furnisce carichi di travagliu più grande è più opportunità per i clienti di u centru di dati.

In u mo parè persunale, ùn devemu micca scurdatu chì Intel hè un capu in a produzzione di chips FPGA è hà un ambiente Quartus eccellente. Questu significa chì pudemu aspittà chì cù l'arrivu di Intel, Barefoot ùn solu espansione a so linea di produttu, ma ancu Quartus è P4 Studio riceveranu aghjurnamenti seri è aghjurnamenti à a linea Toffino è Toffino 2.

Membru ufficiale di a cumunità P4 - cumpagnia gruppu di fattori.

Source: www.habr.com

Add a comment