P4 ծրագրավորման լեզու

P4 ծրագրավորման լեզու
P4-ը ծրագրավորման լեզու է, որը նախատեսված է փաթեթների երթուղավորման կանոնները ծրագրավորելու համար: Ի տարբերություն ընդհանուր նշանակության լեզվի, ինչպիսին է C-ն կամ Python-ը, P4-ը տիրույթի համար հատուկ լեզու է՝ ցանցի երթուղղման համար օպտիմիզացված մի շարք դիզայնով:

P4-ը բաց կոդով լեզու է, որը լիցենզավորված և պահպանվում է ոչ առևտրային կազմակերպության կողմից, որը կոչվում է P4 Language Consortium: Այն նաև աջակցվում է Open Networking Foundation-ի (ONF) և Linux Foundation-ի (LF) կողմից՝ բաց կոդով ցանցային նախագծերի երկու խոշորագույն հովանոց կազմակերպություններից:
Լեզուն ի սկզբանե ստեղծվել է 2013 թվականին և նկարագրվել է 2014 թվականին SIGCOMM CCR փաստաթղթում, որը վերնագրված է «Անկախ արձանագրության, փաթեթների երթուղղման պրոցեսորի ծրագրավորում»:

Իր ստեղծման օրվանից P4-ն աճել և զարգացել է էքսպոնենցիալ՝ արագորեն դառնալով ցանցային սարքերի կողմից փաթեթների փոխանցումը նկարագրելու ստանդարտ, ներառյալ ցանցային ադապտերները, անջատիչները և երթուղիչները:

«SDN-ը վերափոխել է ցանցային արդյունաբերությունը, և P4-ը SDN-ն տեղափոխում է հաջորդ մակարդակ՝ հնարավորություն տալով ծրագրավորել երթուղիներում», - ասում է Բաց ցանցային հիմնադրամի գործադիր տնօրեն Գուրու Պարուլկարը:

P4 լեզուն սկզբնապես ստեղծվել է Google-ի, Intel-ի, Microsoft Research-ի, Barefoot-ի, Princeton-ի և Stanford-ի մի խումբ ինժեներների և հետազոտողների կողմից: Նպատակը պարզ էր. ստեղծել հեշտ օգտագործման լեզու, որը ծրագրաշարի մշակողը կարող է սովորել մեկ օրում և օգտագործել՝ ճշգրիտ նկարագրելու համար, թե ինչպես են փաթեթները ուղարկվում ցանցերով:

Ի սկզբանե, P4-ը նախագծված էր որպես թիրախային անկախ (այսինքն՝ P4-ում գրված ծրագիրը կարող էր կազմվել անփոփոխ՝ գործարկելու տարբեր թիրախների վրա, ինչպիսիք են ASIC-ները, FPGA-ները, CPU-ները, NPU-ները և GPU-ները):

Լեզուն նաև անկախ է պրոտոկոլից (այսինքն՝ P4 ծրագիրը կարող է նկարագրել առկա ստանդարտ արձանագրությունները կամ օգտագործվել հասցեավորման նոր մաքսային ռեժիմներ նշելու համար):

Արդյունաբերության մեջ P4-ն օգտագործվում է սարքերի ծրագրավորման համար։ Հավանաբար ապագայում Internet-RFC և IEEE ստանդարտները կներառեն նաև P4 բնութագրերը:

P4-ը կարող է օգտագործվել ինչպես ծրագրավորվող, այնպես էլ ֆիքսված ֆունկցիոնալ սարքերի համար: Օրինակ, այն օգտագործվում է անջատիչ խողովակաշարի վարքագիծը ճշգրիտ գրանցելու համար Switch Abstraction Interface (SAI) API-ներում, որոնք օգտագործվում են բաց կոդով SONiC switch OS-ում: P4-ը նաև օգտագործվում է ONF Stratum նախագծում՝ նկարագրելու մի շարք ֆիքսված և ծրագրավորվող սարքերի միացման վարքագիծը:

Առաջին անգամ անջատիչի և ցանցային ադապտերների վարքագիծը նկարագրելը թույլ է տալիս ստեղծել ամբողջ ցանցի ճշգրիտ գործարկվող մոդելը նախքան տեղակայումը: Խոշոր ամպային պրովայդերները կարող են ստուգել և կարգաբերել ցանցն ամբողջությամբ ծրագրային ապահովման միջոցով՝ զգալիորեն նվազեցնելով լաբորատորիայում փոխգործունակության փորձարկման ժամանակն ու արժեքը՝ առանց թանկարժեք սարքավորումներ պահանջելու:

