Gjuha e programimit P4

Gjuha e programimit P4
P4 është një gjuhë programimi e krijuar për të programuar rregullat e rrugëtimit të paketave. Ndryshe nga një gjuhë me qëllime të përgjithshme si C ose Python, P4 është një gjuhë specifike për domenin me një numër dizajnesh të optimizuara për drejtimin e rrjetit.

P4 është një gjuhë me burim të hapur e licencuar dhe mirëmbajtur nga një organizatë jofitimprurëse e quajtur P4 Language Consortium. Ai mbështetet gjithashtu nga Open Networking Foundation (ONF) dhe Linux Foundation (LF), dy nga organizatat më të mëdha ombrellë për projektet e rrjeteve me burim të hapur.
Gjuha u krijua fillimisht në 2013 dhe u përshkrua në një dokument SIGCOMM CCR të vitit 2014 të titulluar "Programimi i procesorit të rrugëtimit të paketave, i pavarur nga protokolli".

Që nga fillimi i tij, P4 është rritur dhe evoluar në mënyrë eksponenciale, duke u bërë shpejt një standard për përshkrimin e transmetimit të paketave nga pajisjet e rrjetit, duke përfshirë adaptorët e rrjetit, ndërprerësit dhe ruterat.

"SDN ka transformuar industrinë e rrjeteve dhe P4 e çon SDN në një nivel tjetër duke sjellë programueshmërinë në rrugë," tha Guru Parulkar, drejtor ekzekutiv i Open Networking Foundation.

Gjuha P4 u krijua fillimisht nga një grup inxhinierësh dhe studiuesish nga Google, Intel, Microsoft Research, Barefoot, Princeton dhe Stanford. Qëllimi ishte i thjeshtë: të krijoni një gjuhë të lehtë për t'u përdorur që një zhvillues softuerësh mund ta mësonte brenda një dite dhe ta përdorte për të përshkruar me saktësi se si dërgohen paketat nëpër rrjete.

Që në fillim, P4 u krijua për të qenë i pavarur nga objektivi (d.m.th. një program i shkruar në P4 mund të përpilohej i pandryshuar për të ekzekutuar në një sërë objektivash si ASIC, FPGA, CPU, NPU dhe GPU).

Gjuha është gjithashtu e pavarur nga protokolli (d.m.th., një program P4 mund të përshkruajë protokollet ekzistuese standarde ose të përdoret për të specifikuar mënyra të reja adresimi me porosi).

Në industri, P4 përdoret për programimin e pajisjeve. Ndoshta në të ardhmen standardet Internet-RFC dhe IEEE do të përfshijnë edhe specifikimin P4.

P4 mund të përdoret si për pajisjet e programueshme ashtu edhe për pajisjet me funksione fikse. Për shembull, përdoret për të regjistruar me saktësi sjelljen e tubacionit të ndërprerësit në API-të e ndërfaqes së abstraksionit të ndërprerësit (SAI) të përdorura nga OS switch SONiC me burim të hapur. P4 përdoret gjithashtu në projektin ONF Stratum për të përshkruar sjelljen e ndërrimit në një sërë pajisjesh fikse dhe të programueshme.

Për herë të parë, përshkrimi i sjelljes së ndërprerësit dhe përshtatësve të rrjetit ju lejon të krijoni një model të saktë të ekzekutueshëm të të gjithë rrjetit përpara vendosjes. Ofruesit e mëdhenj të reve kompjuterike mund të testojnë dhe korrigjojnë rrjetin tërësisht duke përdorur softuer, duke ulur ndjeshëm kohën dhe koston e testimit të ndërveprimit në laborator pa kërkuar pajisje të shtrenjta.

Duke përdorur P4, shitësit e pajisjeve të rrjetit mund të presin sjellje të përbashkëta të rrugës në të gjitha produktet, duke lejuar ripërdorimin e infrastrukturës së testimit, duke thjeshtuar zhvillimin e softuerit të menaxhimit dhe në fund të fundit duke siguruar ndërveprim.

Sigurisht, P4 mund të përdoret për të shkruar programe që përshkruajnë mënyra krejtësisht të reja të rrugëtimit. Për shembull, P4 përdoret gjerësisht për telemetri dhe matje në qendrat e të dhënave, ndërmarrjet dhe rrjetet e ofruesve të shërbimeve.

Komuniteti hulumtues gjithashtu është rritur. Disa grupe kryesore kërkimore të rrjeteve akademike kanë publikuar aplikacione të reja emocionuese të bazuara në programet P4, duke përfshirë balancimin e ngarkesës, protokollet e konsensusit dhe ruajtjen e vlerave kryesore. Një paradigmë e re programimi po krijohet, inovacioni po kalon nga hardueri në softuer, duke lejuar që të shfaqen shumë ide të papritura, të reja dhe gjeniale.

