P4 dasturlash tili

P4 dasturlash tili
P4 - paketli marshrutlash qoidalarini dasturlash uchun mo'ljallangan dasturlash tili. C yoki Python kabi umumiy maqsadli tildan farqli o'laroq, P4 tarmoq marshrutlash uchun optimallashtirilgan bir qator dizaynlarga ega bo'lgan domenga xos tildir.

P4 ochiq manba tili boʻlib, P4 Language Consortium nomli notijorat tashkilot tomonidan litsenziyalangan va qoʻllab-quvvatlanadi. U, shuningdek, ochiq manbali tarmoq loyihalari uchun ikkita eng yirik soyabon tashkilotlar bo'lgan Open Networking Foundation (ONF) va Linux Foundation (LF) tomonidan qo'llab-quvvatlanadi.
Til dastlab 2013 yilda yaratilgan va 2014 yilda SIGCOMM CCR hujjatida "Protokoldan mustaqil, paketli marshrutlash protsessorini dasturlash" deb nomlangan.

Yaratilganidan beri P4 o'sib bordi va eksponent tarzda rivojlandi, tezda tarmoq qurilmalari, shu jumladan tarmoq adapterlari, kalitlari va marshrutizatorlari tomonidan paketlarni uzatishni tavsiflash uchun standartga aylandi.

"SDN tarmoq sanoatini o'zgartirdi va P4 marshrutlash uchun dasturlash qobiliyatini olib, SDNni keyingi bosqichga olib chiqadi", dedi Ochiq tarmoq fondi ijrochi direktori Guru Parulkar.

P4 tili dastlab Google, Intel, Microsoft Research, Barefoot, Prinston va Stenforddan bir guruh muhandis va tadqiqotchilar tomonidan yaratilgan. Maqsad oddiy edi: dasturiy ta'minot ishlab chiqaruvchisi bir kunda o'rganishi mumkin bo'lgan foydalanish uchun qulay til yaratish va paketlar tarmoqlar bo'ylab qanday yuborilishini aniq tasvirlash uchun foydalanish.

Eng boshidanoq, P4 maqsadli mustaqil bo'lishi uchun ishlab chiqilgan (ya'ni, P4-da yozilgan dastur ASIC, FPGA, CPU, NPU va GPU kabi turli maqsadlarda ishlash uchun o'zgarmasdan tuzilishi mumkin).

