P4 programmeartaal

P4 programmeartaal
P4 is in programmeartaal ûntworpen om regels foar pakketrouting te programmearjen. Oars as in algemiene doeltaal lykas C of Python, is P4 in domein-spesifike taal mei in oantal ûntwerpen optimalisearre foar netwurkrouting.

P4 is in iepen boarne taal mei fergunning en ûnderhâlden troch in non-profit organisaasje neamd it P4 Language Consortium. It wurdt ek stipe troch de Open Networking Foundation (ONF) en de Linux Foundation (LF), twa fan 'e grutste koepelorganisaasjes foar iepen boarne netwurkprojekten.
De taal waard oarspronklik betocht yn 2013 en beskreaun yn in 2014 SIGCOMM CCR papier mei de titel "Protocol Independent, Packet Routing Processor Programming."

Sûnt syn oprjochting is P4 eksponentiell groeid en evoluearre, en waard rap in standert foar it beskriuwen fan de oerdracht fan pakketten troch netwurkapparaten, ynklusyf netwurkadapters, switches en routers.

"SDN hat de netwurkyndustry omfoarme, en P4 nimt SDN nei it folgjende nivo troch programmearberens nei routing te bringen," sei Guru Parulkar, útfierend direkteur fan 'e Open Networking Foundation.

De P4-taal waard oarspronklik makke troch in groep yngenieurs en ûndersikers fan Google, Intel, Microsoft Research, Barefoot, Princeton en Stanford. It doel wie ienfâldich: meitsje in maklik te brûken taal dy't in softwareûntwikkelder yn ien dei leare koe en brûke om sekuer te beskriuwen hoe't pakketten oer netwurken ferstjoerd wurde.

