
P4 është një gjuhë programimi e krijuar për programimin e rregullave të rrugëzimit të paketave. Ndryshe nga gjuhët e zakonshme si C ose Python, P4 është një gjuhë e fokusuar në temë me një mori strukturash të optimizuara për rrugëzimin në rrjet.
P4 Ă«shtĂ« njĂ« gjuhĂ« me kod tĂ« hapur, e licencuar dhe e mbĂ«shtetur nga njĂ« organizatĂ« jo-fitimprurĂ«se qĂ« quhet P4 Language Consortium. Ajo gjithashtu mbĂ«shtetet nga Open Networking Foundation (ONF) dhe Linux Foundation (LF) â dy organizatat mĂ« tĂ« mĂ«dha qĂ« mbulojnĂ« projekte me kod tĂ« hapur nĂ« fushĂ«n e teknologjisĂ« sĂ« rrjetit.
Gjuha u shpik fillimisht në vitin 2013 dhe u përshkrua në vitin 2014 në një dokument SIGCOMM CCR me titull "Programimi i procesorëve të rrugëzimit të paketave, i pavarur nga protokollet".
Që nga krijimi i saj, P4 ka pasur një rritje eksponenciale dhe zhvillim, duke u bërë shpejt standardi i përshkrimit të transmetimit të paketave nga pajisjet rrjetërore, duke përfshirë adaptratorët rrjetërore, switch-t dhe routerët.
«SDN ka transformuar industrinë e rrjeteve, ndërsa P4 e çon SDN në një tjetër nivel duke ofruar programueshmërinë në fushën e marshallimit», tha Guru Parulkar, drejtor ekzekutiv i Open Networking Foundation.
Gjuha P4 u krijua fillimisht nga një grup inxhinierësh dhe kërkuesish nga Google, Intel, Microsoft Research, Barefoot, Princeton dhe Stanford. Qëllimi ishte i thjeshtë: të krijohej një gjuhë e lehtë për t'u përdorur, që zhvilluesi i softuerit mund ta mësojë në një ditë dhe ta përdorë për të përshkruar saktësisht se si paketat kalojnë në rrjet.
Nga fillimi, P4 është zhvilluar si një gjuhë e pavarur nga objekti (dmth. një program i shkruar në P4 mund të përmblidhet pa ndryshime për të funksionuar në objekte të ndryshme, si ASIC, FPGA, CPU, NPU dhe GPU).
Gjithashtu, gjuha është e pavarur nga protokollet (dmth. një program P4 mund të përshkruajë protokolle standarde ekzistuese ose të përdoret për të specifikuar modet e reja të adresimit të personalizuara).
Në industri, P4 aplikohet për programimin e pajisjeve. Mundësisht, në të ardhmen Internet-RFC dhe standardet IEEE do të përfshijnë gjithashtu specifikimin P4.
P4 mund të përdoret si për pajisjet e programueshme, ashtu edhe për ato me funksion të fiksuar. Për shembull, ai përdoret për të regjistruar me saktësi sjelljen e konvejorit të switch-it në ndërfaqet e API-së të ndërfaqes së abstraksionit të switch-it (SAI), të përdorura nga sistemi operativ i switch-it me kod burimor SONiC. P4 gjithashtu përdoret në projektin ONF Stratum për të përshkruar sjelljen e ndërlidhjes përmes një shume të pajisjeve stacionare dhe programueshme.
Përshkrimi i sjelljes së switch-it dhe adaptatorëve rrjetërore lejon për herë të parë krijimin e një modeli ekzekutiv të saktë të gjithë rrjetit para se të implementohet. Ofruesit e mëdhenj të shërbimeve në re mund të testojnë dhe debug-ojnë plotësisht rrjetin përmes softuerit, duke reduktuar ndjeshëm kohën dhe kostot e testimit të ndërveprimit në laborator, pa kërkuar pajisje të shtrenjta.
Duke P4, ofruesit e pajisjeve rrjetërore mund të presin një sjellje themelore të përbashkët të rutimit në të gjitha produktet, çka lejon ripërdorimin e infrastrukturës së testeve, thjeshton zhvillimin e softuerit për menaxhim dhe, në fund, garanton përputhshmërinë.
Sigurisht, P4 mund të përdoret për të shkruar programe që përshkruajnë mënyra krejt të reja të rrutimit. Për shembull, P4 përdoret gjerësisht për telemetrinë dhe matjet në qendrat e të dhënave, rrjetet e bizneseve dhe ofruesit e shërbimeve.
Komuniteti kërkimor gjithashtu është aktivizuar. Disa grupe kërkimore akademike të njohura në teknologjitë rrjetërore kanë publikuar aplikacione të reja interesante të bazuara në programet P4, duke përfshirë balancimin e ngarkesës, protokollet e kompromisit dhe ruajtjen e vlerës së çelësit. Po krijohet një paradigmë e re programimi, inovacionet po kalojnë nga hardueri në softuer, duke lejuar shfaqjen e shumë ideve të papritura, të reja dhe brilante.
Bashkimi i zhvilluesve ka kontribuar ndjeshëm në zhvillimin e kodit, duke përfshirë kompilatorë, programe pipeline, modele sjelljeje, API, mjedise testimi, aplikacione dhe shumë më tepër. Zhvillues të përkushtuar gjenden në kompani si Alibaba, AT&T, Barefoot, Cisco, Fox Networks, Google, Intel, IXIA, Juniper Networks, Mellanox, Microsoft, Netcope, Netronome, VMware, Xilinx dhe ZTE; nga universitete si BUPT, Cornell, Harvard, MIT, NCTU, Princeton, Stanford, Technion, Tsinghua, UMass, dhe USI; dhe projekte me kod të hapur, përfshirë CORD, FD.io, OpenDaylight, ONOS, OvS, SAI dhe Stratum, i theksojnë faktin që P4 është një projekt publik i pavarur.
Gjatësia tipike e gjenerimit të kontrollorëve për gjuhën P4:

Perspektivat e aplikimit

Duke qenë se gjuha është e destinuar për aplikacione rutimi, lista e kërkesave dhe mundësive të dizajnit ndryshon në krahasim me gjuhët e programimit të përgjithshëm. Karakteristikat kryesore të gjuhës janë:
- Pavarësia nga implementimi i synuar;
- Pavarësia nga protokolli(-t) e përdorura;
- Rikokfigurueshmëria e fushave.
Pavarësia nga implementimi i synuar.
Programet P4 zhvillohen në një mënyrë që ato të mos varen nga zbatimi, pra ato mund të kompilohet për shumë lloje të ndryshme të makinerive ekzekutuese, siç janë procesorë të zakonshëm, FPGA, sisteme në çip, procesorë rrjetesh dhe ASIC. Këto lloje të ndryshme makinash janë të njohura si qëllime P4, dhe për çdo qëllim nevojitet një kompilator për të transformuar kodin burimor P4 në modelin e switch-it të synuar. Kompilatori mund të jetë i integruar në pajisjen e synuar, në software të jashtëm, ose madje edhe në një shërbim të re cloud. Duke qenë se shumë nga qëllimet e para për programet P4 u përdorën për një kalim të thjeshtë të pakove, shumë shpesh mund të dëgjohet termi 'switch P4', edhe nëse përdorimi 'qëllimi P4' është më i saktë.
Pavarësia nga protokolli(-t) i përdorur
P4 është një gjuhë e pavarur nga protokollet. Kjo do të thotë se gjuha nuk ka mbështetje ndihmëse për protokollet e zakonshme, si IP, Ethernet, TCP, VxLAN ose MPLS. Në vend të kësaj, programuesi i P4 përshkruan format e header-ave dhe emrat e fushave të protokolleve të kërkuara në program, të cilat më pas interpretohen dhe përpunohen nga programi i kompiluara dhe pajisja përkatëse.
Rikonfigurueshmëria e fushave
PavarĂ«sia nga protokolli dhe modeli i gjuhĂ«s abstrakte lejojnĂ« rikonfigurueshmĂ«rinĂ« â objektivat e P4 duhet tĂ« kenĂ« mundĂ«sinĂ« pĂ«r tĂ« ndryshuar pĂ«rpunimin e paketave pas vendosjes sĂ« sistemit. Ky aktiv Ă«shtĂ« tradicionalisht i lidhur me ruterimin pĂ«rmes procesorĂ«ve tĂ« pĂ«rgjithshĂ«m ose procesorĂ«ve rrjetĂ«, dhe jo me çipat e integruar me funksione fikse.
Megjithëse në gjuhë nuk ka asgjë që mund të pengojë optimizimin e punës së një grupi të caktuar protokollesh, këto optimizime janë të padukshme për autorin e gjuhës dhe mund, në fund të fundit, të reduktojnë fleksibilitetin e sistemit dhe objektivat e tij dhe rikonfigurueshmërinë e tyre.
Karakteristikat e këtij gjuhe janë fillimisht të dizajnuara nga krijuesit e saj për përdorim të gjerë në infrastrukturën e rrjetit.
Tani gjuha po përdoret në shumë kompani:
1) Qendrat e përpunimit të të dhënave me hiperskala;
Kompania kineze Tencent është kompania më e madhe e investimeve në botë dhe një nga kompanitë më të mëdha të kapitalit të rrezikut. Filialet e Tencent, si në vetë Kinë ashtu edhe në vende të tjera, specializohen në fusha të ndryshme të biznesit me teknologji të lartë, përfshirë shërbime të ndryshme në internet, zhvillime në fushën e inteligjencës artificiale dhe argëtim elektronik.
P4 dhe rrugëzimi i programueshëm janë teknologjitë më të avancuara që përdoren në arkitekturën e rrjetit të kompanisë.
Duke qenë një nga krijuesit, Google me krenari thekson përhapjen e shpejtë të P4 në industrinë e rrjetit dhe, në veçanti, në fushën e dizajnit arkitektonik të Qendrave të të Dhënave.
2) Kompanitë tregtare;
Goldman Sachs po përdor avantazhet e punës me komunitetin e burimeve të hapura dhe zhvillimin e standardeve dhe zgjidhjeve të përbashkëta për të sjellë risitë në infrastruktura rrjetesh dhe ofruar zgjidhje optimale për klientët e saj.
3) Prodhimi;
I gjithë industria e rrjetit do të përfitojë nga një gjuhë si P4, e cila përcakton qartë sjelljen e ridrejtimit. Kështu mendojnë edhe në Cisco, duke transferuar linjat e tyre të produkteve për të përdorur këtë gjuhë.
Juniper Networks ka përfshirë P4 dhe P4 Runtime në një sërë produktesh dhe ofron akses të programueshëm në procesorin e integruar të Juniper dhe kodin e tij.
Ruijie Networks është një mbështetëse aktive e P4 dhe avantazheve që ajo sjell për rrjetet. Me P4, kompania mund të krijojë dhe ofrojë zgjidhje të klasit të parë për një gamë të gjerë klientësh.
4) Ofruesit e telekomunikacioneve;
AT&T ishte një nga mbështetësit e parë të 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 që përdor pajisje të programueshme të ridrejtimit P4 në rrjetin e saj.
Në Deutsche Telekom, gjuha përdoret për të krijuar prototipa të funksioneve themelore të rrjetit si pjesë e programit Access 4.0.
5) Industria e gjysmëpërçuesve;
Gjuha lejoj zhvillimin e një paradigme të re të transmetimit të mundësive të software-it në planin e rrugëzimit të rrjetit nga kompania Barefoot.
Xilinx ishte një nga themeluesit e P4.org dhe mori pjesë aktive në zhvillimin e gjuhës P4 dhe e implementoi në platformat programabile që bazohen në FPGA për pajisjet SmartNIC dhe NFV, duke lëshuar një nga kompilerët e parë P416 si pjesë e dizajnit SDNet.
6) Software.
Në VMware besojnë se P4 krijon një energji të madhe, inovacione dhe një komunitet që çon në transformime të rëndësishme dhe të nevojshme në rrjet. VMware ishte fillimisht pjesë e kësaj lëvizjeje industriale, pasi valët e reja të inovacioneve janë shkaktuar nga qasjet programore që shtrijnë mundësitë infrastrukturore dhe e implementojnë atë në produktet më të fundit.
Pra kështu, P4 është një gjuhë programimi që nuk varet nga qëllimi dhe nuk varet nga protokolli, e cila përdoret nga industria dhe komuniteti shkencor për të përcaktuar me saktësi sjelljen e routing-ut të pakove si një program, i cili, nga ana e tij, mund të kompilohet për disa qëllime. Sot, qëllimet përfshijnë komutatorë harduerikë dhe softuerikë, komutatorë hypervisor, NPU, procesorë grafikë, FPGA, SmartNIC dhe ASIC.
Karakteristikat kryesore të gjuhës e zgjerojnë ndjeshëm fushën e aplikimit dhe sigurojnë implementimin e saj të shpejtë në arkitekturat e rrjetit.
ĂfarĂ« tĂ« bĂ«j fillimisht
P4 është një projekt i hapur, të gjitha informacionet aktuale ndodhen në faqen
Lidhja në depo , ku mund të merrni kodet burimore të shembujve dhe materiale mësimore.
për Eclipse me mbështetje për P4, por mund të rekomandojmë nga kompania Barefoot.

Le të shqyrtojmë abstraksionet kryesore të bërthamës:
PĂ«rcaktimi i titujve â me ndihmĂ«n e tyre pĂ«rcaktohen titujt e protokollit.
Në përkufizimin e titujve caktohet:
- përshkrimi i formateve të pakove dhe emrat e fushave të titujve
- fushat e lejuara fikse dhe variabile
Për shembull
header Ethernet_h{
    bitdstAddr;
    bitsrcAddr;
    bitetherType;
}
header IPv4_h{
    bit  version;
    bit  ihl;
    bit  diffserv;
    bit  totalLen;
    bit  identification;
    bit  flags;
    bit  fragOffset;
    bit  ttl;
    bit  protocol;
    bit  hdrChecksum;
    bit  srcAddr;
    bit  dstAddr;
    varbit  options;
}
ParserĂ«t â detyra e tyre Ă«shtĂ« tĂ« analizojnĂ« titujt.
Shembulli tjetër i parser-it do të përcaktojë kalimin e gjendjes finale të makinës nga një gjendje fillestare në një nga dy gjendjet përfundimtare:

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;
        }
    }âŠ
}
Tabelat â pĂ«rmbajnĂ« gjendje tĂ« makinĂ«s qĂ« lidhin çelĂ«sat e pĂ«rdoruesit me veprimet. Veprime â pĂ«rshkrimi i mĂ«nyrĂ«s si duhet manipuluar paketa.
Tabelat përmbajnë gjendje (të përcaktuara në nivelin menaxherial) për dërgimin e paketave, përshkruajnë njësinë e veprimit Match-Action.
Paketat përshtaten sipas:
- Përputhjes së saktë
- Përputhjes më të gjatë me prefiks (LPM)
- Përshtatjes tri-fish (maskimit)
tavolina ipv4_lpm{
    lexon{
        ipv4.dstAddr: lpm;
    } veprime {
        shkonte();
    }
}
Të gjitha veprimet e mundshme duhet të përcaktohen në tabela paraprakisht.
Veprimet përbëhen nga kod dhe të dhëna. Të dhënat vijnë në nivelin menaxherial (për shembull, adresat IP / numrat e porteve). Primitivët e caktuar, pa cikle, mund të jepen drejtpërdrejt në veprim, por numri i komandave duhet të jetë parashikueshëm. Prandaj, veprimet nuk mund të përmbajnë asnjë cikël ose operatorë kushtorë.
veprim 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 â veprime pĂ«r krijimin e çelĂ«sit tĂ« kĂ«rkimit, kĂ«rkimin nĂ« tabelĂ«, ekzekutimin e veprimeve.
Një shembull tipik i modulit është paraqitur në figurë:

Rrjedha e kontrollit â tregon rendin e zbatimit tĂ« moduleve Match-Action. Kjo Ă«shtĂ« njĂ« program imperativ qĂ« pĂ«rcakton logjikĂ«n e nivelit tĂ« lartĂ« dhe radhĂ«n e Match-Action. Rrjedha e kontrollit lidh tĂ« gjithĂ« objektet, duke vendosur nivelin e kontrollit.
Objektet e jashtme â janĂ« objekte specifike me njĂ« arkitekturĂ« dhe ndĂ«rfaqe API tĂ« qarta tĂ« pĂ«rshkruara. PĂ«r shembull, llogaritja e kontrollĂ«s, regjistrat, numrat, etj.
jashtmë regjistro{
    regjistro(bit<32> madhësia);
    void lexo(out T rezultati, in bit<32> indeksi);
    void shkruaj(in bit<32> indeksi, in T vlera);
}
jashtmë Checksum16{
  Checksum16();    //konstruktori
  void clear();    //përgatit njësinë për llogaritje
  void update(in T data);    //shto të dhëna në checksum
  void remove(in T data);  //heq të dhënat nga checksum ekzistues
  bitget(); //merr checksum për të dhënat e shtuar që nga pastrimi i fundit
}
Metadatat â janĂ« struktura tĂ« dhĂ«nash qĂ« lidhen me çdo paketĂ«.
Ekzistojnë 2 lloje metadatat:
  Metadat të përdoruesit (strukturë e zbrazët për të gjitha paketat)
    Mund të vendosni këtu gjithçka që dëshironi
    E disponueshme gjatë të gjithë pipeline
    e përshtatshme për t'u përdorur për qëllimet tuaja, për shembull, për ruajtjen e hash-it të paketës
  Metadat e brendshme â sigurohen nga arkitektura
    Për portin hyrës, porti dalës përcaktohet këtu
    Koha e shënjestrës kur paketa u vendos në radhë, thellësia e radhës
    hash-i i multicastit / radhën e multicastit
    Prioriteti i paketës, rëndësia e paketës
    Specifikimi i portit dalës (për shembull, radhë dalëse)
Kompilator P4
Kompilatori P4 (P4C) gjeneron:
- Koha e funksionimit të planit të të dhënave
- API për menaxhimin e gjendjes së makinës në data plane

Shembulli i switch-it programativ në gjuhën P4
Kodet burimore mund të shkarkohen nga repositori.
p4lang/p4c-bm: krijon konfigurimin JSON për bmv2
p4lang/bmv2: switch-i programativ që kupton konfigurimet JSON të versionit bmv2
Në figurë është paraqitur schema e kompilimit të projektit:

Manipulimet me tabelat, regjistrat e leximit, numëruesit:
- caktimi_tavoline_default <table name> <action name> <action parameters>
- shto_tavolinë <table name> <action name> <match fields> => <action
parameters> [priority] - fshij tabelën <table name> <entry handle>
Në kodet burimore është paraqitur programi simple_switch_CLI për përdorimin e lehtë të API-së së switch-it programativ.
Ky dhe shembuj të tjerë mund t'i shkarkoni në repositor.

P.S. NĂ« fillim tĂ« verĂ«s, kompania Intel nĂ«nshkroi njĂ« marrĂ«veshje pĂ«r blerjen e Barefoot Networks, me qĂ«llimin qĂ« tĂ« pĂ«rmbushĂ« shpejt nevojat e pĂ«rdoruesve tĂ« Hyperscale Cloud. Siç tha Navin Shenoy (nĂ«npresident ekzekutiv dhe menaxher i Grupit tĂ« QendrĂ«s sĂ« TĂ«nakĂ«ve nĂ« Intel Corporation) â kjo do tĂ« lejojĂ« Intel tĂ« ofrojĂ« ngarkesa mĂ« tĂ« mĂ«dha tĂ« punĂ«s dhe mĂ« shumĂ« mundĂ«si pĂ«r klientĂ«t e Qendrave tĂ« TĂ«nakĂ«ve.
Sipas mendimit tim personal, nuk duhet të harrojmë se kompania Intel është lider në prodhimin e çipave FPGA dhe ka një ambient të shkëlqyer Quartus. Kjo do të thotë se me ardhjen në Intel, kompania Barefoot jo vetëm që do të shtojë linjën e prodhimit, por edhe Quartus dhe P4 Studio priten për përmirësime të mëdha dhe shtesë në linjën e Toffino dhe Toffino 2.
Anëtar zyrtar i komunitetit P4 është kompania .
Burimi: habr.com