Til, shuningdek, protokoldan mustaqil (ya'ni, P4 dasturi mavjud standart protokollarni tavsiflashi yoki yangi maxsus manzillash rejimlarini belgilash uchun ishlatilishi mumkin).

Sanoatda P4 qurilmani dasturlash uchun ishlatiladi. Ehtimol, kelajakda Internet-RFC va IEEE standartlari P4 spetsifikatsiyasini ham o'z ichiga oladi.

P4 ham dasturlashtiriladigan, ham sobit funksiyali qurilmalar uchun ishlatilishi mumkin. Masalan, u ochiq manbali SONiC switch OS tomonidan qo'llaniladigan Switch Abstraction Interface (SAI) API-larida kommutator quvurlari xatti-harakatlarini aniq qayd etish uchun ishlatiladi. P4, shuningdek, ONF Stratum loyihasida turli xil sobit va dasturlashtiriladigan qurilmalarda kommutatsiya harakatlarini tavsiflash uchun ishlatiladi.

Birinchi marta kommutator va tarmoq adapterlarining xatti-harakatlarini tavsiflash, joylashtirishdan oldin butun tarmoqning aniq bajariladigan modelini yaratishga imkon beradi. Yirik bulutli provayderlar tarmoqni to‘liq dasturiy ta’minot yordamida sinab ko‘rishlari va disk raskadrovka qilishlari mumkin, bu esa qimmatbaho uskunani talab qilmasdan laboratoriyada o‘zaro muvofiqlikni tekshirish vaqtini va narxini sezilarli darajada kamaytiradi.

P4 dan foydalangan holda, tarmoq uskunalari sotuvchilari barcha mahsulotlarda umumiy asosiy marshrutlash xatti-harakatlarini kutishlari mumkin, bu test infratuzilmasidan qayta foydalanishga imkon beradi, boshqaruv dasturiy ta'minotini ishlab chiqishni soddalashtiradi va oxir-oqibat o'zaro muvofiqlikni ta'minlaydi.

Albatta, P4 marshrutlashning mutlaqo yangi usullarini tavsiflovchi dasturlarni yozish uchun ishlatilishi mumkin. Masalan, P4 telemetriya va ma'lumotlar markazlarida, korxona va xizmat ko'rsatuvchi provayder tarmoqlarida o'lchash uchun keng qo'llaniladi.

Tadqiqot hamjamiyati ham faollashdi. Bir nechta etakchi akademik tarmoq tadqiqot guruhlari P4 dasturlariga asoslangan qiziqarli yangi ilovalarni nashr etdi, jumladan yuklarni muvozanatlash, konsensus protokollari va asosiy qiymatlarni keshlash. Yangi dasturlash paradigmasi yaratilmoqda, innovatsiyalar apparatdan dasturiy ta'minotga o'tmoqda, bu ko'plab kutilmagan, yangi va zukko g'oyalarning paydo bo'lishiga imkon beradi.

Ishlab chiquvchilar hamjamiyati kodlarni ishlab chiqishga katta hissa qo'shdi, jumladan kompilyatorlar, quvurlar, xatti-harakatlar modellari, API'lar, test ramkalari, ilovalar va boshqalar. Alibaba, AT&T, Barefoot, Cisco, Fox Networks, Google, Intel, IXIA, Juniper Networks, Mellanox, Microsoft, Netcope, Netronome, VMware, Xilinx va ZTE kabi kompaniyalar maxsus ishlab chiquvchilarga ega; BUPT, Kornell, Garvard, MIT, NCTU, Princeton, Stenford, Technion, Tsinghua, UMass va USI kabi universitetlardan; va ochiq manbali loyihalar, jumladan CORD, FD.io, OpenDaylight, ONOS, OvS, SAI va Stratum P4 mustaqil hamjamiyat loyihasi ekanligini ta'kidlaydi.

P4 tili uchun kontrollerlarning odatiy avlodi:

P4 dasturlash tili

Qo'llash istiqbollari

P4 dasturlash tili
Til marshrutlash ilovalari uchun mo'ljallanganligi sababli, talablar ro'yxati va dizayn variantlari umumiy maqsadli dasturlash tillaridan farq qiladi. Tilning asosiy xususiyatlari quyidagilardan iborat:

  1. Maqsadlarni amalga oshirishdan mustaqillik;
  2. Amaldagi protokol(lar) ning mustaqilligi;
  3. Maydonni qayta sozlash imkoniyati.

Maqsadni amalga oshirishdan mustaqillik

P4 dasturlari amalga oshirishdan mustaqil bo'lish uchun mo'ljallangan, ya'ni ular umumiy maqsadli protsessorlar, FPGA'lar, tizimdagi chiplar, tarmoq protsessorlari va ASIClar kabi turli xil ijro dvigatellari uchun kompilyatsiya qilinishi mumkin. Ushbu har xil turdagi mashinalar P4 maqsadlari sifatida tanilgan va har bir maqsad P4 manba kodini maqsadli kalit modeliga aylantirish uchun kompilyatorni talab qiladi. Kompilyator maqsadli qurilmaga, tashqi dasturiy ta'minotga yoki hatto bulutli xizmatga o'rnatilishi mumkin. P4 dasturlari uchun asl maqsadlarning aksariyati oddiy paketlarni almashtirish uchun bo'lganligi sababli, "P4 maqsadi" aniqroq bo'lsa ham, "P4 switch" atamasini eshitish juda keng tarqalgan.

Amaldagi protokol(lar) ning mustaqilligi

P4 protokoldan mustaqil. Bu shuni anglatadiki, tilda IP, Ethernet, TCP, VxLAN yoki MPLS kabi umumiy protokollar uchun mahalliy yordam mavjud emas. Buning o'rniga, P4 dasturchisi dasturdagi kerakli protokollarning sarlavha formatlari va maydon nomlarini tavsiflaydi, bu esa o'z navbatida kompilyatsiya qilingan dastur va maqsadli qurilma tomonidan talqin qilinadi va qayta ishlanadi.

Maydonni qayta sozlash imkoniyati

Protokolning mustaqilligi va mavhum til modeli qayta konfiguratsiyaga imkon beradi - P4 maqsadlari tizim o'rnatilgandan so'ng paketlarni qayta ishlashni o'zgartirishi kerak. Bu qobiliyat an'anaviy ravishda sobit funksiyali integral mikrosxemalar emas, balki umumiy maqsadli protsessorlar yoki tarmoq protsessorlari orqali marshrutlash bilan bog'liq edi.

Garchi tilda ma'lum bir protokollar to'plamining ishlashini optimallashtirishga to'sqinlik qiladigan hech narsa yo'q bo'lsa-da, bu optimallashtirishlar til muallifiga ko'rinmaydi va natijada tizim va maqsadlarning moslashuvchanligini va ularning qayta konfiguratsiyasini kamaytirishi mumkin.

Tilning ushbu xususiyatlari dastlab uning yaratuvchilari tomonidan tarmoq infratuzilmasida keng qo'llanilishiga e'tibor qaratgan holda belgilab qo'yilgan.

Til allaqachon ko'plab kompaniyalarda qo'llaniladi:

1) Giper miqyosdagi ma'lumotlar markazlari;