Օգտագործելով P4-ը, ցանցային սարքավորումների վաճառողները կարող են ակնկալել ընդհանուր հիմքում ընկած երթուղային վարքագիծ բոլոր արտադրանքներում, որոնք թույլ են տալիս վերօգտագործել թեստային ենթակառուցվածքը, պարզեցնել կառավարման ծրագրաշարի մշակումը և, ի վերջո, ապահովել փոխգործունակությունը:

Իհարկե, P4-ը կարող է օգտագործվել ծրագրեր գրելու համար, որոնք նկարագրում են երթուղավորման բոլորովին նոր ուղիներ: Օրինակ, P4-ը լայնորեն օգտագործվում է հեռաչափության և չափումների համար տվյալների կենտրոններում, ձեռնարկությունների և ծառայություններ մատուցող ցանցերում:

Հետազոտական ​​համայնքը նույնպես ակտիվացել է: Ակադեմիական ցանցային հետազոտական ​​մի քանի առաջատար խմբեր հրապարակել են հետաքրքիր նոր ծրագրեր, որոնք հիմնված են P4 ծրագրերի վրա, ներառյալ բեռի հավասարակշռումը, կոնսենսուսային արձանագրությունները և հիմնական արժեքների քեշավորումը: Ստեղծվում է ծրագրավորման նոր պարադիգմ, նորարարությունը ապարատայինից անցնում է ծրագրային ապահովման՝ թույլ տալով ի հայտ գալ բազմաթիվ անսպասելի, նոր ու հնարամիտ գաղափարներ։

Մշակողների համայնքը զգալի ներդրում է ունեցել կոդի մշակման գործում, ներառյալ կոմպիլյատորները, խողովակաշարերը, վարքագծային մոդելները, API-ները, թեստային շրջանակները, հավելվածները և այլն: Ընկերություններ, ինչպիսիք են Alibaba, AT&T, Barefoot, Cisco, Fox Networks, Google, Intel, IXIA, Juniper Networks, Mellanox, Microsoft, Netcope, Netronome, VMware, Xilinx և ZTE հատուկ մշակողներ. համալսարաններից, ներառյալ BUPT, Cornell, Harvard, MIT, NCTU, Princeton, Stanford, Technion, Tsinghua, UMass և USI; և բաց կոդով նախագծերը, ներառյալ CORD, FD.io, OpenDaylight, ONOS, OvS, SAI և Stratum-ը ընդգծում են այն փաստը, որ P4-ը անկախ համայնքային նախագիծ է:

P4 լեզվի համար կարգավորիչների բնորոշ սերունդ.

P4 ծրագրավորման լեզու

Դիմումի հեռանկարները

P4 ծրագրավորման լեզու
Քանի որ լեզուն նախատեսված է հավելվածների երթուղղման համար, պահանջների և նախագծման տարբերակների ցանկը տարբերվում է ընդհանուր նշանակության ծրագրավորման լեզուների համեմատ: Լեզվի հիմնական հատկանիշներն են.

  1. Անկախություն թիրախային իրականացումից;
  2. Օգտագործված արձանագրության(ների) անկախությունը.
  3. Դաշտի վերակազմակերպում:

Անկախություն նպատակային իրականացումից

P4 ծրագրերը նախագծված են այնպես, որ իրականացվեն անկախ, ինչը նշանակում է, որ դրանք կարող են կազմվել բազմաթիվ տարբեր տեսակի կատարողական շարժիչների համար, ինչպիսիք են ընդհանուր նշանակության պրոցեսորները, FPGA-ները, համակարգ-չիպերը, ցանցային պրոցեսորները և ASIC-ները: Մեքենաների այս տարբեր տեսակները հայտնի են որպես P4 թիրախներ, և յուրաքանչյուր թիրախ պահանջում է կոմպիլյատոր՝ P4 աղբյուրի կոդը վերածելու թիրախային անջատիչի մոդելի: Կազմողը կարող է ներկառուցվել թիրախային սարքի, արտաքին ծրագրաշարի կամ նույնիսկ ամպային ծառայության մեջ: Քանի որ P4 ծրագրերի սկզբնական թիրախներից շատերը նախատեսված էին պարզ փաթեթների փոխարկման համար, շատ տարածված է լսել «P4 անջատիչ» տերմինը, չնայած «P4 թիրախ» ավելի ճշգրիտ է:

Օգտագործված արձանագրության(ների) անկախությունը