Komuniteti i zhvilluesve ka dhënë kontribut të rëndësishëm në zhvillimin e kodit, duke përfshirë përpiluesit, tubacionet, modelet e sjelljes, API-të, kornizat e testimit, aplikacionet dhe më shumë. Kompani të tilla si Alibaba, AT&T, Barefoot, Cisco, Fox Networks, Google, Intel, IXIA, Juniper Networks, Mellanox, Microsoft, Netcope, Netronome, VMware, Xilinx dhe ZTE kanë zhvillues të dedikuar; nga universitete duke përfshirë BUPT, Cornell, Harvard, MIT, NCTU, Princeton, Stanford, Technion, Tsinghua, UMass dhe USI; dhe projektet me burim të hapur duke përfshirë CORD, FD.io, OpenDaylight, ONOS, OvS, SAI dhe Stratum nxjerrin në pah faktin se P4 është një projekt i pavarur i komunitetit.

Gjenerimi tipik i kontrolluesve për gjuhën P4:

Gjuha e programimit P4

Perspektivat e aplikimit

Gjuha e programimit P4
Meqenëse gjuha është e destinuar për ruting aplikacionet, lista e kërkesave dhe opsioneve të projektimit është e ndryshme në krahasim me gjuhët e programimit me qëllime të përgjithshme. Karakteristikat kryesore të gjuhës janë:

  1. Pavarësia nga zbatimi i synuar;
  2. Pavarësia e protokollit(eve) të përdorura;
  3. Rikonfigurimi i fushës.

Pavarësia nga zbatimi i synuar

Programet P4 janë krijuar të jenë të pavarura nga zbatimi, që do të thotë se mund të kompilohen për shumë lloje të ndryshme të motorëve ekzekutues, të tillë si procesorë me qëllime të përgjithshme, FPGA, sistem mbi çipa, procesorë rrjeti dhe ASIC. Këto lloje të ndryshme makinerish njihen si objektiva P4, dhe çdo objektiv kërkon një përpilues për të kthyer kodin burimor P4 në një model të ndërprerësit të synuar. Përpiluesi mund të ndërtohet në pajisjen e synuar, softuerin e jashtëm, apo edhe një shërbim cloud. Për shkak se shumë nga objektivat origjinale për programet P4 ishin për ndërrim të thjeshtë të paketave, është shumë e zakonshme të dëgjohet termi "ndërprerës P4" edhe pse "objektivi P4" është më i saktë.

Pavarësia e protokollit(eve) të përdorur

P4 është i pavarur nga protokolli. Kjo do të thotë që gjuha nuk ka mbështetje amtare për protokollet e zakonshme si IP, Ethernet, TCP, VxLAN ose MPLS. Në vend të kësaj, programuesi P4 përshkruan formatet e kokës dhe emrat e fushave të protokolleve të kërkuara në program, të cilat nga ana e tyre interpretohen dhe përpunohen nga programi i përpiluar dhe pajisja e synuar.

Rikonfigurimi i fushës

Pavarësia e protokollit dhe modeli abstrakt i gjuhës lejon rikonfigurimin - objektivat P4 duhet të jenë në gjendje të ndryshojnë përpunimin e paketave pasi sistemi të vendoset. Kjo aftësi është shoqëruar tradicionalisht me rrugëzimin përmes procesorëve me qëllime të përgjithshme ose procesorëve të rrjetit në vend të qarqeve të integruara me funksione fikse.

Megjithëse nuk ka asgjë në gjuhë që do të parandalonte optimizimin e performancës së një grupi të caktuar protokollesh, këto optimizime janë të padukshme për autorin e gjuhës dhe në fund mund të zvogëlojnë fleksibilitetin e sistemit dhe qëllimeve dhe rikonfigurimin e tyre.

Këto karakteristika të gjuhës fillimisht u përcaktuan nga krijuesit e saj me fokus në përdorimin e saj të gjerë në infrastrukturën e rrjetit.

Gjuha tashmë përdoret në shumë kompani:

1) Qendrat e të dhënave në shkallë të lartë;

Kompania kineze Tencent është kompania më e madhe e investimeve në botë dhe një nga firmat më të mëdha të kapitalit sipërmarrës. Filialet e Tencent, si në Kinë ashtu edhe në vende të tjera anembanë botës, specializohen në fusha të ndryshme të biznesit të teknologjisë së lartë, duke përfshirë shërbime të ndryshme të internetit, zhvillime në fushën e inteligjencës artificiale dhe argëtimit elektronik.