Xitoyning Tencent kompaniyasi dunyodagi eng yirik investitsiya kompaniyasi va eng yirik venchur kapital firmalaridan biri hisoblanadi. Tencentning Xitoydagi va dunyoning boshqa mamlakatlaridagi sho‘ba korxonalari yuqori texnologiyali biznesning turli yo‘nalishlari, jumladan, turli internet xizmatlari, sun’iy intellekt va elektron o‘yin-kulgi sohasidagi ishlanmalarga ixtisoslashgan.

P4 va dasturlashtiriladigan marshrutlash kompaniyaning tarmoq arxitekturasida qo'llaniladigan ilg'or texnologiyalardir.

Yaratuvchilardan biri sifatida Google P4 tarmog'ining tarmoq sanoatida va xususan, ma'lumotlar markazi arxitektura dizaynida tez o'zlashtirilishini faxrlanadi.

2) tijorat kompaniyalari;

Goldman Sachs tarmoq infratuzilmasini innovatsiya qilish va mijozlar uchun yaxshiroq yechimlarni taqdim etish uchun ochiq manbalar hamjamiyati bilan ishlash va umumiy standartlar va yechimlarni ishlab chiqishdan foydalanadi.

3) ishlab chiqarish;

Barcha tarmoq industriyasi P4 kabi tildan foydalanishni o'ziga xos tarzda yo'naltirish xatti-harakatlarini belgilaydi. Cisco, shuningdek, ushbu tildan foydalanish uchun mahsulot qatorlarini o'tkazishga ishonadi.

Juniper Networks P4 va P4 Runtime-ni bir qator mahsulotlarga kiritdi va Juniper o'rnatilgan protsessor va uning dasturiy kodiga dasturiy kirishni ta'minlaydi.

Ruijie Networks P4 ning kuchli tarafdori va uning tarmoqlarga olib keladigan afzalliklari. P4 yordamida kompaniya mijozlarning keng doirasiga eng yaxshi yechimlarni yaratishi va yetkazib berishi mumkin.

4) telekommunikatsiya provayderlari;

AT&T P4-ni birinchilardan bo'lib o'zlashtirgan bo'lib, o'z tarmoqlarida ko'rmoqchi bo'lgan xatti-harakatni aniqlash uchun P4 dan birinchilardan biri bo'lgan va o'z tarmog'ida P4 dasturlashtiriladigan yo'naltiruvchi qurilmalardan foydalangan.

Deutsche Telekomda bu til Access 4.0 dasturining bir qismi sifatida asosiy tarmoq funksiyalarini prototiplash uchun ishlatiladi.

5) yarimo'tkazgich sanoati;

Til Barefoot-ga dasturiy ta'minot imkoniyatlarini tarmoq marshrutlash tekisligiga etkazish uchun yangi paradigmani amalga oshirishga imkon berdi.

Xilinx P4.org asoschilaridan biri edi va P4 tilini ishlab chiqishda faol ishtirok etdi va uni SDNet dizaynining bir qismi sifatida birinchi P416 kompilyatorlaridan birini chiqargan holda SmartNIC va NFV apparatlari uchun FPGA asosidagi dasturlashtiriladigan platformalarda amalga oshirdi.

6) Dasturiy ta'minot.

VMware P4 tarmog'ida mazmunli va zarur o'zgarishlarni amalga oshiradigan ulkan energiya, innovatsiyalar va hamjamiyat yaratadi, deb hisoblaydi. VMware boshidan buyon ushbu sanoat harakatining bir qismi bo'lib kelgan, chunki innovatsiyalarning yangi to'lqini infratuzilma imkoniyatlarini kengaytiradigan va uni eng so'nggi mahsulotlarga tatbiq etadigan dasturiy ta'minotga asoslangan yondashuvlar bilan boshqariladi.

Shunday qilib, P4 maqsaddan mustaqil va protokoldan mustaqil dasturlash tili bo'lib, u sanoat va akademiya tomonidan paketli marshrutlash xatti-harakatlarini dastur sifatida noyob tarzda aniqlash uchun foydalaniladi va bu o'z navbatida bir nechta maqsadlar uchun kompilyatsiya qilinishi mumkin. Bugungi kunda maqsadlarga apparat va dasturiy ta'minot kalitlari, gipervizor kalitlari, NPU'lar, GPU'lar, FPGA'lar, SmartNIC'lar va ASIC'lar kiradi.

Tilning asosiy xususiyatlari uning qo'llanilish doirasini sezilarli darajada kengaytiradi va tarmoq arxitekturalarida tez amalga oshirilishini ta'minlaydi.

Ishga

P4 - ochiq loyiha, barcha tegishli ma'lumotlar veb-saytda P4.org

Repozitoriya havolasi https://github.com/p4lang, bu erda siz misol manba kodi va o'quv qo'llanmalarini olishingiz mumkin.

Plugin P4 qo'llab-quvvatlashi bilan Eclipse uchun, lekin biz tavsiya qilishimiz mumkin P4 studiyasi yalangoyoqdan.

P4 dasturlash tili

Yadroning asosiy abstraksiyalarini ko'rib chiqamiz:

Sarlavhalarni aniqlash — ularning yordami bilan protokol sarlavhalari aniqlanadi.

Sarlavha ta'rifi quyidagilarni belgilaydi:

  • paket formatlarining tavsifi va sarlavha maydoni nomlari
  • Ruxsat etilgan va o'zgaruvchan maydonlar

Misol uchun

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

Tahlil qiluvchilar — ularning vazifasi sarlavhalarni tahlil qilishdir.

Quyidagi tahliliy misol mashinaning yakuniy holatining bitta boshlang'ich holatidan ikkita yakuniy holatdan biriga o'tishini aniqlaydi:

P4 dasturlash tili

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

Jadvallar — foydalanuvchi kalitlarini harakatlar bilan bog‘laydigan mashina holatlarini o‘z ichiga oladi. Amallar — paketni qanday boshqarish kerakligi tavsifi.

Jadvallarda paketlarni yo'naltirish uchun holatlar mavjud (boshqaruv darajasida belgilangan), Match-Action birligini tavsiflang

Paketlar quyidagilarga mos keladi:

  • Aniq moslik
  • Eng uzun prefiks mosligi (LPM)
  • Uchta moslik (niqoblash)

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

Barcha mumkin bo'lgan harakatlar jadvalda oldindan belgilanishi kerak.

Amallar kod va ma'lumotlardan iborat. Ma'lumotlar boshqaruv darajasidan keladi (masalan, IP manzillar/port raqamlari). Ayrim, halqasiz ibtidoiylar to'g'ridan-to'g'ri harakatda ko'rsatilishi mumkin, ammo ko'rsatmalar soni oldindan aytib bo'lishi kerak. Shuning uchun, harakatlar hech qanday tsikl yoki shartli iboralarni o'z ichiga olmaydi.

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 modullari — qidiruv kalitini yaratish, jadvalda qidirish, amallarni bajarish uchun harakatlar.