P4-ը անկախ է արձանագրությունից: Սա նշանակում է, որ լեզուն չունի բնիկ աջակցություն ընդհանուր արձանագրությունների համար, ինչպիսիք են IP, Ethernet, TCP, VxLAN կամ MPLS: Փոխարենը, P4 ծրագրավորողը նկարագրում է ծրագրի անհրաժեշտ արձանագրությունների վերնագրի ձևաչափերը և դաշտերի անվանումները, որոնք իրենց հերթին մեկնաբանվում և մշակվում են կազմված ծրագրի և թիրախային սարքի կողմից:

Դաշտի վերակազմակերպում

Արձանագրության անկախությունը և վերացական լեզվի մոդելը թույլ են տալիս վերակազմավորել. P4 թիրախները պետք է կարողանան փոխել փաթեթների մշակումը համակարգի տեղակայումից հետո: Այս հնարավորությունը ավանդաբար կապված է ընդհանուր նշանակության պրոցեսորների կամ ցանցային պրոցեսորների միջոցով երթուղու հետ, այլ ոչ թե ֆիքսված ֆունկցիայի ինտեգրալ սխեմաների միջոցով:

Թեև լեզվում ոչինչ չկա, որը կխանգարի արձանագրությունների որոշակի փաթեթի կատարման օպտիմալացմանը, այդ օպտիմալացումներն անտեսանելի են լեզվի հեղինակի համար և կարող են ի վերջո նվազեցնել համակարգի և նպատակների ճկունությունը և դրանց վերակազմակերպումը:

Լեզվի այս բնութագրերն ի սկզբանե դրվել են դրա ստեղծողների կողմից՝ կենտրոնանալով ցանցային ենթակառուցվածքում դրա լայն տարածման վրա:

Լեզուն արդեն օգտագործվում է բազմաթիվ ընկերություններում.

1) Hyperscale տվյալների կենտրոններ;

Չինական Tencent ընկերությունը աշխարհի խոշորագույն ներդրումային ընկերությունն է և վենչուրային կապիտալի խոշորագույն ընկերություններից մեկը: Tencent-ի դուստր ձեռնարկությունները, ինչպես Չինաստանում, այնպես էլ աշխարհի այլ երկրներում, մասնագիտացած են բարձր տեխնոլոգիաների բիզնեսի տարբեր ոլորտներում, ներառյալ տարբեր ինտերնետային ծառայություններ, արհեստական ​​ինտելեկտի և էլեկտրոնային զվարճանքի ոլորտում զարգացումներ:

P4-ը և ծրագրավորվող երթուղիչը առաջադեմ տեխնոլոգիաներ են, որոնք օգտագործվում են ընկերության ցանցային ճարտարապետության մեջ:

Որպես սկզբնավորողներից մեկը՝ Google-ը հպարտությամբ նշում է P4-ի արագ ընդունումը ցանցային արդյունաբերության և, մասնավորապես, տվյալների կենտրոնների ճարտարապետական ​​նախագծման մեջ:

2) առևտրային ընկերություններ.

Goldman Sachs-ն օգտվում է բաց կոդով համայնքի հետ աշխատելուց և ընդհանուր ստանդարտներ ու լուծումներ մշակելուց՝ ցանցային ենթակառուցվածքը նորարարելու և հաճախորդների համար ավելի լավ լուծումներ տրամադրելու համար:

3) արտադրություն.

Ամբողջ ցանցային արդյունաբերությունը կշահի այնպիսի լեզվից, ինչպիսին P4-ն է, որը եզակի կերպով սահմանում է փոխանցման վարքագիծը: Cisco-ն նույնպես հավատում է իր արտադրանքի գծերը փոխանցելուն այս լեզուն օգտագործելու համար:

Juniper Networks-ը ներառել է P4 և P4 Runtime մի շարք ապրանքների մեջ և ապահովում է ծրագրային մուտք դեպի Juniper ներկառուցված պրոցեսոր և դրա ծրագրային կոդը:

Ruijie Networks-ը P4-ի և այն օգուտների ուժեղ աջակիցն է, որը բերում է ցանցերին: P4-ի միջոցով ընկերությունը կարող է ստեղծել և մատուցել լավագույն լուծումները հաճախորդների լայն շրջանակի համար:

4) հեռահաղորդակցության մատակարարներ.

AT&T-ն P4-ի վաղ ընդունողն էր, առաջիններից մեկը, ով օգտագործեց P4-ը՝ սահմանելու այն վարքագիծը, որը ցանկանում էր տեսնել իր ցանցերում, և օգտագործելու P4 ծրագրավորվող վերահասցեավորման սարքեր իր ցանցում:

Deutsche Telekom-ում լեզուն օգտագործվում է ցանցի հիմնական գործառույթները նախատիպելու համար՝ որպես Access 4.0 ծրագրի մաս:

5) կիսահաղորդչային արդյունաբերություն.

