Мова праграмавання 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 можа выкарыстоўвацца як для праграмуемых, так і для прылад з фіксаванай функцыяй. Напрыклад, ён выкарыстоўваецца для дакладнага запісу паводзін канвеера камутатара ў API-інтэрфейсах інтэрфейсу абстракцыі камутатара (SAI), выкарыстоўваных АС камутатара з адчыненым зыходным кодам SONiC. 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, and 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 і ўкаранілі яго ў праграмуемыя платформы на аснове FPGA для абсталявання SmartNIC і NFV, выпусціўшы адзін з першых кампілятараў P416 у якасці часткі дызайну SDNet.

6) Праграмнае забеспячэнне.

У кампаніі VMware лічаць што P4 стварае велізарную энергію, інавацыі і супольнасць, якое вядзе да значных і неабходных пераўтварэнняў у сеткі. VMware першапачаткова была часткай гэтага галіновага руху, паколькі новая хваля інавацый выклікана праграмнымі падыходамі, якія пашыраюць магчымасці інфраструктуры і рэалізуе яго ў найноўшых прадуктах.

Такім чынам, P4 — гэта не залежная ад мэты і не якая залежыць ад пратаколу мова праграмавання, які выкарыстоўваецца прамысловасцю і навуковай супольнасцю для адназначнага вызначэння паводзін маршрутызацыі пакетаў як праграмы, якая, у сваю чаргу, можа быць скампіляваная для некалькіх мэт. Сёння мэты ўключаюць апаратныя і праграмныя камутатары, гіпервізорныя камутатары, NPU, графічныя працэсары, FPGA, SmartNIC і ASIC.

Галоўныя рысы мовы значна пашыраюць сферы яе прымянення і забяспечваюць яе хуткую імплементацыю ў архітэктуры сетак.

З чаго пачаць

P4 – гэта адкрыты праект, уся актуальная інфармацыя знаходзіцца на сайце P4.org

Спасылка на рэпазітар https://github.com/p4lang, дзе вы можаце атрымаць зыходныя коды прыкладаў і навучальныя матэрыялы.

убудова для Eclipse з падтрымкай P4, але можам парэкамендаваць P4 Studio ад кампаніі Barefoot.

Мова праграмавання 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

Супастаўленне пакетаў вырабляецца па:

  • Дакладнай адпаведнасці
  • Самаму доўгаму Match з прэфіксам (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 віды метададзеных:

  Карыстальніцкія метададзеныя (пустая структура для ўсіх пакетаў)
    Вы можаце пакласці тут усё, што вы хочаце
    Даступна на ўсім працягу pipeline
    зручна для выкарыстання ў сваіх мэтах, напрыклад, для захоўвання хэша пакета

  Унутраныя метададзеныя - забяспечваецца архітэктурай
    Уваходны порт, выходны порт вызначаюцца тут
    Пазнака часу, калі пакет быў пастаўлены ў чаргу, глыбіня чаргі
    мультыкаст хэш/ мультыкаст чаргу
    Прыярытэт пакета, важнасць пакета
    Спецыфікацыя выходнага порта (напрыклад, чарга вываду)

Кампілятар P4

Р4 кампілятар (P4C) генеруе:

  1. Data plane runtime
  2. API для кіравання станам машыны ў data plane

Мова праграмавання P4

Прыклад праграмнага світача на мове P4

Зыходныя коды можна спампаваць з рэпазітара.

p4lang/p4c-bm: стварае канфігурацыю JSON для bmv2
p4lang/bmv2: праграмны камутатар, які разумее канфігурацыі JSON версіі bmv2

На малюнку прыведзена схема кампіляцыі праекта:

Мова праграмавання 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. Як заявіў Navin Shenoy, гэта дазволіць Intel прадастаўляць вялікія працоўныя нагрузкі і больш магчымасцяў для кліентаў ЦАД.

На маю асабістую думку не варта забываць, што кампанія Intel – лідэр па вытворчасці чыпаў FPGA і ў яе ёсць выдатнае асяроддзе Quartus. А значыць можна чакаць, што з прыходам у Intel, у кампаніі Barefoot не толькі папоўніцца вытворчая лінейка, але і Quartus, і P4 Studio чакаюць сур'ёзныя абнаўленні і папаўненне лінейкай Toffino і Toffino 2.

Афіцыйны ўдзельнік супольнасці P4 – кампанія Фактар ​​груп.

Крыніца: habr.com

Дадаць каментар