P4 programmeertaal

P4 programmeertaal
P4 is 'n programmeertaal vir die programmering van pakketroeteerreëls. Anders as 'n algemene doeltaal soos C of Python, is P4 'n domeinspesifieke taal met 'n aantal konstrukte wat geoptimaliseer is vir netwerkroetering.

P4 is 'n oopbrontaal wat gelisensieer en onderhou word deur 'n nie-winsgewende organisasie genaamd die P4 Taalkonsortium. Dit word ook ondersteun deur die Open Networking Foundation (ONF) en die Linux Foundation (LF), twee van die grootste sambreelorganisasies vir oopbronnetwerkprojekte.
Die taal is oorspronklik in 2013 geskep en in 2014 beskryf in 'n SIGCOMM CCR-dokument getiteld "Protocol Independent Packet Routing Processor Programming".

Sedert sy ontstaan ​​het P4 eksponensieel gegroei en ontwikkel en vinnig die standaard geword vir die beskrywing van die oordrag van pakkies deur netwerktoestelle, insluitend netwerkadapters, skakelaars en routers.

"SDN het die netwerkbedryf getransformeer, en P4 neem SDN na die volgende vlak deur programmeerbaarheid in roetering moontlik te maak," het Guru Parulkar, Uitvoerende Direkteur van die Open Networking Foundation, gesê.

Die P4-taal is oorspronklik geskep deur 'n groep ingenieurs en navorsers van Google, Intel, Microsoft Research, Barefoot, Princeton en Stanford. Die doel was eenvoudig: om 'n maklik-om-te-gebruik taal te skep wat 'n sagteware-ontwikkelaar in 'n dag kan aanleer en gebruik om presies te beskryf hoe pakkies oor die netwerk gestuur word.

Van die begin af is P4 ontwerp om teikenonafhanklik te wees (d.w.s. 'n program wat in P4 geskryf is, kan sonder verandering saamgestel word om op verskillende teikens soos ASIC's, FPGA's, SVE's, NPU's en GPU's te loop).

Die taal is ook protokol-onafhanklik (dws die P4-program kan bestaande standaardprotokolle beskryf of gebruik word om nuwe pasgemaakte adresseringsmodusse te spesifiseer).

In die industrie word P4 vir toestelprogrammering gebruik. Miskien in die toekoms sal Internet-RFC's en die IEEE-standaarde ook die P4-spesifikasie insluit.

P4 kan gebruik word vir beide programmeerbare en vaste funksie toestelle. Dit word byvoorbeeld gebruik om die gedrag van 'n skakelaarpyplyn akkuraat vas te lê in die Switch Abstraction Interface (SAI) API's wat deur die oopbron SONiC Switch OS gebruik word. P4 word ook in die ONF Stratum-projek gebruik om skakelgedrag oor 'n verskeidenheid vaste en programmeerbare toestelle te beskryf.

Deur die gedrag van die skakelaar en netwerkadapters vir die eerste keer te beskryf, kan jy 'n akkurate uitvoerbare model van die hele netwerk skep voor ontplooiing. Groot wolkverskaffers kan die netwerk volledig toets en ontfout deur sagteware, wat die tyd en koste van interoperabiliteitstoetsing in die laboratorium aansienlik verminder sonder om duur hardeware te benodig.

Met P4 kan verskaffers van netwerktoerusting staatmaak op 'n gemeenskaplike onderliggende roeteringgedrag oor alle produkte, wat die hergebruik van toetsinfrastruktuur moontlik maak, die ontwikkeling van bestuursagteware vereenvoudig en uiteindelik interoperabiliteit verseker.

Natuurlik kan P4 gebruik word om programme te skryf wat heeltemal nuwe maniere van roetering beskryf. P4 word byvoorbeeld wyd gebruik vir telemetrie en metings in datasentrums, ondernemings en diensverskaffernetwerke.

Die navorsingsgemeenskap het ook aktief geraak. Verskeie toonaangewende navorsingsgroepe vir akademiese netwerke het interessante nuwe toepassings gepubliseer wat op P4-programme gebaseer is, insluitend lasbalansering, onderhandelde protokolle en sleutelwaardekas. 'n Nuwe programmeringsparadigma word geskep, innovasie beweeg van hardeware na sagteware, wat voorsiening maak vir baie onverwagte, nuwe en briljante idees.

Die ontwikkelaargemeenskap het beduidende bydraes tot kode-ontwikkeling gelewer, insluitend samestellers, pyplyne, gedragsmodelle, API's, toetsraamwerke, toepassings, en meer. Daar is toegewyde ontwikkelaars by maatskappye soos Alibaba, AT&T, Barefoot, Cisco, Fox Networks, Google, Intel, IXIA, Juniper Networks, Mellanox, Microsoft, Netcope, Netronome, VMware, Xilinx en ZTE; van universiteite insluitend BUPT, Cornell, Harvard, MIT, NCTU, Princeton, Stanford, Technion, Tsinghua, UMass en USI; en oopbronprojekte insluitend CORD, FD.io, OpenDaylight, ONOS, OvS, SAI en Stratum beklemtoon die feit dat P4 'n onafhanklike gemeenskapsprojek is.

Tipiese generering van beheerders vir die P4-taal:

P4 programmeertaal

Toepassingsvooruitsigte

P4 programmeertaal
Aangesien die taal bedoel is om toepassings te stuur, is die lys vereistes en ontwerpopsies anders in vergelyking met algemene programmeertale. Die hoofkenmerke van die taal is:

  1. Onafhanklikheid van die teikenimplementering;
  2. Onafhanklikheid van die protokol(te) wat gebruik word;
  3. Veld herkonfigureerbaarheid.

Onafhanklikheid van teikenimplementering

P4-programme is ontwerp om implementering onafhanklik te wees, wat beteken dat hulle saamgestel kan word vir baie verskillende tipes uitvoeringsmasjiene soos algemene doelverwerkers, FPGA's, stelsels op 'n skyfie, netwerkverwerkers en ASIC's. Hierdie verskillende tipes masjiene staan ​​bekend as P4-teikens, en elke teiken vereis 'n samesteller om die P4-bronkode in 'n teikenskakelaarmodel om te skakel. Die samesteller kan in die teikentoestel, eksterne sagteware of selfs 'n wolkdiens ingebou word. Omdat baie van die oorspronklike teikens vir P4-programme gebruik is vir eenvoudige pakkieskakeling, is dit baie algemeen om die term "P4-skakelaar" te hoor, al is "P4-teiken" meer akkuraat.

Onafhanklikheid van die protokol(te) wat gebruik word

P4 is protokol onafhanklik. Dit beteken dat die taal nie ingeboude ondersteuning het vir algemene protokolle soos IP, Ethernet, TCP, VxLAN of MPLS nie. In plaas daarvan beskryf die P4-programmeerder die kopformate en veldname van die vereiste protokolle in die program, wat weer deur die saamgestelde program en die teikentoestel geïnterpreteer en verwerk word.

Veld herkonfigureerbaarheid

Die protokol-onafhanklikheid en abstrakte taalmodel maak voorsiening vir herkonfigureerbaarheid - P4-teikens behoort pakketverwerking te kan verander nadat die stelsel ontplooi is. Hierdie vermoë is tradisioneel geassosieer met roetering deur algemene doelverwerkers of netwerkverwerkers eerder as vaste funksie geïntegreerde stroombane.

Alhoewel daar niks in die taal is wat die optimalisering van 'n sekere stel protokolle sal verhoed nie, is hierdie optimalisering onsigbaar vir die skrywer van die taal en kan dit uiteindelik die buigsaamheid van die stelsel en doelwitte en hul herkonfigureerbaarheid verminder.

Hierdie kenmerke van die taal is oorspronklik deur sy skeppers neergelê met die fokus op die wydverspreide gebruik daarvan in die netwerkinfrastruktuur.

Die taal word reeds in baie maatskappye gebruik:

1) Hiperskaal datasentrums;

Die Chinese maatskappy Tencent is die grootste beleggingsmaatskappy ter wêreld en een van die grootste waagkapitaalmaatskappye. Tencent se filiale, beide in China en regoor die wêreld, spesialiseer in verskeie areas van hoëtegnologie-besigheid, insluitend verskeie internetdienste, kunsmatige intelligensie-ontwikkelings en elektroniese vermaak.

P4 en programmeerbare roetering is gevorderde tegnologieë wat in die maatskappy se netwerkargitektuur gebruik word.

As een van die skeppers, is Google trots om die vinnige aanvaarding van P4 in die netwerkbedryf en veral op die gebied van datasentrumargitektuur te vier.

2) Kommersiële maatskappye;

Deur voordeel te trek uit die oopbrongemeenskap en die ontwikkeling van algemene standaarde en oplossings, bring Goldman Sachs reeds innovasie na netwerkinfrastruktuur en lewer die beste oplossings vir kliënte.

3) Produksie;

Die hele netwerkbedryf sal baat vind by 'n taal soos P4 wat aanstuurgedrag ondubbelsinnig definieer. Hulle oorweeg ook Cisco om hul produklyne oor te dra om hierdie taal te gebruik.

Juniper Networks het P4 en P4 Runtime by 'n reeks produkte ingesluit, en bied programmatiese toegang tot Juniper se ingebedde verwerker en sy programkode.

Ruijie Networks is 'n sterk ondersteuner van P4 en die voordele wat dit vir netwerke inhou. Met P4 kan 'n maatskappy die beste oplossings vir 'n wye reeks kliënte skep en lewer.

4) Telekommunikasieverskaffers;

AT&T was 'n vroeë voorstander van P4, een van die eerstes wat P4 gebruik het om die gedrag wat hy op netwerke wou sien, te definieer, en om P4-programmeerbare aanstuurders op sy netwerk te gebruik.

Deutsche Telekom gebruik die taal om sleutelnetwerkfunksies te prototipeer as deel van die Access 4.0-program.

5) Halfgeleier industrie;

Die taal het voorsiening gemaak vir 'n nuwe paradigma van die oordrag van sagteware vermoëns na die netwerk roetering vliegtuig deur Kaalvoet.

Xilinx was een van die stigters van P4.org en was aktief betrokke by die ontwikkeling van die P4-taal en het dit in FPGA-gebaseerde programmeerbare platforms vir SmartNIC- en NFV-hardeware bekendgestel, wat een van die eerste P416-samestellers vrygestel het as deel van die SDNet-ontwerp.

6) Sagteware.

VMware glo dat P4 geweldige energie, innovasie en 'n gemeenskap genereer wat betekenisvolle en noodsaaklike netwerktransformasie aandryf. VMware is sedert die begin deel van hierdie bedryfsbeweging, aangesien 'n nuwe golf van innovasie gedryf word deur sagteware-gebaseerde benaderings wat infrastruktuur bemagtig en dit in die nuutste produkte implementeer.

Dus, P4 is 'n teiken-onafhanklike en protokol-onafhanklike programmeertaal wat deur die industrie en die wetenskaplike gemeenskap gebruik word om die gedrag van pakkie roetering ondubbelsinnig te definieer as 'n program wat op sy beurt saamgestel kan word vir veelvuldige teikens. Teikens sluit vandag hardeware- en sagtewareskakelaars, hipervisorskakelaars, NPU's, GPU's, FPGA's, SmartNIC's en ASIC's in.

Die hoofkenmerke van die taal brei die omvang van die toepassing daarvan aansienlik uit en verseker die vinnige implementering daarvan in netwerkargitekture.

Waar om te begin

P4 is 'n oop projek, alle relevante inligting is op die webwerf P4.org

Skakel na die bewaarplek https://github.com/p4langwaar jy die bronkode vir die voorbeelde en tutoriale kan kry.

Плагин vir Eclipse met P4-ondersteuning, maar ons kan aanbeveel P4 Studio van Kaalvoet.

P4 programmeertaal

Kom ons ontleed die belangrikste abstraksies van die kern:

Definisie van opskrifte - met hul hulp word protokolopskrifte gedefinieer.

Die definisie van opskrifte spesifiseer:

  • beskrywing van pakkieformate en kop-veldname
  • vaste en veranderlike toegelate velde

Byvoorbeeld

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

Ontleders - hul taak is om die opskrifte te ontleed.

Die volgende ontledervoorbeeld sal die oorgang van die finale toestand van die masjien van een aanvanklike toestand na een van twee finale toestande definieer:

P4 programmeertaal

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

tafels - bevat masjientoestande wat gebruikersleutels met aksies assosieer. Aktiwiteit — 'n beskrywing van hoe die pakket gemanipuleer moet word.

Die tabelle bevat die toestande (gedefinieer op die bestuursvlak) vir pakkie-aanstuur, beskryf die Match-Action-aksie-eenheid

Pakkette word gepas deur:

  • Presiese passing
  • Langste voorafbepaalde wedstryd (LPM)
  • Drievoudige passing (maskering)

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

Alle moontlike aksies moet vooraf in die tabelle gedefinieer word.

Aksies bestaan ​​uit kode en data. Die data kom op bestuursvlak in (bv. IP-adresse/poortnommers). Sekere, luslose primitiewe kan direk in die aksie gespesifiseer word, maar die aantal instruksies moet voorspelbaar wees. Daarom kan aksies geen lusse of voorwaardelike stellings bevat nie.

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

Pas Aksie Modules - aksies om 'n soeksleutel te skep, soek in die tabel, voer aksies uit.

'n Tipiese voorbeeld van 'n module word in die figuur getoon:

P4 programmeertaal

Beheer vloei Spesifiseer die volgorde waarin Match-Action-modules toegepas word. Dit is 'n noodsaaklike program wat hoëvlaklogika en die Match-Action-volgorde definieer. Die vloei van beheer verbind alle voorwerpe deur die vlak van beheer te spesifiseer.

Eksterne voorwerpe is spesifieke voorwerpe met 'n duidelik gedefinieerde argitektuur en API's. Byvoorbeeld, kontrolesomberekening, registers, tellers, tellers, ens.

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 - die datastrukture wat met elke pakket geassosieer word.

Daar is 2 tipes metadata:

  Pasgemaakte metadata (leë struktuur vir alle pakkette)
    Jy kan hier plaas wat jy wil
    Regdeur die pyplyn beskikbaar
    gerieflik om vir jou eie doeleindes te gebruik, byvoorbeeld om die hash van die pakkie te stoor

  Interne metadata - verskaf deur die argitektuur
    Invoerpoort, uitsetpoort word hier gedefinieer
    Tydstempel wanneer die pakkie in tou gestaan ​​het, toudiepte
    multicast hash / multicast tou
    Pakkie Prioriteit, Pakkie Belangrikheid
    Uitsetpoortspesifikasie (bv. uitsetwaglys)

Samesteller P4

P4 samesteller (P4C) genereer:

  1. data vliegtuig looptyd
  2. API vir die bestuur van die toestand van die masjien in die datavlak

P4 programmeertaal

'n Voorbeeld van 'n sagtewareskakelaar in P4-taal

Bronkodes kan van die bewaarplek afgelaai word.

p4lang/p4c-bm: genereer JSON-konfigurasie vir bmv2
p4lang/bmv2: sagteskakelaar wat bmv2 weergawe JSON-konfigurasies verstaan

Die figuur toon die projeksamestellingskema:

P4 programmeertaal

Manipulasies met tabelle, leesregisters, teller:

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


Die bronkode bevat die simple_switch_CLI-program vir gerieflike gebruik van die sagteware-skakelaar-API.

U kan hierdie en ander voorbeelde in die bewaarplek aflaai.

P4 programmeertaal

PS Aan die begin van die somer het Intel 'n ooreenkoms onderteken om Barefoot Networks te verkry om vinnig aan die behoeftes van Hyperscale Cloud-gebruikers te voldoen. Volgens Navin Shenoy (uitvoerende vise-president en hoofbestuurder van die Data Center Group by Intel Corporation), sal dit Intel in staat stel om meer werkladings en meer geleenthede vir datasentrumkliënte te bied.

In my persoonlike opinie, moenie vergeet dat Intel die leier in die vervaardiging van FPGA-skyfies is nie en dat hulle 'n uitstekende Quartus-omgewing het. Dit beteken dat Barefoot met die aankoms by Intel nie net sy produkreeks sal uitbrei nie, maar ook Quartus en P4 Studio sal groot opdaterings en aanvulling hê met die Toffino- en Toffino 2-reeks.

Amptelike lid van die P4-gemeenskap - maatskappy faktor groep.

Bron: will.com

Voeg 'n opmerking