Լեզուն թույլ տվեց Barefoot-ին իրականացնել նոր պարադիգմ՝ ծրագրային ապահովման հնարավորությունները ցանցի երթուղային հարթություն հասցնելու համար:

Xilinx-ը P4.org-ի հիմնադիրներից էր և ակտիվորեն ներգրավված էր P4 լեզվի մշակման մեջ և այն ներդրեց FPGA-ի վրա հիմնված ծրագրավորվող հարթակներում՝ SmartNIC և NFV սարքավորումների համար՝ թողարկելով P416 առաջին կոմպիլյատորներից մեկը՝ որպես SDNet դիզայնի մաս:

6) Ծրագրային ապահովում.

VMware-ը կարծում է, որ P4-ը ստեղծում է հսկայական էներգիա, նորարարություն և համայնք, որը խթանում է իմաստալից և անհրաժեշտ փոխակերպումը ցանցում: VMware-ը ի սկզբանե եղել է այս արդյունաբերության շարժման մի մասը, քանի որ նորարարության նոր ալիքը պայմանավորված է ծրագրային ապահովման վրա հիմնված մոտեցումներով, որոնք ընդլայնում են ենթակառուցվածքի հնարավորությունները և այն իրականացնում են վերջին արտադրանքներում:

Այսպիսով, P4-ը թիրախից անկախ և արձանագրությունից անկախ ծրագրավորման լեզու է, որն օգտագործվում է արդյունաբերության և ակադեմիայի կողմից՝ փաթեթների երթուղային վարքագիծը եզակիորեն սահմանելու համար որպես ծրագիր, որն իր հերթին կարող է կազմվել բազմաթիվ թիրախների համար: Այսօր թիրախները ներառում են ապարատային և ծրագրային անջատիչներ, հիպերվիզոր անջատիչներ, NPU, GPU, FPGA, SmartNIC և ASIC:

Լեզվի հիմնական առանձնահատկությունները զգալիորեն ընդլայնում են դրա կիրառման շրջանակը և ապահովում դրա արագ ներդրումը ցանցային ճարտարապետություններում:

Ինչից սկսել

P4-ը բաց նախագիծ է, բոլոր համապատասխան տեղեկությունները գտնվում են կայքում P4.org

Պահեստի հղում https://github.com/p4lang, որտեղ կարող եք ստանալ սկզբնաղբյուրի օրինակ և ձեռնարկներ:

Plugin Eclipse-ի համար P4 աջակցությամբ, բայց մենք կարող ենք խորհուրդ տալ P4 ստուդիա Բոբիկից.

P4 ծրագրավորման լեզու

Դիտարկենք միջուկի հիմնական աբստրակցիաները.

Վերնագրերի սահմանում — նրանց օգնությամբ որոշվում են արձանագրությունների վերնագրերը:

Վերնագրի սահմանումը սահմանում է.

  • փաթեթի ձևաչափերի և վերնագրի դաշտերի անվանումների նկարագրությունը
  • ֆիքսված և փոփոխական թույլատրելի դաշտեր

Օրինակ

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

Վերլուծիչներ — նրանց խնդիրն է վերլուծել վերնագրերը:

Հետևյալ վերլուծիչի օրինակը կորոշի մեքենայի վերջնական վիճակի անցումը մեկ սկզբնական վիճակից երկու վերջնական վիճակներից մեկին.

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

Աղյուսակներ — պարունակում է մեքենայի վիճակներ, որոնք կապում են օգտատիրոջ բանալիները գործողությունների հետ: Գործունեություն — նկարագրություն, թե ինչպես պետք է մանիպուլյացիայի ենթարկվի փաթեթը:

Աղյուսակները պարունակում են վիճակներ (սահմանված են կառավարման մակարդակում) փաթեթների վերահասցեավորման համար, նկարագրում են Match-Action միավորը

Փաթեթները համընկնում են՝

  • Ճշգրիտ համընկնում
  • Նախածանցի ամենաերկար համընկնում (LPM)
  • Եռակի համընկնում (դիմակապատում)

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

Բոլոր հնարավոր գործողությունները պետք է նախապես սահմանվեն աղյուսակներով:

Գործողությունները բաղկացած են կոդից և տվյալներից: Տվյալները ստացվում են կառավարման մակարդակից (օրինակ՝ IP հասցեներ/պորտի համարներ): Որոշակի պրիմիտիվներ, առանց հանգույցների, կարող են ուղղակիորեն նշվել գործողության մեջ, սակայն հրահանգների քանակը պետք է կանխատեսելի լինի: Հետևաբար, գործողությունները չեն կարող պարունակել որևէ օղակ կամ պայմանական հայտարարություն:

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 մոդուլներ — գործողություններ որոնման բանալի ստեղծելու, աղյուսակում որոնելու, գործողություններ կատարելու համար:

