P4 programavimo kalba

P4 programavimo kalba
P4 yra programavimo kalba, skirta programuoti paketų maršruto taisykles. Skirtingai nuo bendrosios paskirties kalbų, tokių kaip C arba Python, P4 yra konkrečiai domenui skirta kalba, turinti daugybę dizainų, optimizuotų tinklo maršrutizavimui.

P4 yra atvirojo kodo kalba, licencijuota ir prižiūrima ne pelno organizacijos, vadinamos P4 Language Consortium. Jį taip pat remia „Open Networking Foundation“ (ONF) ir „Linux Foundation“ (LF), dvi didžiausios atvirojo kodo tinklų projektų skėtinės organizacijos.
Kalba iš pradžių buvo sukurta 2013 m. ir aprašyta 2014 m. SIGCOMM CCR dokumente „Nepriklausomas nuo protokolo, paketų nukreipimo procesoriaus programavimas“.

Nuo pat įkūrimo P4 augo ir vystėsi eksponentiškai, greitai tapdamas standartu, apibūdinančiu tinklo įrenginių, įskaitant tinklo adapterius, jungiklius ir maršrutizatorius, perdavimo paketus.

„SDN pakeitė tinklų pramonę, o P4 perkelia SDN į kitą lygį, suteikdamas maršruto parinkimo programuojamumą“, – sakė Guru Parulkaras, Open Networking Foundation vykdomasis direktorius.

Iš pradžių P4 kalbą sukūrė inžinierių ir tyrėjų grupė iš Google, Intel, Microsoft Research, Barefoot, Princeton ir Stanford. Tikslas buvo paprastas: sukurti lengvai naudojamą kalbą, kurią programinės įrangos kūrėjas galėtų išmokti per dieną ir naudoti tiksliai apibūdinti, kaip paketai siunčiami tinkluose.

Nuo pat pradžių P4 buvo sukurtas taip, kad būtų nepriklausomas nuo tikslo (t. y. programa, parašyta P4, gali būti sudaryta nepakitusi, kad veiktų su įvairiais tikslais, tokiais kaip ASIC, FPGA, CPU, NPU ir GPU).

Kalba taip pat nepriklauso nuo protokolo (t. y. P4 programa gali aprašyti esamus standartinius protokolus arba būti naudojama naujiems pasirinktiniams adresavimo režimams nurodyti).

Pramonėje P4 naudojamas įrenginių programavimui. Galbūt ateityje Internet-RFC ir IEEE standartai taip pat apims P4 specifikaciją.

P4 gali būti naudojamas tiek programuojamų, tiek fiksuotų funkcijų įrenginiams. Pavyzdžiui, jis naudojamas tiksliai įrašyti jungiklio konvejerio elgseną Switch Abstraction Interface (SAI) API, naudojamų atvirojo kodo SONiC jungiklio OS. P4 taip pat naudojamas ONF Stratum projekte, siekiant apibūdinti perjungimo elgesį įvairiuose fiksuotuose ir programuojamuose įrenginiuose.

Pirmą kartą jungiklio ir tinklo adapterių veikimo aprašymas leidžia sukurti tikslų viso tinklo vykdomąjį modelį prieš diegiant. Dideli debesų paslaugų teikėjai gali išbandyti ir derinti tinklą tik naudodami programinę įrangą, žymiai sumažindami suderinamumo bandymų laiką ir išlaidas laboratorijoje nereikalaujant brangios aparatinės įrangos.

Naudodami P4 tinklo įrangos pardavėjai gali tikėtis bendro maršruto parinkimo visuose produktuose, leidžiančio pakartotinai naudoti bandymo infrastruktūrą, supaprastinti valdymo programinės įrangos kūrimą ir galiausiai užtikrinti sąveikumą.

Žinoma, P4 galima rašyti programas, kurios aprašo visiškai naujus maršruto parinkimo būdus. Pavyzdžiui, P4 plačiai naudojamas telemetrijai ir matavimams duomenų centruose, įmonių ir paslaugų teikėjų tinkluose.

Mokslininkų bendruomenė taip pat sustiprėjo. Keletas pirmaujančių akademinių tinklų tyrimų grupių paskelbė įdomių naujų programų, pagrįstų P4 programomis, įskaitant apkrovos balansavimą, konsensuso protokolus ir pagrindinių verčių kaupimą talpykloje. Kuriama nauja programavimo paradigma, inovacijos pereina nuo techninės prie programinės įrangos, leidžiančios atsirasti daug netikėtų, naujų ir genialių idėjų.

