P4 programazio-lengoaia

P4 programazio-lengoaia
P4 paketeen bideratze-arauak programatzeko diseinatutako programazio-lengoaia da. C edo Python bezalako erabilera orokorreko lengoaia bat ez bezala, P4 domeinu espezifikoko lengoaia da, sarearen biderapenerako optimizatutako diseinu ugari dituena.

P4 kode irekiko hizkuntza bat da, P4 Language Consortium izeneko irabazi-asmorik gabeko erakunde batek baimendutako eta mantentzen duena. Open Networking Foundation (ONF) eta Linux Foundation (LF) ere onartzen dute, kode irekiko sareko proiektuetarako aterki-erakunde handienetako bik.
Lengoaia 2013an sortu zen eta 2014ko SIGCOMM CCR paper batean deskribatu zen "Protokolo independentea, paketeen bideratze-prozesadorearen programazioa" izenekoa.

Sortu zenetik, P4 modu esponentzialean hazi eta eboluzionatu da, eta sareko gailuen paketeen transmisioa deskribatzeko estandar bihurtu da, sare-egokitzaileak, etengailuak eta bideratzaileak barne.

"SDN-k sareen industria eraldatu du, eta P4k SDN hurrengo mailara eramaten du bideragarritasuna programagarritasuna ekarriz", esan du Guru Parulkarrek, Open Networking Foundation-eko zuzendari exekutiboak.

P4 hizkuntza Google, Intel, Microsoft Research, Barefoot, Princeton eta Stanford-eko ingeniari eta ikertzaile talde batek sortu zuen jatorriz. Helburua sinplea zen: software-garatzaile batek egun batean ikas zezakeen hizkuntza erabilerraz bat sortzea eta paketeak sareetan nola bidaltzen diren zehaztasunez deskribatzeko.

Hasiera-hasieratik, P4 helburu independentea izateko diseinatu zen (hau da, P4n idatzitako programa bat aldatu gabe konpila zitekeen hainbat helburutan exekutatzeko, hala nola ASIC, FPGA, CPU, NPU eta GPU).

Hizkuntza ere protokolo independentea da (hau da, P4 programa batek lehendik dauden protokolo estandarrak deskriba ditzake edo helbideratze modu pertsonalizatu berriak zehazteko erabil daiteke).

Industrian, P4 gailuen programaziorako erabiltzen da. Agian etorkizunean Internet-RFC eta IEEE estandarrek P4 zehaztapena ere barne hartuko dute.

P4 funtzio programagarri nahiz finkoko gailuetarako erabil daiteke. Esaterako, SONiC switch OS kode irekiko sistema eragileak erabiltzen dituen Switch Abstraction Interface (SAI) APIetan zehaztasunez erregistratzeko erabiltzen da. P4 ONF Stratum proiektuan ere erabiltzen da gailu finko eta programagarri ezberdinetan aldatzeko portaera deskribatzeko.

Lehenengo aldiz, etengailuaren eta sare-egokigailuen portaera deskribatzeak sare osoaren eredu exekutagarri zehatza sortzeko aukera ematen du zabaldu aurretik. Hodeiko hornitzaile handiek sarea probatu eta arazketa dezakete softwarea erabiliz, eta laborategian elkarreragingarritasun-proben denbora eta kostua nabarmen murriztuz hardware garestia behar izan gabe.

P4 erabiliz, sare-ekipoen saltzaileek produktu guztietan azpiko bideratze-jokaera komuna espero dezakete, proba-azpiegiturak berrerabiltzea ahalbidetuz, kudeaketa-softwarearen garapena erraztuz eta, azken finean, elkarreragingarritasuna bermatuz.

Noski, P4 bideratze modu guztiz berriak deskribatzen dituzten programak idazteko erabil daiteke. Esate baterako, P4 oso erabilia da telemetria eta neurketarako datu-zentroetan, enpresa- eta zerbitzu-hornitzaileen sareetan.

Ikerketa-komunitateak ere urratsa egin du. Sare akademikoko ikerketa-talde nagusiek P4 programetan oinarritutako aplikazio berri zirraragarriak argitaratu dituzte, besteak beste, karga orekatzea, adostasun-protokoloak eta gako-balioen cachea. Programazio-paradigma berri bat sortzen ari da, berrikuntza hardwaretik softwarera pasatzen ari da, ustekabeko, berri eta asmamenezko ideia asko azaleratzeko aukera emanez.