Մոդուլի տիպիկ օրինակը ներկայացված է նկարում.

P4 ծրագրավորման լեզու

Վերահսկել հոսքը — ցույց է տալիս Match-Action մոդուլների օգտագործման հերթականությունը: Սա հրամայական ծրագիր է, որը սահմանում է բարձր մակարդակի տրամաբանությունը և Match-Action հաջորդականությունը: Վերահսկիչ հոսքը կապում է բոլոր օբյեկտները՝ սահմանելով հսկողության մակարդակը:

Արտաքին առարկաներ հստակ սահմանված ճարտարապետությամբ և API միջերեսներով հատուկ օբյեկտներ են: Օրինակ՝ չեկային գումարի հաշվարկ, ռեգիստրներ, հաշվիչներ, հաշվիչներ և այլն:

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
}

Մետատվյալներ — յուրաքանչյուր փաթեթի հետ կապված տվյալների կառուցվածքներ:

Գոյություն ունեն մետատվյալների 2 տեսակ.

  Հատուկ մետատվյալներ (դատարկ կառուցվածք բոլոր փաթեթների համար)
    Դուք կարող եք տեղադրել այն, ինչ ուզում եք այստեղ
    Հասանելի է ողջ խողովակաշարով
    հարմար է ձեր սեփական նպատակների համար օգտագործելու համար, օրինակ՝ փաթեթի հեշ պահելու համար

  Ներքին մետատվյալներ - տրամադրվում է ճարտարապետության կողմից
    Այստեղ սահմանվում են մուտքային միացք, ելքային նավահանգիստ
    Ժամացույց, երբ փաթեթը հերթագրված էր, հերթի խորությունը
    multicast հեշ / multicast հերթ
    Փաթեթի առաջնահերթություն, փաթեթի կարևորություն
    Ելքային պորտի ճշգրտում (օրինակ՝ ելքային հերթ)

P4 կոմպիլյատոր

P4 կոմպիլյատորը (P4C) առաջացնում է.

  1. Տվյալների հարթության գործարկման ժամանակը
  2. API տվյալների հարթությունում մեքենայի վիճակի կառավարման համար

P4 ծրագրավորման լեզու

Ծրագրային անջատիչի օրինակ P4 լեզվով

Աղբյուրի կոդերը կարելի է ներբեռնել պահոցից:

p4lang/p4c-bm. ստեղծում է JSON կոնֆիգուրացիա bmv2-ի համար
p4lang/bmv2. ծրագրային անջատիչ, որը հասկանում է bmv2 տարբերակի JSON կոնֆիգուրացիաները

Նկարը ցույց է տալիս նախագծի կազմման դիագրամը.

P4 ծրագրավորման լեզու

Մանիպուլյացիաներ աղյուսակներով, ընթերցանության գրանցամատյաններով, հաշվիչներով.

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


Աղբյուրի կոդը պարունակում է simple_switch_CLI ծրագիրը՝ ծրագրային անջատիչի API-ի հարմար օգտագործման համար:

Այս և այլ օրինակներ կարող եք ներբեռնել պահոցից:

P4 ծրագրավորման լեզու

PS Այս ամառվա սկզբին Intel-ը պայմանագիր ստորագրեց Barefoot Networks-ը ձեռք բերելու համար՝ փորձելով արագորեն բավարարել Hyperscale Cloud-ի օգտատերերի կարիքները: Ինչպես ասել է Նավին Շենոյը (Intel Corporation-ի Data Center Group-ի գործադիր փոխնախագահ և գլխավոր մենեջեր), դա թույլ կտա Intel-ին ավելի մեծ աշխատանքային բեռներ և ավելի շատ հնարավորություններ ապահովել տվյալների կենտրոնի հաճախորդների համար:

Իմ անձնական կարծիքով, չպետք է մոռանալ, որ Intel-ը առաջատար է FPGA չիպերի արտադրության մեջ և ունի հիանալի Quartus միջավայր։ Սա նշանակում է, որ մենք կարող ենք ակնկալել, որ Intel-ի գալուստով Barefoot-ը ոչ միայն կընդլայնի իր արտադրանքի գիծը, այլ նաև Quartus-ը և P4 Studio-ն լուրջ թարմացումներ և լրացումներ կստանան Toffino և Toffino 2 շարքում:

P4 համայնքի պաշտոնական անդամ՝ ընկերություն Գործոնների խումբ.

Source: www.habr.com

Добавить комментарий