Gjuha e programimit P4

Gjuha e programimit P4
P4 është një gjuhë programuese e destinuar për programimin e rregullave të ruterizimit të paketimeve. Ndryshe nga gjuhët e përgjithshme, si C ose Python, P4 është një gjuhë e orientuar ndaj subjektit me një sërë konstruksionesh të optimizuara për ruterizimin në rrjet.

P4 Ă«shtĂ« njĂ« gjuhĂ« me kod tĂ« hapur, e licencuar dhe mbĂ«shtetur nga njĂ« organizatĂ« jo fitimprurĂ«se e quajtur P4 Language Consortium. Ajo gjithashtu mbĂ«shtetet nga Open Networking Foundation (ONF) dhe Linux Foundation (LF) — dy organizatat mĂ« tĂ« mĂ«dha çumbre nĂ« projektet me kod tĂ« hapur nĂ« fushĂ«n e teknologjive rrjetĂ«.
Gjuha u shpik fillimisht në vitin 2013 dhe u përshkrua në vitin 2014 në dokumentin SIGCOMM CCR me titull "Programimi i pavarur nga protokollet të procesorëve të ruterizimit të paketimeve."

Që nga krijimi i saj, P4 është rritur dhe zhvilluar eksponencialisht, duke u bërë shpejt standardi i përshkrimit të kalimit të paketimeve nga pajisjet rrjetë, duke përfshirë adapatorët rrjetë, switches dhe ruterat.

"SDN ka transformuar industrinë e rrjetit, ndërsa P4 e çon SDN në një nivel të ri, duke ofruar programueshmëri në fushën e ruterizimit," tha Guru Parulkar, drejtor ekzekutiv i Open Networking Foundation.

Gjuha P4 u krijua fillimisht nga një grup inxhinierësh dhe hulumtuesish 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ë për një ditë dhe ta përdorë për të përshkruar me saktësi se si paketat dërgohen në rrjet.