Garatzaileen komunitateak ekarpen garrantzitsuak egin ditu kodearen garapenean, konpiladoreak, kanalizazioak, portaera-ereduak, APIak, proba-esparruak, aplikazioak eta abar barne. Alibaba, AT&T, Barefoot, Cisco, Fox Networks, Google, Intel, IXIA, Juniper Networks, Mellanox, Microsoft, Netcope, Netronome, VMware, Xilinx eta ZTE bezalako enpresek garatzaile dedikatuak dituzte; BUPT, Cornell, Harvard, MIT, NCTU, Princeton, Stanford, Technion, Tsinghua, UMass eta USI unibertsitateetatik; eta kode irekiko proiektuek, besteak beste, CORD, FD.io, OpenDaylight, ONOS, OvS, SAI eta Stratum nabarmentzen dute P4 komunitateko proiektu independentea dela.

P4 hizkuntzarako kontrolagailuen sorkuntza tipikoa:

P4 programazio-lengoaia

Aplikazio-aukerak

P4 programazio-lengoaia
Lengoaia aplikazioak bideratzeko pentsatuta dagoenez, eskakizunen eta diseinu aukeren zerrenda desberdina da erabilera orokorreko programazio lengoaiekin alderatuta. Hizkuntzaren ezaugarri nagusiak hauek dira:

  1. Helburuen ezarpenarekiko independentzia;
  2. Erabilitako protokolo(k) independentzia;
  3. Eremu birkonfiguragarritasuna.

Helburuen ezarpenarekiko independentzia

P4 programak inplementazio independenteak izateko diseinatuta daude, hau da, exekuzio-motor mota askotarako konpila daitezke, hala nola erabilera orokorreko prozesadoreetarako, FPGAetarako, sistema-on-txipetarako, sareko prozesadoreetarako eta ASICetarako. Makina mota hauek P4 helburu gisa ezagutzen dira, eta helburu bakoitzak konpiladore bat behar du P4 iturburu-kodea helburu-switching-eredu bihurtzeko. Konpilatzailea xede gailuan, kanpoko softwarean edo hodeiko zerbitzu batean ere eraiki daiteke. P4 programen jatorrizko helburu asko paketeen aldaketa soiletarako zirenez, oso ohikoa da "P4 switch" terminoa entzutea, nahiz eta "P4 xede" zehatzagoa izan.

Erabilitako protokolo(k) independentzia

P4 protokolo independentea da. Horrek esan nahi du hizkuntzak ez duela jatorrizko laguntzarik IP, Ethernet, TCP, VxLAN edo MPLS bezalako protokolo arruntetarako. Horren ordez, P4 programatzaileak programan eskatutako protokoloen goiburuko formatuak eta eremu-izenak deskribatzen ditu, eta, aldi berean, konpilatutako programak eta xede-gailuak interpretatzen eta prozesatzen ditu.

Eremu birkonfiguragarritasuna

Protokoloaren independentzia eta hizkuntza eredu abstraktuak birkonfiguragarritasuna ahalbidetzen du: P4 helburuek paketeen prozesamendua aldatzeko gai izan behar dute sistema zabaldu ondoren. Funtzio finkoko zirkuitu integratuetan baino, erabilera orokorreko prozesadoreen edo sareko prozesadoreen bidez bideratzearekin lotu izan da gaitasun hori.

Hizkuntzan protokolo-multzo jakin baten errendimendua optimizatzea eragotziko lukeen ezer ez badago ere, optimizazio hauek hizkuntzaren egilearentzat ikusezinak dira eta, azken finean, sistemaren eta helburuen malgutasuna eta haien birkonfiguragarritasuna murriztu ditzakete.

Hizkuntzaren ezaugarri horiek hasiera batean bere sortzaileek finkatu zituzten sareko azpiegituretan erabilera zabalean jarrita.

Hizkuntza enpresa askotan erabiltzen da dagoeneko:

1) Hyperscale datu-zentroak;

Tencent Txinako konpainia munduko inbertsio enpresarik handiena eta arrisku-kapitaleko enpresa handienetako bat da. Tencent-en filialak, Txinan zein munduko beste herrialde batzuetan, goi-teknologiako negozioaren hainbat arlotan espezializatuta daude, besteak beste, Interneteko hainbat zerbitzu, adimen artifizialaren eta entretenimendu elektronikoaren alorreko garapenak.