P4 dhe rutimi i programueshëm janë teknologji të avancuara që përdoren në arkitekturën e rrjetit të kompanisë.

Si një nga krijuesit, Google është krenar të vërë në dukje miratimin e shpejtë të P4 në industrinë e rrjeteve dhe në veçanti në dizajnin arkitekturor të qendrave të të dhënave.

2) Shoqëritë tregtare;

Goldman Sachs përfiton nga puna me komunitetin me burim të hapur dhe duke zhvilluar standarde dhe zgjidhje të përbashkëta për të inovuar infrastrukturën e rrjetit dhe për të ofruar zgjidhje më të mira për klientët.

3) Prodhimi;

E gjithë industria e rrjeteve do të përfitonte nga një gjuhë si P4 që përcakton në mënyrë unike sjelljen e përcjelljes. Cisco gjithashtu beson në transferimin e linjave të produkteve të saj për të përdorur këtë gjuhë.

Juniper Networks ka përfshirë P4 dhe P4 Runtime në një numër produktesh dhe ofron qasje programatike në procesorin e integruar të Juniper dhe kodin e tij të softuerit.

Ruijie Networks është një mbështetës i fortë i P4 dhe përfitimeve që ai sjell në rrjete. Me P4, kompania mund të krijojë dhe të ofrojë zgjidhjet më të mira në klasë për një gamë të gjerë klientësh.

4) Ofruesit e telekomunikacionit;

AT&T ishte një adoptues i hershëm i P4, një nga të parët që përdori P4 për të përcaktuar sjelljen që donte të shihte në rrjetet e saj dhe për të përdorur pajisje përcjellëse të programueshme P4 në rrjetin e saj.

Në Deutsche Telekom, gjuha përdoret për prototipin e funksioneve kryesore të rrjetit si pjesë e programit Access 4.0.

5) Industria gjysmëpërçuese;

Gjuha i mundësoi Barefoot të zbatonte një paradigmë të re për ofrimin e aftësive të softuerit në planin e rrugëtimit të rrjetit.

Xilinx ishte një nga themeluesit e P4.org dhe u përfshi në mënyrë aktive në zhvillimin e gjuhës P4 dhe e zbatoi atë në platformat e programueshme të bazuara në FPGA për pajisjet SmartNIC dhe NFV, duke lëshuar një nga përpiluesit e parë P416 si pjesë e dizajnit SDNet.

6) Software.

VMware beson se P4 krijon energji, inovacion dhe komunitet të jashtëzakonshëm që po nxit transformimin kuptimplotë dhe të nevojshëm në rrjet. VMware ka qenë pjesë e kësaj lëvizjeje industrie që nga fillimi, pasi një valë e re inovacioni drejtohet nga qasje të bazuara në softuer që zgjerojnë aftësitë e infrastrukturës dhe e zbatojnë atë në produktet më të fundit.

Kështu, P4 është një gjuhë programimi e pavarur nga objektivi dhe e pavarur nga protokolli që përdoret nga industria dhe akademia për të përcaktuar në mënyrë unike sjelljen e kursimit të paketave si një program, i cili nga ana tjetër mund të përpilohet për objektiva të shumtë. Sot, objektivat përfshijnë çelsat e harduerit dhe softuerit, çelsat e hipervizorit, NPU, GPU, FPGA, SmartNIC dhe ASIC.

Karakteristikat kryesore të gjuhës zgjerojnë ndjeshëm fushën e aplikimit të saj dhe sigurojnë zbatimin e saj të shpejtë në arkitekturat e rrjetit.

Si T'ia Fillohet

P4 është një projekt i hapur, të gjitha informacionet përkatëse janë në faqen e internetit P4.org

Lidhja e depove https://github.com/p4lang, ku mund të merrni shembull kod burimor dhe udhëzime.

Shtojca për Eclipse me mbështetje P4, por ne mund të rekomandojmë P4 Studio nga Zbathur.

Gjuha e programimit P4

Le të shohim abstraksionet kryesore të kernelit:

Përcaktimi i titujve — me ndihmën e tyre përcaktohen titujt e protokollit.

Përkufizimi i titullit specifikon:

  • përshkrimi i formateve të paketave dhe emrave të fushave të kokës
  • fushat e lejuara fikse dhe të ndryshueshme

Për shembull

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

Analizuesit - detyra e tyre është të analizojnë titujt.

Shembulli i mëposhtëm i analizuesit do të përcaktojë kalimin e gjendjes përfundimtare të makinës nga një gjendje fillestare në një nga dy gjendjet përfundimtare:

Gjuha e programimit 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;
        }
    }…
}