Që nga fillimi, P4 është zhvilluar si i pavarur nga qëllimi (domethënë, një program i shkruar në P4 mund të kompilwahet pa ndryshime për t'u ekzekutuar në qëllime të ndryshme, si ASIC, FPGA, CPU, NPU dhe GPU).

Gjithashtu, gjuha është e pavarur nga protokollet (domethënë, një program P4 mund të përshkruajë protokollet standarde ekzistuese ose të përdoret për të caktuar regjime të reja adresimi të përshtatshëm).

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

P4 mund të përdoret si për pajisje të programueshme, ashtu edhe për ato me funksion fikse. Për shembull, ai përdoret për të regjistruar saktësisht sjelljen e konvejerit të kalimit në API-të e ndërfaqes së abstraksionit të kalimit (SAI), që përdoren nga sistemet operative të kalimit me burim të hapur SONiC. P4 gjithashtu përdoret në projektin ONF Stratum për të përshkruar sjelljen e kalimit përmes një sërë pajisjesh stacionare dhe programueshme.

Përshkrimi i sjelljes së kalimit dhe adaptarëve rrjetë në mënyrë të parë lejon krijimin e një modeli të ekzekutueshëm të saktë të gjithë rrjetit para shpërndarjes. Ofruesit e mëdhenj të cloud mund të testojnë dhe debatojnë plotësisht rrjetin duke përdorur softuer, duke reduktuar ndjeshëm kohën dhe kostot për testimin e ndërveprimit në laborator, pa nevojën për pajisje të shtrenjta.

Duke përdorur P4, ofruesit e pajisjeve të rrjetit mund të presin një sjellje të përgjithshme themelore të rrugës në të gjitha produktet, duke lejuar ripërdorimin e infrastrukturës për testim, duke thjeshtëzuar zhvillimin e softuerit për menaxhim dhe, në fund të fundit, duke garantuar përputhshmërinë.

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

Komuniteti kërkues gjithashtu është aktivizuar. Disa grupe kërkimore akademike në teknologjitë rrjetë kanë publikuar aplikacione interesante të reja të bazuara në programet P4, duke përfshirë balansimin e ngarkesës, protokollet e sinkronizuara dhe keqmirësimin e vlerës së çelësit. Po krijohet një paradigëm e re programimi, inovacionet po kalojnë nga hardueri në softuer, duke lejuar shfaqjen e shumë ideve të papritura, të reja dhe gjeniale.

Krahu i zhvilluesve ka kontribuar ndjeshëm në zhvillimin e kodeve, duke përfshirë kompilatorët, programet e tuba, modelet e sjelljes, ndërfaqet API, ambientet e testimit, aplikacionet dhe shumë të tjera. Zhvilluesit e përkushtuar ndodhen 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, duke përfshirë BUPT, Cornell, Harvard, MIT, NCTU, Princeton, Stanford, Technion, Tsinghua, UMass, dhe USI; dhe projekte me kod të hapur, duke përfshirë CORD, FD.io, OpenDaylight, ONOS, OvS, SAI dhe Stratum, theksojnë faktin se P4 është një projekt publik të pavarur.

Generimi tipik i kontrollorëve për gjuhën P4:

Gjuha e programimit P4

Perspektivat e përdorimit

Gjuha e programimit P4
Duke qenë se gjuha është e destinuar për aplikacione rruge, lista e kërkesave dhe mundësive të dizajnit është e ndryshme krahasuar me gjuhët e programimit të zakonshëm. Karakteristikat kryesore të gjuhës janë:

  1. Pavarësia nga implementimi i synuar;
  2. Pavarësia nga protokolli(-t) e përdorura;
  3. Rikonfigurueshmëria e fushave.

Pavarësia nga implementimi i synuar

Programet P4 zhvillohen në një mënyrë që nuk varen nga implementimi, dmth ato mund të kompilohen për shumë lloje të ndryshme të makinave ekzekutuese, si procesorët e zakonshëm, FPGA, sistemet në çip, procesorët rrjetë dhe ASIC. Këto lloje të ndryshme makinash njihen si objektiva P4, dhe për çdo objektiv është e nevojshme një kompilator për të transformuar kodin burimor P4 në modelin e ndërruesit të synuar. Kompilatori mund të integrohet në pajisjen e synuar, softuerin e jashtëm ose madje në një shërbim në re. Duke qenë se shumë nga objektivat fillestare për programet P4 u përdoren për thjeshtë kalimin e paketave, shpeshherë mund të dëgjohet termi "ndërrues P4", edhe pse përdorimi i "objektiv P4" është më i saktë.

Pavarësia nga protokolli(-t) e përdorura

P4 është i pavarur nga protokollet. Kjo do të thotë se gjuha nuk ka mbështetje të integruar për protokollet e zakonshme, si IP, Ethernet, TCP, VxLAN ose MPLS. Në vend të kësaj, programi P4 përshkruan format e kokave dhe emrat e fushave të protokolleve të kërkuara në program, të cilat nga ana e tyre interpretohen dhe trajtohen nga programi i kompiluar dhe pajisja e synuar.

Rikonfigurueshmëria e fushave

PavarĂ«sia nga protokolli dhe modeli i gjuhĂ«s abstrakte lejojnĂ« rikonfigurueshmĂ«rinĂ« — qĂ«llimet P4 duhet tĂ« kenĂ« mundĂ«sinĂ« pĂ«r tĂ« ndryshuar trajtimin e pakove pas vendosjes sĂ« sistemit. Kjo mundĂ«si tradicionalisht lidhet me rrugĂ«zimin pĂ«rmes procesorĂ«ve tĂ« pĂ«rgjithshĂ«m ose procesorĂ«ve rrjetesh, e jo me çipet me funksione fikse.

Megjithëse në gjuhë nuk ka asgjë që mund të pengojë optimizimin e funksionimit të një seti të caktuar protokollesh, këto optimizime janë të padukshme për autorin e gjuhës dhe mund, përfundimisht, të ulin fleksibilitetin e sistemit dhe qëllimet e tij dhe rikonstrukturshmërinë.

Këto karakteristika të gjuhës u vendosën fillimisht nga krijuesit e saj me orientim për përdorim të gjerë në infrastrukturën rrjet.

Tani për tani, gjuha përdoret në shumë kompani:

1) Qendrat e të dhënave hipermasive;

Kompania kineze Tencent është kompania më e madhe investuese në botë dhe një nga kompanitë më të mëdha të kapitalit të rizgjuar. Filialet e Tencent, si në Kinë ashtu edhe në vendet e tjera të botës, specializohen në fusha të ndryshme të biznesit me teknologji të lartë, përfshirë shërbime të ndryshme të internetit, zhvillime në fushën e inteligjencës artificiale dhe argëtimit elektronik.

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

Si një nga krijuesit, Google me krenari thekson adoptimin e shpejtë të P4 në industrinë e rrjetit dhe, në veçanti, në fushën e projektimit arkitektonik të Qendrave të të Dhënave.

2) Kompanitë tregtare;

