P4 programmēŔanas valoda

P4 programmēŔanas valoda
P4 ir programmÄ“Å”anas valoda, kas paredzēta pakeÅ”u marÅ”rutÄ“Å”anas noteikumu programmÄ“Å”anai. AtŔķirÄ«bā no vispārējas nozÄ«mes valodas, piemēram, C vai Python, P4 ir domēnam specifiska valoda ar vairākiem dizainiem, kas optimizēti tÄ«kla marÅ”rutÄ“Å”anai.

P4 ir atvērtā pirmkoda valoda, kuru licencē un uztur bezpeļņas organizācija P4 Language Consortium. To atbalsta arī Open Networking Foundation (ONF) un Linux Foundation (LF), divas no lielākajām atvērtā koda tīkla projektu jumta organizācijām.
Valoda sākotnēji tika izstrādāta 2013. gadā un aprakstÄ«ta 2014. gada SIGCOMM CCR dokumentā ar nosaukumu ā€œProtokola neatkarÄ«ga, pakeÅ”u marÅ”rutÄ“Å”anas procesora programmÄ“Å”anaā€.

KopÅ” tās pirmsākumiem P4 ir eksponenciāli audzis un attÄ«stÄ«jies, ātri kļūstot par standartu, lai aprakstÄ«tu pakeÅ”u pārsÅ«tÄ«Å”anu ar tÄ«kla ierÄ«cēm, tostarp tÄ«kla adapteriem, slēdžiem un marÅ”rutētājiem.

"SDN ir pārveidojis tÄ«klu nozari, un P4 paceļ SDN uz nākamo lÄ«meni, nodroÅ”inot marÅ”rutÄ“Å”anas programmējamÄ«bu," sacÄ«ja Guru Parulkars, Open Networking Foundation izpilddirektors.

P4 valodu sākotnēji izveidoja inženieru un pētnieku grupa no Google, Intel, Microsoft Research, Barefoot, Princeton un Stanford. MērÄ·is bija vienkārÅ”s: izveidot viegli lietojamu valodu, ko programmatÅ«ras izstrādātājs varētu apgÅ«t vienas dienas laikā un izmantot, lai precÄ«zi aprakstÄ«tu, kā paketes tiek nosÅ«tÄ«tas pa tÄ«kliem.

No paÅ”a sākuma P4 tika izstrādāts tā, lai tas bÅ«tu neatkarÄ«gs no mērÄ·a (t.i., programmu, kas rakstÄ«ta P4, varēja kompilēt nemainÄ«tā veidā, lai tā darbotos dažādos mērÄ·os, piemēram, ASIC, FPGA, CPU, NPU un GPU).

Valoda ir arī neatkarīga no protokola (t.i., P4 programma var aprakstīt esoŔos standarta protokolus vai izmantot, lai norādītu jaunus pielāgotus adresācijas režīmus).

RÅ«pniecÄ«bā P4 izmanto ierīču programmÄ“Å”anai. Iespējams, nākotnē Internet-RFC un IEEE standartos tiks iekļauta arÄ« P4 specifikācija.

P4 var izmantot gan programmējamām, gan fiksētu funkciju ierÄ«cēm. Piemēram, to izmanto, lai precÄ«zi reÄ£istrētu slēdža konveijera uzvedÄ«bu Switch Abstraction Interface (SAI) API, ko izmanto atvērtā koda SONiC slēdža operētājsistēma. P4 tiek izmantots arÄ« ONF Stratum projektā, lai aprakstÄ«tu pārslēgÅ”anās uzvedÄ«bu dažādās fiksētās un programmējamās ierÄ«cēs.

Pirmo reizi slēdža un tÄ«kla adapteru darbÄ«bas aprakstÄ«Å”ana ļauj izveidot precÄ«zu visa tÄ«kla izpildāmo modeli pirms izvietoÅ”anas. Lieli mākoņdatoÅ”anas pakalpojumu sniedzēji var pilnÄ«bā pārbaudÄ«t un atkļūdot tÄ«klu, izmantojot programmatÅ«ru, ievērojami samazinot laiku un izmaksas, kas nepiecieÅ”amas sadarbspējas testÄ“Å”anai laboratorijā, neprasot dārgu aparatÅ«ru.

Izmantojot P4, tÄ«kla iekārtu pārdevēji var sagaidÄ«t kopēju pamatā esoÅ”o marÅ”rutÄ“Å”anas uzvedÄ«bu visos produktos, ļaujot atkārtoti izmantot testa infrastruktÅ«ru, vienkārÅ”ot pārvaldÄ«bas programmatÅ«ras izstrādi un galu galā nodroÅ”ināt savietojamÄ«bu.

Protams, P4 var izmantot, lai rakstÄ«tu programmas, kas apraksta pilnÄ«gi jaunus marÅ”rutÄ“Å”anas veidus. Piemēram, P4 plaÅ”i izmanto telemetrijai un mērÄ«jumiem datu centros, uzņēmumu un pakalpojumu sniedzēju tÄ«klos.

ArÄ« pētnieku kopiena ir pastiprinājusies. Vairākas vadoŔās akadēmiskās tÄ«klu pētniecÄ«bas grupas ir publicējuÅ”as aizraujoÅ”as jaunas lietojumprogrammas, kuru pamatā ir P4 programmas, tostarp slodzes lÄ«dzsvaroÅ”ana, konsensa protokoli un galveno vērtÄ«bu keÅ”atmiņa. Tiek veidota jauna programmÄ“Å”anas paradigma, inovācijas virzās no aparatÅ«ras uz programmatÅ«ru, ļaujot rasties daudzām negaidÄ«tām, jaunām un Ä£eniālām idejām.

Izstrādātāju kopiena ir devusi nozÄ«mÄ«gu ieguldÄ«jumu koda izstrādē, tostarp kompilatoru, konveijeru, uzvedÄ«bas modeļu, API, testÄ“Å”anas ietvaru, lietojumprogrammu un daudz ko citu. Tādiem uzņēmumiem kā Alibaba, AT&T, Barefoot, Cisco, Fox Networks, Google, Intel, IXIA, Juniper Networks, Mellanox, Microsoft, Netcope, Netronome, VMware, Xilinx un ZTE ir Ä«paÅ”i izstrādātāji; no universitātēm, tostarp BUPT, Cornell, Harvard, MIT, NCTU, Princeton, Stanford, Technion, Tsinghua, UMass un USI; un atvērtā pirmkoda projekti, tostarp CORD, FD.io, OpenDaylight, ONOS, OvS, SAI un Stratum, uzsver faktu, ka P4 ir neatkarÄ«gs kopienas projekts.

Tipiska kontrolleru paaudze P4 valodai:

P4 programmēŔanas valoda

PieteikŔanās perspektīvas

P4 programmēŔanas valoda
Tā kā valoda ir paredzēta lietojumprogrammu marÅ”rutÄ“Å”anai, prasÄ«bu saraksts un dizaina iespējas atŔķiras no vispārējas nozÄ«mes programmÄ“Å”anas valodām. Galvenās valodas iezÄ«mes ir:

  1. NeatkarÄ«ba no mērÄ·a Ä«stenoÅ”anas;
  2. Izmantotā(-u) protokola(-u) neatkarība;
  3. Lauka pārkonfigurējamība.

NeatkarÄ«ba no mērÄ·a Ä«stenoÅ”anas

P4 programmas ir izstrādātas tā, lai tās bÅ«tu neatkarÄ«gas no ievieÅ”anas, kas nozÄ«mē, ka tās var apkopot dažādiem izpildes dzinēju veidiem, piemēram, vispārējas nozÄ«mes procesoriem, FPGA, sistēmas mikroshēmām, tÄ«kla procesoriem un ASIC. Å ie dažādie maŔīnu veidi ir pazÄ«stami kā P4 mērÄ·i, un katram mērÄ·im ir nepiecieÅ”ams kompilators, lai pārveidotu P4 avota kodu mērÄ·a slēdža modelÄ«. Kompilatoru var iebÅ«vēt mērÄ·a ierÄ«cē, ārējā programmatÅ«rā vai pat mākoņpakalpojumā. Tā kā daudzi sākotnējie P4 programmu mērÄ·i bija paredzēti vienkārÅ”ai pakeÅ”u pārslēgÅ”anai, ļoti bieži tiek dzirdēts termins "P4 slēdzis", lai gan "P4 mērÄ·is" ir precÄ«zāks.

