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-ді келесі деңгейге шығарады», - деді Гуру Парулкар, Open Networking Foundation атқарушы директоры.

P4 тілін бастапқыда Google, Intel, Microsoft Research, Barefoot, Princeton және Stanford компанияларының инженерлері мен зерттеушілері жасаған. Мақсат қарапайым болды: бағдарламалық жасақтаманы әзірлеуші ​​бір күнде үйренетін және пакеттердің желілер арқылы қалай жіберілетінін дәл сипаттау үшін қолдануға болатын оңай тілді жасау.

Басынан бастап P4 мақсатқа тәуелсіз болу үшін жасалған (яғни, P4 тілінде жазылған бағдарлама ASIC, FPGA, CPU, NPU және GPU сияқты әртүрлі мақсаттарда жұмыс істеу үшін өзгеріссіз құрастырылуы мүмкін).

Тіл сонымен қатар хаттамаға тәуелсіз (яғни, P4 бағдарламасы бар стандартты хаттамаларды сипаттай алады немесе жаңа реттелетін адрестеу режимдерін көрсету үшін пайдаланылуы мүмкін).

Өнеркәсіпте P4 құрылғыны бағдарламалау үшін қолданылады. Мүмкін болашақта Internet-RFC және IEEE стандарттары P4 спецификациясын да қамтитын болады.

P4 бағдарламаланатын және тіркелген функциялы құрылғылар үшін де пайдаланылуы мүмкін. Мысалы, ол ашық бастапқы SONiC коммутаторы ОЖ пайдаланатын Switch Abstraction Interface (SAI) API интерфейстерінде коммутатор құбырының әрекетін дәл жазу үшін пайдаланылады. 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, Корнелл, Гарвард, MIT, NCTU, Принстон, Стэнфорд, Технион, Цинхуа, 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) Гипер масштабты деректер орталықтары;

Қытайлық 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 тілін әзірлеуге белсенді қатысты және оны SDNet дизайнының бөлігі ретінде P416 компиляторларының алғашқыларының бірін шығара отырып, SmartNIC және NFV аппараттық құралдары үшін FPGA негізіндегі бағдарламаланатын платформаларға енгізді.

6) Бағдарламалық қамтамасыз ету.

VMware P4 желідегі мағыналы және қажетті трансформацияны жүргізетін орасан зор энергияны, инновацияларды және қауымдастықты жасайды деп санайды. VMware басынан бері осы салалық қозғалыстың бір бөлігі болды, өйткені инновацияның жаңа толқыны инфрақұрылым мүмкіндіктерін кеңейтетін және оны соңғы өнімдерге енгізетін бағдарламалық қамтамасыз ету негізіндегі тәсілдермен қозғалады.

Осылайша, P4 - мақсатқа тәуелсіз және хаттамаға тәуелсіз бағдарламалау тілі, оны өнеркәсіп пен академиялық ортада пакетті бағыттау әрекетін бағдарлама ретінде бірегей анықтау үшін пайдаланылады, ол өз кезегінде бірнеше мақсат үшін құрастырылуы мүмкін. Бүгінгі таңда мақсаттарға аппараттық және бағдарламалық қамтамасыз ету қосқыштары, гипервизор қосқыштары, NPU, GPU, FPGA, SmartNIC және ASIC кіреді.

Тілдің негізгі ерекшеліктері оның қолдану аясын айтарлықтай кеңейтеді және желілік архитектураларда оның жылдам орындалуын қамтамасыз етеді.

Неден бастау керек

P4 - ашық жоба, барлық тиісті ақпарат веб-сайтта P4.org

Репозиторий сілтемесі https://github.com/p4lang, мұнда бастапқы кодты және оқулықтарды алуға болады.

Плагин P4 қолдауымен Eclipse үшін, бірақ біз ұсына аламыз P4 Studio Жалаңаяқтан.

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

Кестелер — пайдаланушы кілттерін әрекеттермен байланыстыратын машина күйлерін қамтиды. Әрекеттер — буманы қалай өңдеу керектігінің сипаттамасы.

Кестелерде пакеттерді қайта жіберуге арналған күйлер (басқару деңгейінде анықталған), Сәйкестік-әрекет бірлігін сипаттаңыз

Пакеттер сәйкестендіріледі:

  • Нақты сәйкестік
  • Ең ұзақ префикс сәйкестігі (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;
}

Сәйкестік-әрекет модульдері — іздеу кілтін құру, кестеде іздеу, әрекеттерді орындау әрекеттері.

Модульдің типтік мысалы суретте көрсетілген:

P4 бағдарламалау тілі

Басқару ағыны — 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 түрі бар:

  Теңшелетін метадеректер (барлық пакеттер үшін бос құрылым)
    Мұнда қалағаныңызды қоюға болады
    Бүкіл құбырда қол жетімді
    өз мақсаттарыңыз үшін пайдалануға ыңғайлы, мысалы, пакеттік хэшті сақтау үшін

  Ішкі метадеректер – архитектурамен қамтамасыз етілген
    Кіріс порты, шығыс порты осында анықталады
    Пакет кезекке қойылған уақыт белгісі, кезек тереңдігі
    мультикаст хэш / мультикаст кезегі
    Пакет басымдылығы, пакет маңыздылығы
    Шығыс портының сипаттамасы (мысалы, шығыс кезегі)

P4 компиляторы

P4 компиляторы (P4C) жасайды:

  1. Деректер жазықтығының орындалу уақыты
  2. Деректер жазықтығында машина күйін басқаруға арналған API

P4 бағдарламалау тілі

P4 тіліндегі бағдарламалық құрал ауыстырғышының мысалы

Бастапқы кодтарды репозиторийден жүктеп алуға болады.

p4lang/p4c-bm: bmv2 үшін JSON конфигурациясын жасайды
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>


Бастапқы кодта бағдарламалық құрал ауыстырғышының API интерфейсін ыңғайлы пайдалану үшін simple_switch_CLI бағдарламасы бар.

Осы және басқа мысалдарды репозиторийден жүктеп алуға болады.

P4 бағдарламалау тілі

PS Осы жаздың басында Intel Hyperscale Cloud пайдаланушыларының қажеттіліктерін жылдам қанағаттандыру мақсатында жалаң аяқ желілерді сатып алу туралы келісімге қол қойды. Навин Шеной (Intel корпорациясындағы деректер орталығы тобының атқарушы вице-президенті және бас менеджері) айтқандай, бұл Intel корпорациясына деректер орталығының тұтынушылары үшін үлкен жұмыс жүктемелері мен көбірек мүмкіндіктер беруге мүмкіндік береді.

Менің жеке пікірімше, Intel компаниясы FPGA чиптерін өндіруде көшбасшы екенін және оның Quartus ортасы тамаша екенін ұмытпау керек. Бұл Intel келуімен Barefoot өнім желісін кеңейтіп қана қоймайды, сонымен қатар Quartus және P4 Studio Toffino және Toffino 2 желісіне елеулі жаңартулар мен толықтырулар алады деп күтуге болады.

P4 қауымдастығының ресми мүшесі - компания факторлар тобы.

Ақпарат көзі: www.habr.com

пікір қалдыру