Kūrėjų bendruomenė labai prisidėjo prie kodo kūrimo, įskaitant kompiliatorius, konvejerius, elgesio modelius, API, testavimo sistemas, programas ir kt. Tokios įmonės kaip Alibaba, AT&T, Barefoot, Cisco, Fox Networks, Google, Intel, IXIA, Juniper Networks, Mellanox, Microsoft, Netcope, Netronome, VMware, Xilinx ir ZTE turi tam skirtus kūrėjus; iš universitetų, įskaitant BUPT, Cornell, Harvard, MIT, NCTU, Princeton, Stanford, Technion, Tsinghua, UMass ir USI; ir atvirojo kodo projektai, įskaitant CORD, FD.io, OpenDaylight, ONOS, OvS, SAI ir Stratum, pabrėžia faktą, kad P4 yra nepriklausomas bendruomenės projektas.

Įprasta P4 kalbos valdiklių karta:

P4 programavimo kalba

Taikymo perspektyvos

P4 programavimo kalba
Kadangi kalba skirta maršrutizavimo programoms, reikalavimų ir dizaino parinkčių sąrašas skiriasi nuo bendrosios paskirties programavimo kalbų. Pagrindiniai kalbos bruožai yra šie:

  1. Nepriklausomybė nuo tikslo įgyvendinimo;
  2. Naudojamo (-ų) protokolo (-ų) nepriklausomumas;
  3. Lauko perkonfigūravimas.

Nepriklausomybė nuo tikslo įgyvendinimo

P4 programos sukurtos taip, kad būtų nepriklausomos nuo diegimo, tai reiškia, kad jas galima sudaryti daugeliui skirtingų vykdymo variklių tipų, tokių kaip bendrosios paskirties procesoriai, FPGA, sistemos mikroschemos, tinklo procesoriai ir ASIC. Šie skirtingi įrenginių tipai yra žinomi kaip P4 taikiniai, ir kiekvienam taikiniui reikalingas kompiliatorius, kuris konvertuotų P4 šaltinio kodą į tikslinio jungiklio modelį. Kompiliatorius gali būti integruotas į tikslinį įrenginį, išorinę programinę įrangą ar net debesies paslaugą. Kadangi daugelis pradinių P4 programų taikinių buvo skirti paprastam paketų perjungimui, labai dažnai girdime terminą „P4 jungiklis“, nors „P4 tikslas“ yra tikslesnis.

Naudojamo (-ų) protokolo (-ų) nepriklausomumas

P4 nepriklauso nuo protokolo. Tai reiškia, kad kalba nepalaiko įprastų protokolų, tokių kaip IP, Ethernet, TCP, VxLAN arba MPLS. Vietoj to, P4 programuotojas aprašo reikalingų programos protokolų antraščių formatus ir laukų pavadinimus, kuriuos savo ruožtu interpretuoja ir apdoroja sudaryta programa ir tikslinis įrenginys.

Lauko perkonfigūravimas

Nepriklausomybė nuo protokolo ir abstraktus kalbos modelis leidžia perkonfigūruoti – P4 taikiniai turėtų turėti galimybę pakeisti paketų apdorojimą po sistemos įdiegimo. Ši galimybė tradiciškai buvo siejama su maršruto parinkimu per bendrosios paskirties procesorius arba tinklo procesorius, o ne su fiksuotos funkcijos integriniais grandynais.

Nors kalboje nėra nieko, kas trukdytų optimizuoti tam tikro protokolų rinkinio veikimą, šie optimizavimai yra nematomi kalbos autoriui ir galiausiai gali sumažinti sistemos lankstumą ir tikslus bei jų perkonfigūravimą.

Šias kalbos ypatybes iš pradžių nustatė jos kūrėjai, daugiausia dėmesio skirdami plačiam jos naudojimui tinklo infrastruktūroje.

Kalba jau naudojama daugelyje įmonių:

1) Hyperscale duomenų centrai;

Kinijos bendrovė Tencent yra didžiausia investicinė bendrovė pasaulyje ir viena didžiausių rizikos kapitalo įmonių. Tencent antrinės įmonės tiek Kinijoje, tiek kitose pasaulio šalyse specializuojasi įvairiose aukštųjų technologijų verslo srityse, įskaitant įvairias interneto paslaugas, plėtrą dirbtinio intelekto ir elektroninių pramogų srityje.