Izmantotā(-u) protokola(-u) neatkarība

P4 ir neatkarÄ«gs no protokola. Tas nozÄ«mē, ka valodai nav vietējo protokolu atbalsta, piemēram, IP, Ethernet, TCP, VxLAN vai MPLS. Tā vietā P4 programmētājs apraksta programmā nepiecieÅ”amo protokolu galvenes formātus un lauku nosaukumus, kurus savukārt interpretē un apstrādā kompilētā programma un mērÄ·a ierÄ«ce.

Lauka pārkonfigurējamība

Protokola neatkarÄ«ba un abstraktās valodas modelis ļauj pārkonfigurēt ā€” P4 mērÄ·iem jāspēj mainÄ«t pakeÅ”u apstrādi pēc sistēmas izvietoÅ”anas. Å Ä« iespēja tradicionāli ir saistÄ«ta ar marÅ”rutÄ“Å”anu, izmantojot vispārējas nozÄ«mes procesorus vai tÄ«kla procesorus, nevis fiksētas funkcijas integrālās shēmas.

Lai gan valodā nav nekā, kas liegtu optimizēt noteikta protokolu kopas veiktspēju, Ŕīs optimizācijas valodas autoram ir neredzamas un galu galā var samazināt sistēmas un mērÄ·u elastÄ«bu un to pārkonfigurējamÄ«bu.

Å Ä«s valodas Ä«paŔības sākotnēji noteica tās veidotāji, koncentrējoties uz tās plaÅ”u izmantoÅ”anu tÄ«kla infrastruktÅ«rā.

Valoda jau tiek izmantota daudzos uzņēmumos:

1) Hipermēroga datu centri;

Ķīnas uzņēmums Tencent ir lielākā investīciju kompānija pasaulē un viena no lielākajām riska kapitāla firmām. Tencent meitasuzņēmumi gan Ķīnā, gan citās pasaules valstīs specializējas dažādās augsto tehnoloģiju biznesa jomās, tostarp dažādos interneta servisos, izstrādēs mākslīgā intelekta un elektroniskās izklaides jomā.

P4 un programmējamā marÅ”rutÄ“Å”ana ir progresÄ«vas tehnoloÄ£ijas, kas tiek izmantotas uzņēmuma tÄ«kla arhitektÅ«rā.

Kā viens no izstrādātājiem Google ar lepnumu atzÄ«mē P4 straujo ievieÅ”anu tÄ«klu nozarē un jo Ä«paÅ”i datu centru arhitektÅ«ras projektÄ“Å”anā.

2) Komercsabiedrības;

Goldman Sachs izmanto priekÅ”rocÄ«bas, ko sniedz sadarbÄ«ba ar atvērtā pirmkoda kopienu un kopÄ«gu standartu un risinājumu izstrāde, lai ieviestu jauninājumus tÄ«kla infrastruktÅ«rā un nodroÅ”inātu labākus risinājumus klientiem.

3) RažoŔana;

Visa tÄ«kla nozare gÅ«tu labumu no tādas valodas kā P4, kas unikāli definē pārsÅ«tÄ«Å”anas uzvedÄ«bu. Cisco arÄ« tic savu produktu lÄ«niju nodoÅ”anai, lai izmantotu Å”o valodu.

Juniper Networks ir iekļāvis P4 un P4 Runtime vairākos produktos un nodroŔina programmatisku piekļuvi Juniper iegultajam procesoram un tā programmatūras kodam.

Ruijie Networks stingri atbalsta P4 un priekÅ”rocÄ«bas, ko tas sniedz tÄ«kliem. Izmantojot P4, uzņēmums var radÄ«t un piegādāt savā klasē labākos risinājumus plaÅ”am klientu lokam.

4) telekomunikāciju pakalpojumu sniedzēji;

AT&T bija agrīns P4 ieviesējs, viens no pirmajiem, kas izmantoja P4, lai definētu uzvedību, ko tā vēlējās redzēt savos tīklos, un savā tīklā izmantoja P4 programmējamās pāradresācijas ierīces.

Uzņēmumā Deutsche Telekom Ŕī valoda tiek izmantota galveno tÄ«kla funkciju prototipÄ“Å”anai kā daļa no programmas Access 4.0.

5) Pusvadītāju rūpniecība;

Å Ä« valoda ļāva Barefoot ieviest jaunu paradigmu programmatÅ«ras iespēju nodroÅ”ināŔanai tÄ«kla marÅ”rutÄ“Å”anas plaknē.

Xilinx bija viens no P4.org dibinātājiem un aktīvi iesaistījās P4 valodas izstrādē un ieviesa to uz FPGA balstītās programmējamās platformās SmartNIC un NFV aparatūrai, izlaižot vienu no pirmajiem P416 kompilatoriem kā daļu no SDNet dizaina.

6) Programmatūra.

VMware uzskata, ka P4 rada milzÄ«gu enerÄ£iju, inovācijas un kopienu, kas veicina nozÄ«mÄ«gas un nepiecieÅ”amas pārveides tÄ«klā. VMware ir bijusi daļa no Ŕīs nozares kustÄ«bas kopÅ” pirmsākumiem, jo ā€‹ā€‹jaunu inovāciju vilni virza uz programmatÅ«ru balstÄ«tas pieejas, kas paplaÅ”ina infrastruktÅ«ras iespējas un ievieÅ” to jaunākajos produktos.

Tādējādi P4 ir no mērÄ·a neatkarÄ«ga un no protokola neatkarÄ«ga programmÄ“Å”anas valoda, ko izmanto nozare un akadēmiskās aprindas, lai unikāli definētu pakeÅ”u marÅ”rutÄ“Å”anas uzvedÄ«bu kā programmu, kuru savukārt var apkopot vairākiem mērÄ·iem. MÅ«sdienās mērÄ·i ir aparatÅ«ras un programmatÅ«ras slēdži, hipervizora slēdži, NPU, GPU, FPGA, SmartNIC un ASIC.

Valodas galvenās iezÄ«mes ievērojami paplaÅ”ina tās pielietojuma jomu un nodroÅ”ina tās ātru ievieÅ”anu tÄ«kla arhitektÅ«rās.

Darba sākŔana

P4 ir atvērts projekts, visa attiecīgā informācija ir mājaslapā P4.org

Repozitorija saite https://github.com/p4lang, kur varat iegūt avota koda piemērus un apmācības.

ŠŸŠ»Š°Š³ŠøŠ½ priekÅ” Eclipse ar P4 atbalstu, bet mēs varam ieteikt P4 studija no Barefoot.

P4 programmēŔanas valoda

Apskatīsim galvenās kodola abstrakcijas:

Virsrakstu definÄ“Å”ana ā€” ar viņu palÄ«dzÄ«bu tiek noteiktas protokolu galvenes.

Galvenes definīcijā ir norādīts:

  • pakeÅ”u formātu un galvenes lauku nosaukumu apraksts
  • fiksētie un mainÄ«gie atļautie lauki

Piemēram

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

Parsētāji ā€” viņu uzdevums ir parsēt virsrakstus.

Šis parsētāja piemērs noteiks iekārtas beigu stāvokļa pāreju no viena sākuma stāvokļa uz vienu no diviem gala stāvokļiem:

P4 programmēŔanas valoda

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;
        }
    }ā€¦
}

Tabulas ā€” satur maŔīnas stāvokļus, kas saista lietotāja atslēgas ar darbÄ«bām. Aktivitāte ā€” apraksts par to, kā ar iepakojumu jārÄ«kojas.

Tabulās ir pakeÅ”u pārsÅ«tÄ«Å”anas stāvokļi (definēti pārvaldÄ«bas lÄ«menÄ«), aprakstiet atbilstÄ«bas darbÄ«bas vienÄ«bu.

Paketes tiek saskaņotas ar:

  • PrecÄ«za sakritÄ«ba
  • Garākā prefiksa atbilstÄ«ba (LPM)
  • TrÄ«skārÅ”a saskaņoÅ”ana (maskÄ“Å”ana)

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

Visas iespējamās darbÄ«bas iepriekÅ” jādefinē tabulās.

DarbÄ«bas sastāv no koda un datiem. Dati nāk no pārvaldÄ«bas lÄ«meņa (piemēram, IP adreses/portu numuri). Dažus primitÄ«vus bez cilpas var norādÄ«t tieÅ”i darbÄ«bā, taču instrukciju skaitam jābÅ«t paredzamam. Tāpēc darbÄ«bās nedrÄ«kst bÅ«t cilpas vai nosacÄ«juma priekÅ”raksti.

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 moduļi ā€” darbÄ«bas, lai izveidotu meklÄ“Å”anas taustiņu, meklētu tabulā, veiktu darbÄ«bas.

Tipisks moduļa piemērs ir parādīts attēlā:

P4 programmēŔanas valoda

Kontrolēt plÅ«smu ā€” norāda secÄ«bu, kādā tiek izmantoti Match-Action moduļi. Å Ä« ir obligāta programma, kas nosaka augsta lÄ«meņa loÄ£iku un Match-Action secÄ«bu. VadÄ«bas plÅ«sma saista visus objektus, definējot kontroles lÄ«meni.

Ārējie objekti ir konkrēti objekti ar skaidri definētu arhitektÅ«ru un API saskarnēm. Piemēram, kontrolsummas aprēķināŔana, reÄ£istri, skaitÄ«tāji, skaitÄ«tāji utt.

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
}

Metadati ā€” ar katru pakotni saistÄ«tās datu struktÅ«ras.

Ir 2 veidu metadati:

  Pielāgoti metadati (tukÅ”a struktÅ«ra visām pakotnēm)
    Å eit jÅ«s varat ievietot visu, ko vēlaties
    Pieejams visā cauruļvadā
    Ä“rts lietoÅ”anai saviem mērÄ·iem, piemēram, iepakojuma hash uzglabāŔanai

  IekŔējie metadati ā€” to nodroÅ”ina arhitektÅ«ra
    Å eit ir definēts ievades ports, izvades ports
    Laika zÄ«mogs, kad pakete bija rindā, rindas dziļums
    multicast hash / multicast rinda
    Pakas prioritāte, iepakojuma nozÄ«me
    Izvades porta specifikācija (piemēram, izvades rinda)

P4 kompilators

P4 kompilators (P4C) ģenerē:

  1. Datu plaknes izpildlaiks
  2. API maŔīnas stāvokļa pārvaldÄ«Å”anai datu plaknē

P4 programmēŔanas valoda

Programmatūras slēdža piemērs P4 valodā

Avota kodus var lejupielādēt no repozitorija.

p4lang/p4c-bm: izveido JSON konfigurāciju bmv2
p4lang/bmv2: programmatūras slēdzis, kas saprot bmv2 versijas JSON konfigurācijas

Attēlā parādīta projekta kompilācijas diagramma:

P4 programmēŔanas valoda

Manipulācijas ar tabulām, nolasīŔanas reģistriem, skaitītājiem:

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


Avota kods satur simple_switch_CLI programmu ērtai programmatÅ«ras slēdža API lietoÅ”anai.

Šo un citus piemērus varat lejupielādēt no krātuves.

P4 programmēŔanas valoda

PS Å Ä«s vasaras sākumā Intel parakstÄ«ja lÄ«gumu par Barefoot Networks iegādi, cenÅ”oties ātri apmierināt Hyperscale Cloud lietotāju vajadzÄ«bas. Kā teica Navins Å enojs (Intel Corporation datu centru grupas izpilddirektors un Ä£enerāldirektors), tas ļaus Intel nodroÅ”ināt lielāku darba slodzi un vairāk iespēju datu centru klientiem.

Manuprāt, nevajadzētu aizmirst, ka Intel ir lÄ«deris FPGA mikroshēmu ražoÅ”anā un tam ir lieliska Quartus vide. Tas nozÄ«mē, ka varam sagaidÄ«t, ka lÄ«dz ar Intel ienākÅ”anu Barefoot ne tikai paplaÅ”inās savu produktu lÄ«niju, bet arÄ« Quartus un P4 Studio saņems nopietnus Toffino un Toffino 2 lÄ«nijas atjauninājumus un papildinājumus.

Oficiālais P4 kopienas dalībnieks - uzņēmums Faktoru grupa.

Avots: www.habr.com

Pievieno komentāru