Goldman Sachs, duke shfrytëzuar përfitimet e punës me komunitetin e kodit të hapur dhe zhvillimin e standardeve dhe zgjidhjeve të përbashkëta, tashmë po sjell inovacione në infrastrukturën rrjet dhe ofron zgjidhje më të mira për klientët.

3) Prodhimi;

E gjithë industria e rrjetit do të përfitojë nga një gjuhë si P4, e cila përcakton qartë sjelljen e rigrupimit. Kështu mendojnë edhe në Cisco, duke transferuar linjat e tyre të produktit në përdorimin e kësaj gjuhe.

Juniper Networks përfshiu P4 dhe P4 Runtime në një sërë produkteve dhe siguron qasje të programueshme në procesorin e integruar të Juniper dhe kodin e tij të programimit.

Ruijie Networks është një mbështetës aktiv i P4 dhe përfitimeve që ajo sjell për rrjetet. Me P4, kompania mund të krijojë dhe ofrojë zgjidhje më të mira në klasën e saj për një gamë të gjerë klientësh.

4) Ofruesit e telekomunikacionit;

AT&T ka qenë një nga mbështetësit e parë të P4, një nga të parët që e përdori P4 për të përcaktuar sjelljen që dëshironte të shihte në rrjetet e saj, dhe duke përdorur pajisje të programueshme për përcjelljen P4 në rrjetin e saj.

Në Deutsche Telekom, gjuha përdoret për të krijuar prototipa të funksioneve kyçe të rrjetit si pjesë e programit Access 4.0.

5) Industria e çipave;

Gjuha mundësoi implementimin e një paradigme të re për transferimin e mundësive të softuerit në nivelin e routing-ut nga kompania Barefoot.

Xilinx ka qenë një nga themeluesit e P4.org dhe ka marrë pjesë aktive në zhvillimin e gjuhës P4, duke e implementuar atë në platformat programueshme të bazuara në FPGA për pajisjet SmartNIC dhe NFV, duke publikuar një nga kompilatorët e parë P416 si pjesë e dizajnit SDNet.

6) Softueri.

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 një pjesë e këtij lëvizjeje në industri, pasi një valë e re inovacionesh u shkaktua nga qasjet programore që zgjeronin mundësitë e infrastrukturës dhe e realizonin atë në produktet më të reja.

Prandaj, P4 është një gjuhë programimi që nuk është e varur nga qëllimi dhe protokolli, e cila përdoret nga industria dhe komuniteti shkencor për të përcaktuar qartë sjelljen e routing-ut të paketimeve si një program, i cili, nga ana e tij, mund të komilohet për shumë qëllime. Sot, qëllimet përfshijnë komutatoret harduerike dhe softuerike, komutatoret hipervizor, NPU, GPU, FPGA, SmartNIC dhe ASIC.

Pikat kryesore të gjuhës e zgjasin ndjeshëm fushën e aplikimit të saj dhe e mundësojnë implementimin e saj të shpejtë në arkitekturat e rrjeteve.

Nga ku të filloni

P4 është një projekt i hapur, të gjitha informacionet aktuale ndodhen në faqen P4.org

Lidhja në depo https://github.com/p4lang, ku mund të merrni kodet burimore të shembujve dhe materiale mësimore.

Plugini për Eclipse me mbështetje për P4, por mund të rekomandojmë P4 Studio nga kompania Barefoot.

Gjuha e programimit P4

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ërcaktimin e titujve përcaktohet:

  • pĂ«rshkrimi i formateve tĂ« paketave dhe emrat e fushave tĂ« titujve
  • fushat e lejuara fikse dhe tĂ« ndryshueshme

Për shembull

header Ethernet_h{
    bitdstAddr;
    bitsrcAddr;
    bitetherType;
}

header IPv4_h{
    bitversion;
    bitihl;
    bitdiffserv;
    bittotalLen;
    bitidentification;
    bitflags;
    bitfragOffset;
    bitttl;
    bitprotocol;
    bithdrChecksum;
    bitsrcAddr;
    bitdstAddr;
    varbitoptions;
}

ParserĂ«t — detyra e tyre Ă«shtĂ« tĂ« analizojnĂ« titujt.

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

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

}

Tabelat — pĂ«rmbajnĂ« gjendjet e makinĂ«s qĂ« lidhin çelĂ«sat e pĂ«rdoruesit me veprimet. Veprimet — pĂ«rshkrimi i asaj se si duhet tĂ« manovrohet me paketĂ«n.

Tabelat përmbajnë gjendje (të përcaktuar në nivelin menaxherial) për dërgimin e paketave, përshkruajnë një njësi veprimi Match-Action