P4 eta bideratze programagarria konpainiaren sare-arkitekturan erabiltzen diren teknologia aurreratuak dira.

Sortzaileetako bat den heinean, Google harro dago sareen industrian eta bereziki datu-zentroen diseinu arkitektonikoan P4ren harrera azkarra izan dela.

2) Merkataritza-sozietateak;

Goldman Sachs-ek kode irekiko komunitatearekin lan egiteaz eta estandar eta soluzio komunak garatzeaz baliatzen da sare-azpiegitura berritzeko eta bezeroei irtenbide hobeak emateko.

3) Ekoizpena;

Sare-industria osoak birbidaltze-jokabidea modu berezian definitzen duen P4 bezalako hizkuntza baten onura izango luke. Ciscok bere produktu-lerroak hizkuntza hau erabiltzeko transferitzea ere uste du.

Juniper Networks-ek P4 eta P4 Runtime sartu ditu hainbat produktutan, eta Juniper kapsulatutako prozesadorerako eta bere software-koderako sarbide programatikoa eskaintzen du.

Ruijie Networks P4ren eta sareei ekartzen dizkien onuren aldekoa da. P4-rekin, konpainiak soluzio onenak sortu eta eman ditzake bezero sorta zabalari.

4) Telekomunikazio hornitzaileak;

AT&T-k P4-ren lehen erabiltzailea izan zen, P4 erabili zuen lehenetariko bat bere sareetan ikusi nahi zuen portaera definitzeko eta P4 birbidaltze-gailu programagarriak bere sarean erabiltzen.

Deutsche Telekom-en, Access 4.0 programaren barruan sareko funtzio nagusiak prototipatzeko erabiltzen da hizkuntza.

5) Erdieroaleen industria;

Hizkuntzari esker, Barefoot-i sarearen bideratze-planoari software-gaitasunak emateko paradigma berri bat ezartzea ahalbidetu zuen.

Xilinx P4.org-en sortzaileetako bat izan zen eta P4 lengoaiaren garapenean aktiboki parte hartu zuen eta FPGAn oinarritutako plataforma programagarrietan ezarri zuen SmartNIC eta NFV hardwarerako, lehen P416 konpiladoreetako bat kaleratu zuen SDNet diseinuaren zati gisa.

6) Softwarea.

VMware-k uste du P4k sarean eraldaketa esanguratsu eta beharrezkoak bultzatzen dituen energia, berrikuntza eta komunitate izugarria sortzen duela. VMware industria-mugimendu honen parte izan da hasieratik, berrikuntza-bolada berri bat azpiegitura-gaitasunak hedatzen dituzten eta azken produktuetan inplementatzen duten softwarean oinarritutako ikuspegiek bultzatzen baitute.

Beraz, P4 helburu- eta protokolo-lengoaia independentea da, industriak eta akademiak paketeen bideratze-jokaera programa gisa definitzeko erabiltzen dutena, eta, aldi berean, helburu anitzetarako konpila daiteke. Gaur egun, helburuak hardware eta software etengailuak, hipervisoreak, NPUak, GPUak, FPGAak, SmartNICak eta ASICak dira.

Hizkuntzaren ezaugarri nagusiek bere aplikazioaren esparrua nabarmen zabaltzen dute eta sare-arkitekturetan inplementazio azkarra bermatzen dute.

Pizten

P4 proiektu irekia da, informazio garrantzitsua webgunean dago P4.org

Biltegiaren esteka https://github.com/p4lang, non iturburu-kodearen adibidea eta tutorialak lor ditzakezu.

Плагин Eclipse-rako P4 laguntzarekin, baina gomenda dezakegu P4 Estudioa Oinutsik.

P4 programazio-lengoaia

Ikus ditzagun nukleoaren abstrakzio nagusiak:

Goiburuak zehaztea β€” haien laguntzarekin, protokoloen goiburuak zehazten dira.

Goiburuko definizioak zehazten du:

  • pakete formatuen deskribapena eta goiburuko eremuen izenak
  • baimendutako eremu finkoak eta aldagarriak

Adibidez

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

Analizatzaileak β€” haien zeregina titularrak analizatzea da.

Ondorengo analizatzaile-adibide honek makinaren azken egoeraren trantsizioa zehaztuko du hasierako egoera batetik amaierako bi egoeratara:

P4 programazio-lengoaia

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

taulak β€” erabiltzaileen gakoak ekintzekin lotzen dituzten makinen egoerak eduki. Jarduera β€” paketea nola manipulatu behar den deskribatzea.