tavolina — përmbajnë gjendjet e makinës që lidhin çelësat e përdoruesit me veprimet. Aktivitet — një përshkrim se si duhet të manipulohet paketa.

Tabelat përmbajnë gjendje (të përcaktuara në nivelin e menaxhimit) për përcjelljen e paketave, përshkruajnë njësinë Match-Action

Paketat përputhen me:

  • Përputhje e saktë
  • Përputhja më e gjatë e prefiksit (LPM)
  • Përputhje e trefishtë (maskim)

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

Të gjitha veprimet e mundshme duhet të përcaktohen paraprakisht në tabela.

Veprimet përbëhen nga kodi dhe të dhënat. Të dhënat vijnë nga niveli i menaxhimit (p.sh. adresat IP/numrat e portave). Disa primitivë pa lak mund të specifikohen drejtpërdrejt në veprim, por numri i udhëzimeve duhet të jetë i parashikueshëm. Prandaj, veprimet nuk mund të përmbajnë asnjë unazë ose deklarata të kushtëzuara.

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

Modulet Match-Action — veprimet për të krijuar një çelës kërkimi, kërkimi në një tabelë, kryerja e veprimeve.

Një shembull tipik i një moduli është paraqitur në figurë:

Gjuha e programimit P4

Kontrollo rrjedhën — tregon rendin në të cilin përdoren modulet Match-Action. Ky është një program imperativ që përcakton logjikën e nivelit të lartë dhe sekuencën Match-Action. Rrjedha e kontrollit lidh të gjitha objektet duke përcaktuar nivelin e kontrollit.

Objektet e jashtme janë objekte specifike me një arkitekturë të përcaktuar qartë dhe ndërfaqe API. Për shembull, llogaritja e shumës së kontrollit, regjistrat, numëruesit, numëruesit, etj.

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 — strukturat e të dhënave të lidhura me secilën paketë.

Ekzistojnë 2 lloje të meta të dhënave:

  Meta të dhëna të personalizuara (strukturë boshe për të gjitha paketat)
    Këtu mund të vendosni çfarë të doni
    E disponueshme në të gjithë tubacionin
    i përshtatshëm për t'u përdorur për qëllimet tuaja, për shembull, për ruajtjen e një hash paketimi

  Meta të dhënat e brendshme - të ofruara nga arkitektura
    Porta hyrëse, porta e daljes janë përcaktuar këtu
    Vula kohore kur paketa ishte në radhë, thellësia e radhës
    multicast hash / radhë multicast
    Prioriteti i paketës, rëndësia e paketës
    Specifikimi i portës së daljes (p.sh. radha e daljes)

Përpiluesi P4

Përpiluesi P4 (P4C) gjeneron:

  1. Koha e ekzekutimit në planin e të dhënave
  2. API për menaxhimin e gjendjes së makinës në planin e të dhënave

Gjuha e programimit P4

Shembull i një ndërprerësi softuerësh në gjuhën P4

Kodet burimore mund të shkarkohen nga depoja.

p4lang/p4c-bm: krijon konfigurimin JSON për bmv2
p4lang/bmv2: një ndërprerës softuerësh që kupton konfigurimet e versionit JSON të bmv2

Figura tregon diagramin e përpilimit të projektit:

Gjuha e programimit P4

Manipulime me tabela, regjistra leximi, numërues:

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


Kodi burim përmban programin simple_switch_CLI për përdorim të përshtatshëm të API-së së ndërruesit të softuerit.

Ju mund ta shkarkoni këtë dhe shembuj të tjerë nga depoja.

Gjuha e programimit P4

PS Në fillim të kësaj vere, Intel nënshkroi një marrëveshje për të blerë Barefoot Networks në një përpjekje për të përmbushur shpejt nevojat e përdoruesve të Hyperscale Cloud. Siç tha Navin Shenoy (nënkryetar ekzekutiv dhe menaxher i përgjithshëm i Grupit të Data Center në Intel Corporation), kjo do të lejojë Intel të ofrojë ngarkesa më të mëdha pune dhe më shumë mundësi për klientët e qendrës së të dhënave.

Sipas mendimit tim personal, nuk duhet të harrojmë se Intel është lider në prodhimin e çipave FPGA dhe ka një mjedis të shkëlqyer Quartus. Kjo do të thotë që ne mund të presim që me ardhjen e Intel, Barefoot jo vetëm të zgjerojë linjën e saj të produkteve, por edhe Quartus dhe P4 Studio do të marrin përditësime dhe shtesa serioze në linjën Toffino dhe Toffino 2.

Anëtar zyrtar i komunitetit P4 - kompani grup faktorësh.

Burimi: www.habr.com

Shto një koment