Fan it begjin ôf waard P4 ûntworpen om doelûnôfhinklik te wêzen (dus in programma skreaun yn P4 koe ûnferoare wurde kompilearre om te rinnen op in ferskaat oan doelen lykas ASIC's, FPGA's, CPU's, NPU's en GPU's).

De taal is ek protokolûnôfhinklik (d.w.s. in P4-programma kin besteande standertprotokollen beskriuwe of wurde brûkt om nije oanpaste adresmodi op te jaan).

Yn 'e yndustry wurdt P4 brûkt foar apparaatprogrammearring. Miskien yn 'e takomst sille Internet-RFC- en IEEE-standerts ek de P4-spesifikaasje omfetsje.

P4 kin brûkt wurde foar sawol programmabele as fêste funksje-apparaten. Bygelyks, it wurdt brûkt om sekuer registrearje switch pipeline gedrach yn de Switch Abstraction Interface (SAI) APIs brûkt troch de iepen boarne SONiC switch OS. P4 wurdt ek brûkt yn it ONF Stratum-projekt om wikselgedrach te beskriuwen oer in ferskaat oan fêste en programmearbere apparaten.

Foar it earst, it beskriuwen fan it gedrach fan 'e skeakel en netwurkadapters kinne jo in krekte útfierber model meitsje fan it heule netwurk foar ynset. Grutte wolkproviders kinne it netwurk folslein testen en debuggen mei software, wat de tiid en kosten fan ynteroperabiliteitstests yn it laboratoarium signifikant ferminderje sûnder djoere hardware te fereaskje.

Troch P4 te brûken, kinne leveransiers fan netwurkapparatuer mienskiplik ûnderlizzend routinggedrach ferwachtsje oer alle produkten, wêrtroch wergebrûk fan testynfrastruktuer mooglik makket, ûntwikkeling fan managementsoftware ferienfâldigje, en úteinlik ynteroperabiliteit garandearje.

Fansels kin P4 brûkt wurde om programma's te skriuwen dy't folslein nije manieren fan routing beskriuwe. Bygelyks, P4 wurdt in protte brûkt foar telemetry en mjittingen yn datasintra, bedriuws- en tsjinstferlienersnetwurken.

De ûndersyksmienskip is ek opstapt. Ferskate liedende akademyske netwurkûndersyksgroepen hawwe spannende nije applikaasjes publisearre basearre op P4-programma's, ynklusyf loadbalancing, konsensusprotokollen, en caching fan kaaiwearden. In nij programmearparadigma wurdt makke, ynnovaasje giet fan hardware nei software, wêrtroch in protte ûnferwachte, nije en geniale ideeën ûntsteane kinne.

De ûntwikkeldersmienskip hat wichtige bydragen levere oan koadeûntwikkeling, ynklusyf gearstallers, pipelines, gedrachsmodellen, API's, testkaders, applikaasjes, en mear. Bedriuwen lykas Alibaba, AT&T, Barefoot, Cisco, Fox Networks, Google, Intel, IXIA, Juniper Networks, Mellanox, Microsoft, Netcope, Netronome, VMware, Xilinx, en ZTE hawwe tawijd ûntwikkelders; fan universiteiten ynklusyf BUPT, Cornell, Harvard, MIT, NCTU, Princeton, Stanford, Technion, Tsinghua, UMass, en USI; en iepen boarne projekten ynklusyf CORD, FD.io, OpenDaylight, ONOS, OvS, SAI en Stratum markearje it feit dat P4 is in ûnôfhinklik mienskip projekt.

Typyske generaasje fan controllers foar de P4-taal:

P4 programmeartaal

Applikaasje perspektiven

P4 programmeartaal
Sûnt de taal is bedoeld foar routing applikaasjes, is de list mei easken en ûntwerpopsjes oars yn ferliking mei algemiene programmeertalen. De wichtichste skaaimerken fan 'e taal binne:

  1. Unôfhinklikens fan doel ymplemintaasje;
  2. Unôfhinklikens fan it protokol(en) dat brûkt wurdt;
  3. Fjild reconfigurability.

Unôfhinklikens fan doel ymplemintaasje

P4-programma's binne ûntworpen om ymplemintaasje-ûnôfhinklik te wêzen, wat betsjuttet dat se kinne wurde kompilearre foar in protte ferskillende soarten útfieringsmotoren, lykas prosessoren foar algemiene doelen, FPGA's, SoC's, netwurkprozessors en ASIC's. Dizze ferskillende soarten masines binne bekend as P4-doelen, en elk doel fereasket in kompilator om de P4-boarnekoade te konvertearjen yn in doelwittenskipmodel. De kompilator kin wurde ynboud yn it doelapparaat, eksterne software, of sels in wolktsjinst. Om't in protte fan 'e orizjinele doelen foar P4-programma's wiene foar ienfâldige pakketwikseling, is it heul gewoan om de term "P4-skeakel" te hearren, ek al is "P4-doel" krekter.

Unôfhinklikens fan it protokol(en) dat brûkt wurdt

P4 is protokol ûnôfhinklik. Dit betsjut dat de taal gjin native stipe hat foar mienskiplike protokollen lykas IP, Ethernet, TCP, VxLAN of MPLS. Ynstee dêrfan beskriuwt de P4-programmeur de koptekstformaten en fjildnammen fan 'e fereaske protokollen yn it programma, dy't op har beurt wurde ynterpretearre en ferwurke troch it kompilearre programma en it doelapparaat.

Fjild reconfigurability

It protokolûnôfhinklikens en it abstrakte taalmodel makket rekonfigurabiliteit mooglik - P4-doelen moatte pakketferwurking kinne feroarje neidat it systeem is ynset. Dizze mooglikheid is tradisjoneel assosjearre mei routing fia processors foar algemiene doelen as netwurkprozessors ynstee fan yntegreare circuits mei fêste funksje.

Hoewol d'r neat yn 'e taal is dat optimisaasje fan' e prestaasjes fan in bepaalde set protokollen foarkomme soe, binne dizze optimisaasjes ûnsichtber foar de taalauteur en kinne úteinlik de fleksibiliteit fan it systeem en doelen en har rekonfigurearberens ferminderje.

Dizze skaaimerken fan 'e taal waarden yn earste ynstânsje fêstlein troch har makkers mei in fokus op har wiidferspraat gebrûk yn netwurkynfrastruktuer.

De taal wurdt al brûkt yn in protte bedriuwen:

1) Hyperscale datasintra;

It Sineeske bedriuw Tencent is it grutste ynvestearringsbedriuw yn 'e wrâld en ien fan 'e grutste risikokapitaalbedriuwen. De dochterûndernimmingen fan Tencent, sawol yn Sina as yn oare lannen om 'e wrâld, binne spesjalisearre yn ferskate gebieten fan high-tech bedriuw, ynklusyf ferskate ynternettsjinsten, ûntwikkelingen op it mêd fan keunstmjittige yntelliginsje en elektroanysk fermaak.

P4 en programmabele routing binne avansearre technologyen dy't wurde brûkt yn 'e netwurkarsjitektuer fan it bedriuw.

As ien fan 'e oarsprongen is Google grutsk om de rappe oanname fan P4 te notearjen yn' e netwurkyndustry en yn it arsjitektoanysk ûntwerp fan datacenters yn it bysûnder.

2) Kommersjele bedriuwen;

Goldman Sachs profitearret fan it wurkjen mei de iepen boarne-mienskip en it ûntwikkeljen fan mienskiplike noarmen en oplossingen om netwurkynfrastruktuer te ynnovearjen en bettere oplossingen foar kliïnten te leverjen.

3) Produksje;

De hiele netwurkyndustry soe profitearje fan in taal lykas P4 dy't it trochstjoergedrach unyk definiearret. Cisco leaut ek yn it oerdragen fan har produktlinen om dizze taal te brûken.

Juniper Networks hat opnommen P4 en P4 Runtime yn in oantal produkten, en jout programmatyske tagong ta de Juniper ynbêde prosessor en syn software koade.

Ruijie Networks is in sterke oanhinger fan P4 en de foardielen dy't it bringt oan netwurken. Mei P4 kin it bedriuw bêste oplossingen yn 'e klasse oanmeitsje en leverje oan in breed oanbod fan klanten.

4) Telecommunications providers;

AT&T wie in betide adopter fan P4, ien fan 'e earsten dy't P4 brûkte om it gedrach te definiearjen dat it woe sjen yn har netwurken, en om P4 programmearbere trochstjoerapparaten op har netwurk te brûken.

By Deutsche Telekom wurdt de taal brûkt om prototype fan wichtige netwurkfunksjes as ûnderdiel fan it programma Access 4.0.

5) Semiconductor yndustry;

De taal stelde Barefoot yn steat om in nij paradigma te ymplementearjen foar it leverjen fan softwaremooglikheden oan it netwurkrûteplan.

Xilinx wie ien fan 'e oprjochters fan P4.org en wie aktyf belutsen by de ûntwikkeling fan' e P4-taal en ymplementearre it yn FPGA-basearre programmabele platfoarms foar SmartNIC- en NFV-hardware, wêrtroch ien fan 'e earste P416-kompilers frijlitten as ûnderdiel fan it SDNet-ûntwerp.

6) Software.

VMware is fan betinken dat P4 enoarme enerzjy, ynnovaasje en mienskip skept dy't sinfolle en needsaaklike transformaasje yn it netwurk driuwt. VMware hat sûnt it begjin diel west fan dizze yndustrybeweging, om't in nije weach fan ynnovaasje wurdt dreaun troch software-basearre oanpak dy't ynfrastruktuermooglikheden útwreidzje en it yn 'e lêste produkten ymplementearje.

Sa is P4 in doel-ûnôfhinklike en protokol-ûnôfhinklike programmeartaal dy't wurdt brûkt troch yndustry en akademy om unyk pakket-routinggedrach te definiearjen as in programma, dat op syn beurt kin wurde kompilearre foar meardere doelen. Tsjintwurdich omfetsje doelen hardware- en software-skeakels, hypervisor-skeakels, NPU's, GPU's, FPGA's, SmartNIC's en ASIC's.

De haadfunksjes fan 'e taal wreidzje it berik fan har tapassing signifikant út en soargje foar har rappe ymplemintaasje yn netwurkarsjitektueren.

Om te begjinnen

P4 is in iepen projekt, alle relevante ynformaasje stiet op de webside P4.org

Repository keppeling https://github.com/p4lang, wêr kinst krije foarbyld boarne koade en tutorials.

Plagin foar Eclipse mei P4 stipe, mar wy kinne riede P4 Studio fan Barefoot.

P4 programmeartaal

Litte wy nei de wichtichste abstraksjes fan 'e kernel sjen:

Defining Headers - mei har help wurde protokolkoppen bepaald.

De koptekst definysje spesifisearret:

  • beskriuwing fan pakketformaten en koptekstfjildnammen
  • fêste en fariabele tastiene fjilden

Bygelyks

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 - har taak is om de koppen te parsearjen.

It folgjende parserfoarbyld sil de oergong fan 'e definitive steat fan' e masine bepale fan ien begjinsteat nei ien fan twa definitive steaten:

P4 programmeartaal

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 - befetsje masinestaten dy't brûkerskaaien keppelje mei aksjes. Aksjes - in beskriuwing fan hoe't it pakket moat wurde manipulearre.

De tabellen befetsje steaten (definiearre op it behear nivo) foar pakket trochstjoere, beskriuwe de Match-Action ienheid

Pakketten wurde oerienkommen troch:

  • Krekte wedstriid
  • Langste Prefix Match (LPM)
  • Triple matching (maskering)

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

Alle mooglike aksjes moatte foarôf yn tabellen definiearre wurde.

Aksjes besteane út koade en gegevens. De gegevens komme fan it behearnivo (bgl. IP-adressen/poartenûmers). Bepaalde, loopfrije primitiven kinne direkt yn 'e aksje oanjûn wurde, mar it oantal ynstruksjes moat foarsisber wêze. Dêrom kinne aksjes gjin loops of betingsten befetsje.

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

Match-aksje modules - aksjes om in sykkaai te meitsjen, sykje yn in tabel, aksjes útfiere.

In typysk foarbyld fan in module wurdt werjûn yn 'e figuer:

P4 programmeartaal

Kontrôle flow - jout de folchoarder oan wêryn Match-Action-modules wurde brûkt. Dit is in ymperatyf programma dat de logika op hege nivo en Match-Action-sekwinsje definiearret. De kontrôlestream ferbynt alle objekten troch it nivo fan kontrôle te definiearjen.

Eksterne objekten binne spesifike objekten mei in dúdlik definieare arsjitektuer en API-ynterfaces. Bygelyks, kontrôlesum berekkening, registers, tellers, tellers, ensfh.

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 - gegevensstruktueren ferbûn mei elk pakket.

D'r binne 2 soarten metadata:

  Oanpaste metadata (lege struktuer foar alle pakketten)
    Jo kinne sette wat jo wolle hjir
    Beskikber troch de hiele pipeline
    handich foar gebrûk foar jo eigen doelen, bygelyks foar it opslaan fan in pakkethash

  Ynterne metadata - levere troch de arsjitektuer
    Input haven, output haven wurde hjir definiearre
    Tiidstempel doe't it pakket yn wachtrige stie, wachtrige djipte
    multicast hash / multicast wachtrige
    Pakket prioriteit, pakket belang
    Utfierpoarte spesifikaasje (bygelyks útfierwachtrige)

P4 kompilator

De P4-kompiler (P4C) genereart:

  1. Dataplane runtime
  2. API foar it behearen fan masinestatus yn it gegevensfleantúch

P4 programmeartaal

Foarbyld fan in software switch yn P4 taal

Boarnekoades kinne wurde downloade fan it repository.

p4lang/p4c-bm: makket JSON-konfiguraasje foar bmv2
p4lang / bmv2: in software switch dy't begrypt bmv2 ferzje JSON konfiguraasjes

De figuer toant it projektkompilaasjediagram:

P4 programmeartaal

Manipulaasjes mei tabellen, lêsregisters, tellers:

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


De boarnekoade befettet it programma simple_switch_CLI foar maklik gebrûk fan 'e software switch API.

Jo kinne dit en oare foarbylden downloade fan it repository.

P4 programmeartaal

PS Begjin dizze simmer tekene Intel in oerienkomst om Barefoot Networks te krijen yn in poging om fluch te foldwaan oan 'e behoeften fan Hyperscale Cloud-brûkers. As Navin Shenoy (útfierend vice-presidint en algemien direkteur fan 'e Data Center Group by Intel Corporation) sei, dit sil Intel tastean gruttere wurklasten en mear kânsen foar datacenterklanten te leverjen.

Yn myn persoanlike miening moatte wy net ferjitte dat Intel in lieder is yn 'e produksje fan FPGA-chips en it hat in poerbêste Quartus-omjouwing. Dit betsjut dat wy kinne ferwachtsje dat mei de komst fan Intel, Barefoot sil net allinnich útwreidzje syn produkt line, mar ek Quartus en P4 Studio sil krije serieuze updates en tafoegings oan de Toffino en Toffino 2 line.

Offisjeel lid fan 'e P4-mienskip - bedriuw faktor groep.

Boarne: www.habr.com

Add a comment