Modulning odatiy namunasi rasmda ko'rsatilgan:

P4 dasturlash tili

Nazorat oqimi — Match-Action modullaridan foydalanish tartibini bildiradi. Bu yuqori darajadagi mantiq va Match-Action ketma-ketligini belgilaydigan majburiy dastur. Boshqarish oqimi nazorat darajasini belgilash orqali barcha ob'ektlarni bog'laydi.

Tashqi ob'ektlar aniq belgilangan arxitektura va API interfeyslariga ega maxsus ob'ektlardir. Masalan, nazorat summasini hisoblash, registrlar, hisoblagichlar, hisoblagichlar va boshqalar.

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
}

Metadata — har bir paket bilan bog'langan ma'lumotlar tuzilmalari.

Metadataning 2 turi mavjud:

  Maxsus metamaʼlumotlar (barcha paketlar uchun boʻsh tuzilma)
    Bu erda siz xohlagan narsani qo'yishingiz mumkin
    Butun quvur liniyasida mavjud
    o'z maqsadlaringiz uchun foydalanish uchun qulay, masalan, paket xashini saqlash uchun

  Ichki metadata - arxitektura tomonidan taqdim etiladi
    Kirish porti, chiqish porti bu yerda aniqlanadi
    Paket navbatga qo'yilgan vaqt tamg'asi, navbat chuqurligi
    multicast hash / multicast navbat
    Paket ustuvorligi, paket ahamiyati
    Chiqish porti spetsifikatsiyasi (masalan, chiqish navbati)

P4 kompilyatori

P4 kompilyatori (P4C) quyidagilarni yaratadi:

  1. Ma'lumotlar tekisligining ishlash vaqti
  2. Ma'lumotlar tekisligida mashina holatini boshqarish uchun API

P4 dasturlash tili

P4 tilidagi dasturiy ta'minotni almashtirishga misol

Manba kodlarini ombordan yuklab olish mumkin.

p4lang/p4c-bm: bmv2 uchun JSON konfiguratsiyasini yaratadi
p4lang/bmv2: bmv2 versiyasi JSON konfiguratsiyasini tushunadigan dasturiy ta'minot kaliti

Rasmda loyiha kompilyatsiya diagrammasi ko'rsatilgan:

P4 dasturlash tili

Jadvallar, o'qish registrlari, hisoblagichlar bilan manipulyatsiyalar:

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


Manba kodi dasturiy ta'minotni almashtirish API-dan qulay foydalanish uchun simple_switch_CLI dasturini o'z ichiga oladi.

Siz ushbu va boshqa misollarni ombordan yuklab olishingiz mumkin.

P4 dasturlash tili

PS Shu yoz boshida Intel Hyperscale Cloud foydalanuvchilarining ehtiyojlarini tezda qondirish maqsadida Yalang oyoq tarmoqlarini sotib olish bo'yicha shartnoma imzoladi. Navin Shenoy (Intel korporatsiyasi maʼlumotlar markazi guruhining ijrochi vitse-prezidenti va bosh menejeri) taʼkidlaganidek, bu Intelga maʼlumotlar markazi mijozlari uchun kattaroq ish yuklari va koʻproq imkoniyatlarni taqdim etish imkonini beradi.

Mening shaxsiy fikrimcha, Intel FPGA chiplarini ishlab chiqarishda etakchi ekanligini va u ajoyib Quartus muhitiga ega ekanligini unutmasligimiz kerak. Bu shuni anglatadiki, Intelning kelishi bilan Barefoot nafaqat mahsulot qatorini kengaytiradi, balki Quartus va P4 Studio ham Toffino va Toffino 2 qatoriga jiddiy yangilanishlar va qo'shimchalarni oladi.

P4 hamjamiyatining rasmiy a'zosi - kompaniya Faktorlar guruhi.

Manba: www.habr.com

a Izoh qo'shish