P4 ir programuojamas maršrutizavimas yra pažangios technologijos, naudojamos įmonės tinklo architektūroje.

„Google“, kaip viena iš kūrėjų, didžiuojasi galėdama pastebėti greitą P4 pritaikymą tinklų pramonėje ir ypač duomenų centrų architektūriniame projekte.

2) Komercinės įmonės;

„Goldman Sachs“ naudojasi darbo su atvirojo kodo bendruomene ir bendrų standartų bei sprendimų kūrimu, siekdama naujovių tinklo infrastruktūrą ir teikti geresnius sprendimus klientams.

3) Gamyba;

Visai tinklų pramonei būtų naudinga tokia kalba kaip P4, kuri vienareikšmiškai apibrėžia persiuntimo elgesį. „Cisco“ taip pat tikisi perkelti savo produktų linijas į šią kalbą.

„Juniper Networks“ įtraukė P4 ir P4 Runtime į daugybę produktų ir suteikia programinę prieigą prie „Juniper“ įterptinio procesoriaus ir jo programinės įrangos kodo.

„Ruijie Networks“ yra tvirtas P4 ir jo tinklams teikiamos naudos rėmėjas. Naudodama P4, įmonė gali sukurti ir pristatyti geriausius savo klasėje sprendimus įvairiems klientams.

4) Telekomunikacijų tiekėjai;

AT&T buvo ankstyvas P4 pritaikytojas, vienas pirmųjų, kuris naudojo P4, kad nustatytų elgseną, kurią nori matyti savo tinkluose, ir savo tinkle naudojo P4 programuojamus persiuntimo įrenginius.

„Deutsche Telekom“ kalba naudojama pagrindinių tinklo funkcijų prototipui sukurti kaip „Access 4.0“ programos dalis.

5) Puslaidininkių pramonė;

Kalba leido „Barefoot“ įgyvendinti naują paradigmą, skirtą programinės įrangos galimybėms pateikti tinklo maršruto parinkimo plokštumoje.

Xilinx buvo vienas iš P4.org įkūrėjų ir aktyviai dalyvavo kuriant P4 kalbą ir įdiegė ją į FPGA pagrįstas programuojamas platformas SmartNIC ir NFV aparatūrai, išleisdamas vieną iš pirmųjų P416 kompiliatorių kaip SDNet dizaino dalį.

6) Programinė įranga.

VMware mano, kad P4 sukuria didžiulę energiją, naujoves ir bendruomenę, kuri skatina prasmingą ir būtiną tinklo transformaciją. „VMware“ buvo šio pramonės judėjimo dalis nuo pat pradžių, nes naują inovacijų bangą skatina programine įranga pagrįsti metodai, kurie išplečia infrastruktūros galimybes ir įdiegia tai naujausiuose produktuose.

Taigi, P4 yra nuo tikslo ir nuo protokolo nepriklausoma programavimo kalba, kurią naudoja pramonė ir akademinė bendruomenė, kad unikaliai apibrėžtų paketų nukreipimo elgseną kaip programą, kurią savo ruožtu galima sudaryti keliems tikslams. Šiandien taikiniai apima techninės ir programinės įrangos jungiklius, hipervizorių jungiklius, NPU, GPU, FPGA, SmartNIC ir ASIC.

Pagrindinės kalbos savybės žymiai išplečia jos taikymo sritį ir užtikrina greitą jos diegimą tinklo architektūrose.

Darbo pradžia

P4 yra atviras projektas, visa reikalinga informacija yra svetainėje P4.org

Saugyklos nuoroda https://github.com/p4lang, kur galite gauti šaltinio kodo pavyzdžius ir mokymo programas.

Prijungti skirta Eclipse su P4 palaikymu, bet galime rekomenduoti P4 studija iš Barefoot.

P4 programavimo kalba

Pažvelkime į pagrindines branduolio abstrakcijas:

Antraštės apibrėžimas — su jų pagalba nustatomos protokolų antraštės.

Antraštės apibrėžimas nurodo:

  • paketų formatų ir antraštės laukų pavadinimų aprašymas
  • fiksuoti ir kintami leidžiami laukai

Pavyzdžiui

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

Analizatoriai — jų užduotis yra išanalizuoti antraštes.

Šis analizatoriaus pavyzdys nustatys galutinės mašinos būsenos perėjimą iš vienos pradinės būsenos į vieną iš dviejų galutinių būsenų:

P4 programavimo kalba

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

Lentelės — yra mašinos būsenos, susiejančios vartotojo raktus su veiksmais. Veikla — aprašymas, kaip turėtų būti manipuliuojama paketu.

Lentelėse yra paketų persiuntimo būsenos (apibrėžtos valdymo lygmeniu), apibūdinkite „Match-Action“ vienetą

Paketai atitinka:

  • Tikslus atitikimas
  • Ilgiausia priešdėlio atitiktis (LPM)
  • Trigubas atitikimas (maskavimas)

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

Visi galimi veiksmai turi būti iš anksto apibrėžti lentelėse.

Veiksmus sudaro kodas ir duomenys. Duomenys gaunami iš valdymo lygio (pvz., IP adresai / prievadų numeriai). Tam tikri primityvai be kilpų gali būti nurodyti tiesiogiai veiksme, tačiau instrukcijų skaičius turi būti nuspėjamas. Todėl veiksmuose negali būti jokių kilpų ar sąlyginių teiginių.

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-Action moduliai — veiksmai, skirti sukurti paieškos raktą, ieškoti lentelėje, atlikti veiksmus.

Tipiškas modulio pavyzdys parodytas paveikslėlyje:

P4 programavimo kalba

Kontroliuoti srautą — nurodo, kokia tvarka naudojami „Match-Action“ moduliai. Tai būtina programa, apibrėžianti aukšto lygio logiką ir „Match-Action“ seką. Valdymo srautas susieja visus objektus, apibrėždamas valdymo lygį.

Išoriniai objektai yra konkretūs objektai su aiškiai apibrėžta architektūra ir API sąsajomis. Pavyzdžiui, kontrolinės sumos skaičiavimas, registrai, skaitikliai, skaitikliai ir kt.

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
}

Metaduomenys — su kiekvienu paketu susietos duomenų struktūros.

Yra 2 metaduomenų tipai:

  Priskirti metaduomenys (tuščia visų paketų struktūra)
    Čia galite įdėti ką tik norite
    Galimas visame dujotiekyje
    patogus naudoti savo reikmėms, pavyzdžiui, pakuotės maišos saugojimui

  Vidiniai metaduomenys – pateikiami architektūros
    Čia apibrėžiamas įvesties prievadas, išvesties prievadas
    Laiko žyma, kada paketas buvo eilėje, eilės gylis
    multicast maišos / multicast eilė
    Paketo prioritetas, pakuotės svarba
    Išvesties prievado specifikacija (pvz., išvesties eilė)

P4 kompiliatorius

P4 kompiliatorius (P4C) generuoja:

  1. Duomenų plokštumos vykdymo laikas
  2. API, skirta valdyti mašinos būseną duomenų plokštumoje

P4 programavimo kalba

Programinės įrangos jungiklio P4 kalba pavyzdys

Šaltinio kodus galima atsisiųsti iš saugyklos.

p4lang/p4c-bm: sukuria JSON konfigūraciją, skirtą bmv2
p4lang/bmv2: programinės įrangos jungiklis, suprantantis bmv2 versijos JSON konfigūracijas

Paveikslėlyje parodyta projekto sudarymo schema:

P4 programavimo kalba

Manipuliacijos su lentelėmis, skaitymo registrais, skaitikliais:

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


Šaltinio kode yra paprasta_switch_CLI programa, skirta patogiam programinės įrangos jungiklio API naudojimui.

Šį ir kitus pavyzdžius galite atsisiųsti iš saugyklos.

P4 programavimo kalba

PS Šios vasaros pradžioje „Intel“ pasirašė susitarimą įsigyti „Barefoot Networks“, siekdama greitai patenkinti „Hyperscale Cloud“ vartotojų poreikius. Kaip sakė Navinas Shenoy (vykdomasis viceprezidentas ir „Intel Corporation“ duomenų centro grupės generalinis direktorius), tai leis „Intel“ suteikti didesnį darbo krūvį ir daugiau galimybių duomenų centrų klientams.

Mano asmenine nuomone, neturėtume pamiršti, kad „Intel“ yra FPGA lustų gamybos lyderis ir turi puikią „Quartus“ aplinką. Tai reiškia, kad galime tikėtis, kad atėjus Intel Barefoot ne tik išplės savo produktų liniją, bet ir Quartus bei P4 Studio sulauks rimtų Toffino ir Toffino 2 linijos atnaujinimų bei papildymų.

Oficialus P4 bendruomenės narys – įmonė Veiksnių grupė.

Šaltinis: www.habr.com

Добавить комментарий