Taulek paketeak birbidaltzeko egoerak (kudeaketa mailan definituak) dituzte, Match-Action unitatea deskribatzen dute.

Paketeak bat egiten dute:

  • Bat-etortze zehatza
  • Aurrizkien bat etortzerik luzeena (LPM)
  • Bat etortze hirukoitza (maskarra)

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

Ekintza posible guztiak tauletan zehaztu behar dira aldez aurretik.

Ekintzak kodea eta datuez osatuta daude. Datuak kudeaketa mailatik datoz (adibidez, IP helbideak/portuko zenbakiak). Begiztarik gabeko primitibo jakin batzuk zuzenean zehaztu daitezke ekintzan, baina instrukzio kopurua aurreikusi behar da. Beraz, ekintzek ezin dute inolako begiztarik edo baldintzazko adierazpenik izan.

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 moduluak β€” bilaketa-gako bat sortzeko ekintzak, taula batean bilatu, ekintzak egiteko.

Modulu baten adibide tipiko bat irudian ageri da:

P4 programazio-lengoaia

Kontrol-fluxua β€” Match-Action moduluak zein ordenatan erabiltzen diren adierazten du. Hau maila altuko logika eta Match-Action sekuentzia definitzen dituen ezinbesteko programa da. Kontrol-fluxuak objektu guztiak lotzen ditu kontrol-maila zehaztuz.

Kanpoko objektuak arkitektura eta API interfazeak argi eta garbi definitutako objektu espezifikoak dira. Adibidez, checksum kalkulua, erregistroak, kontagailuak, kontagailuak, etab.

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
}

Metadatuak β€” pakete bakoitzari lotutako datu-egiturak.

2 metadatu mota daude:

  Metadatu pertsonalizatuak (pakete guztien egitura hutsa)
    Hemen nahi duzuna jar dezakezu
    Hodi osoan eskuragarri
    erosoa zure helburuetarako erabiltzeko, adibidez, pakete hash bat gordetzeko

  Barne metadatuak - arkitekturak emandakoak
    Sarrerako ataka, irteerako ataka hemen definitzen dira
    Paketea ilaran jarri zeneko denbora-zigilua, ilararen sakontasuna
    multicast hash / multicast ilara
    Paketeen lehentasuna, paketearen garrantzia
    Irteerako atakaren zehaztapena (adibidez, irteera-ilara)

P4 konpilatzailea

P4 konpilatzaileak (P4C) sortzen du:

  1. Datu-planoaren exekuzio-denbora
  2. Datu-planoan makinaren egoera kudeatzeko APIa

P4 programazio-lengoaia

P4 hizkuntzan software etengailu baten adibidea

Iturburu-kodeak biltegitik deskargatu daitezke.

p4lang/p4c-bm: JSON konfigurazioa sortzen du bmv2rako
p4lang/bmv2: bmv2 bertsioaren JSON konfigurazioak ulertzen dituen software etengailua

Irudiak proiektuaren konpilazio diagrama erakusten du:

P4 programazio-lengoaia

Taulekin manipulazioak, irakurketa-erregistroak, kontagailuak:

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


Iturburu-kodeak simple_switch_CLI programa dauka software-aldaketaren APIa eroso erabiltzeko.

Hau eta beste adibide batzuk deskarga ditzakezu biltegitik.

P4 programazio-lengoaia

PS Uda honen hasieran, Intelek Barefoot Networks erosteko akordioa sinatu zuen Hyperscale Cloud erabiltzaileen beharrak azkar asetzeko asmoz. Navin Shenoyk (Intel Corporation-eko Data Center Group-eko presidenteorde exekutiboa eta zuzendari nagusia) esan zuenez, horri esker, Intelek lan-karga handiagoak eta datu-zentroko bezeroei aukera gehiago eskain diezazkioke.

Nire ustez, ez dugu ahaztu behar Intel FPGA txip-en ekoizpenean liderra dela eta Quartus ingurune bikaina duela. Horrek esan nahi du Intel-en etorrerarekin Barefoot-ek bere produktu-lerroa zabaltzeaz gain, Quartus eta P4 Studio-k Toffino eta Toffino 2 lineako eguneratze eta gehigarri serioak jasoko dituela.

P4 komunitateko kide ofiziala - enpresa Faktore taldea.

Iturria: www.habr.com

Gehitu iruzkin berria