Paketat janë të përshtatura sipas:

  • PĂ«rputhjes sĂ« saktĂ«
  • PĂ«rputhjes mĂ« tĂ« gjatĂ« me prefiks (LPM)
  • PĂ«rputhjes sĂ« tripletĂ«s (maskimit)

table ipv4_lpm{
    lexo{
        ipv4.dstAddr: lpm;
    } actions {
        drejto();
    }
}

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

Veprimet përbëhen nga kodi dhe të dhënat. Të dhënat vijnë nga niveli menaxherial (p.sh., adresat IP / numrat e porteve). Primitivat e përcaktuara pa cikle mund të jenë të përcaktuara drejtpërdrejt në veprim, por numri i komandave duhet të jetë i parashikueshëm. Prandaj, veprimet nuk mund të përfshijnë as cikle apo operatorë të kushtëzuar.

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 krijimin e njĂ« çelĂ«si kĂ«rkimi, kĂ«rkimin nĂ« tabelĂ«, ekzekutimin e veprimeve.

Një shembull tipik i modulit është paraqitur në figurë:

Gjuha e programimit P4

Rrjedha e kontrollit — tregon rendin e aplikimit tĂ« moduleve Match-Action. Kjo Ă«shtĂ« njĂ« program imperativ, qĂ« pĂ«rcakton logjikĂ«n e nivelit tĂ« lartĂ« dhe radhitjen Match-Action. Rrjedha e kontrollit lidh tĂ« gjithĂ« objektet, duke caktuar nivelin e kontrollit.

Objektet e jashtme — kĂ«to janĂ« objekte specifike me arkitekturĂ« dhe ndĂ«rfaqe API tĂ« qarta. PĂ«r shembull, llogaritja e kontrollit tĂ« shumĂ«s, regjistrat, numĂ«ruesit, etj.

ekstern regjistro{
    regjistro(bit madhësia);
    void lexo(out T rezultati, in bit indeksi);
    void shkruaj(in bit indeksi, in T vlera);
}

ekstern Checksum16{
  Checksum16();    //konstruktor
  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);  //ndërro të dhëna nga checksum ekzistues
  bitget(); //merr checksum për të dhënat e shtuar që nga pastrimi i fundit
}

Metadatot — strukturat e tĂ« dhĂ«nave qĂ« janĂ« tĂ« lidhura me çdo paketĂ«.

Ekzistojnë 2 lloje metadata:

  Metadata 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ë gjithë pipeline-it
    e pĂ«rshtatshme pĂ«r t’u pĂ«rdorur pĂ«r qĂ«llime tĂ« veta, p.sh., pĂ«r ruajtjen e hash-it tĂ« paketĂ«s

  Metadata tĂ« brendshme — sigurohen nga arkitektura
    Porti hyrës, porti dalës përcaktohen këtu
    Koha kur paketa u vendos në radhë, thellësia e radhës
    multicast hash / multicast queue
    Packet priority, packet importance
    Output port specification (e.g., output queue)

P4 Compiler

The P4 compiler (P4C) generates:

  1. Data plane runtime
  2. API to manage the state machine in the data plane

Gjuha e programimit P4

Example of a software switch in P4 language

Source codes can be downloaded from the repository.

p4lang/p4c-bm: creates JSON configuration for bmv2
p4lang/bmv2: a software switch that understands JSON configurations of version bmv2

The diagram shows the compilation scheme of the project:

Gjuha e programimit P4

Manipulations with tables, read registers, counters:

  • tabela_set_default <table name> <action name> <action parameters>
  • shtoj tabelë <table name> <action name> <match fields> => &lt;veprim
    parameters> [priority]
  • fshi_bord <table name> <entry handle>


The source codes include the simple_switch_CLI program for easy use of the software switch API.

You can download this and other examples from the repository.

Gjuha e programimit P4

P.S. At the beginning of summer, Intel signed an agreement to acquire Barefoot Networks, aiming to quickly meet the needs of Hyperscale Cloud users. As stated by Navin Shenoy (executive vice president and general manager of the Data Center Group at Intel Corporation) — this will enable Intel to provide larger workloads and more opportunities for data center customers.

In my personal opinion, it should not be forgotten that Intel is a leader in FPGA chip production and has a great Quartus environment. Therefore, it can be expected that with Barefoot joining Intel, not only will the production line be supplemented, but also Quartus and P4 Studio await significant updates and an expansion of the Toffino and Toffino 2 lines.

Official participant in the P4 community — company Faktor grup.

Burimi: habr.com

Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster