P4 програмчлалын хэл

P4 програмчлалын хэл
P4 нь пакет чиглүүлэлтийн дүрмийг програмчлахад зориулагдсан програмчлалын хэл юм. C эсвэл Python гэх мэт ерөнхий зориулалтын хэлээс ялгаатай нь P4 нь сүлжээний чиглүүлэлт хийхэд оновчтой болсон хэд хэдэн загвар бүхий домэйны тусгай хэл юм.

P4 бол P4 Language Consortium хэмээх ашгийн бус байгууллагаас лицензтэй, нээлттэй эх хэл юм. Нээлттэй эх сурвалжийн сүлжээний төслүүдийн хамгийн том дээвэр байгууллагууд болох Нээлттэй Сүлжээний Сан (ONF) болон Линукс Сан (LF) үүнийг мөн дэмждэг.
Энэ хэлийг анх 2013 онд зохион бүтээсэн бөгөөд 2014 оны SIGCOMM CCR баримт бичигт "Протоколын хамааралгүй, пакет чиглүүлэлтийн процессорын програмчлал" гэсэн гарчигтай тайлбарласан.

Үүссэн цагаасаа хойш P4 нь хурдацтай хөгжиж, хурдацтай хөгжиж, сүлжээний адаптер, унтраалга, чиглүүлэгч зэрэг сүлжээний төхөөрөмжүүдээр пакет дамжуулахыг тайлбарлах стандарт болсон.

Нээлттэй сүлжээний сангийн гүйцэтгэх захирал Гуру Парулкар хэлэхдээ "SDN нь сүлжээний салбарыг өөрчилсөн бөгөөд P4 нь чиглүүлэлтийн программчлах чадварыг авчирснаар SDN-ийг дараагийн түвшинд хүргэсэн" гэж хэлэв.

P4 хэлийг анх Google, Intel, Microsoft Research, Barefoot, Принстон, Стэнфордын хэсэг инженер, судлаачид бүтээжээ. Зорилго нь энгийн байсан: програм хангамж хөгжүүлэгчийн нэг өдрийн дотор сурч болохуйц хэрэглэхэд хялбар хэлийг бий болгож, сүлжээгээр пакетуудыг хэрхэн илгээж байгааг үнэн зөв тайлбарлахад ашиглах.

Анхнаасаа 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, 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, SoC, сүлжээний процессор, ASIC гэх мэт олон төрлийн гүйцэтгэх хөдөлгүүрт зориулж хөрвүүлэх боломжтой гэсэн үг юм. Эдгээр өөр өөр төрлийн машинуудыг P4 зорилт гэж нэрлэдэг бөгөөд зорилт бүрд P4 эх кодыг зорилтот шилжүүлэгч загвар болгон хөрвүүлэхийн тулд хөрвүүлэгч шаардлагатай. Хөрвүүлэгчийг зорилтот төхөөрөмж, гадаад програм хангамж, эсвэл бүр үүлэн үйлчилгээнд суулгаж болно. P4 программуудын анхны зорилтуудын ихэнх нь энгийн пакет сэлгэх зориулалттай байсан тул "P4 зорилтот" нь илүү нарийвчлалтай байсан ч "P4 шилжүүлэгч" гэсэн нэр томъёог сонсох нь түгээмэл байдаг.

Ашигласан протокол(ууд)-ын бие даасан байдал

P4 нь протоколоос хамааралгүй. Энэ нь тухайн хэл нь IP, Ethernet, TCP, VxLAN эсвэл MPLS зэрэг нийтлэг протоколуудыг дэмждэггүй гэсэн үг юм. Үүний оронд P4 программист программ дахь шаардлагатай протоколуудын толгойн формат, талбарын нэрийг тайлбарлаж, тэдгээрийг хөрвүүлсэн програм болон зорилтот төхөөрөмжөөр тайлбарлаж, боловсруулдаг.

Талбайн дахин тохируулах боломж

Протоколын бие даасан байдал, хийсвэр хэлний загвар нь дахин тохируулах боломжийг олгодог - P4 зорилтууд системийг байрлуулсны дараа пакет боловсруулалтыг өөрчлөх боломжтой байх ёстой. Уламжлал ёсоор энэ чадвар нь тогтмол функцтэй интеграл хэлхээг бус ерөнхий зориулалтын процессор эсвэл сүлжээний процессороор дамжуулан чиглүүлэлт хийхтэй холбоотой байдаг.

Хэдийгээр тухайн хэл дээр тодорхой багц протоколын гүйцэтгэлийг оновчтой болгоход саад болох зүйл байхгүй ч эдгээр оновчлол нь хэлний зохиогчид үл үзэгдэх бөгөөд эцэст нь систем, зорилгын уян хатан байдал, тэдгээрийн дахин тохируулах чадварыг бууруулж чадна.

Хэлний эдгээр шинж чанаруудыг анх бүтээгчид нь тодорхойлсон бөгөөд үүнийг сүлжээний дэд бүтцэд өргөнөөр ашиглахад анхаарлаа хандуулсан.

Энэ хэлийг аль хэдийн олон компани ашиглаж байна:

1) Хэт масштабтай мэдээллийн төвүүд;

Хятадын Tencent компани нь дэлхийн хамгийн том хөрөнгө оруулалтын компани бөгөөд хамгийн том венч капиталын компаниудын нэг юм. Tencent-ийн Хятад болон дэлхийн бусад улс орнууд дахь салбар компаниуд интернетийн төрөл бүрийн үйлчилгээ, хиймэл оюун ухаан, цахим зугаа цэнгэлийн салбарын хөгжил зэрэг өндөр технологийн бизнесийн төрөл бүрийн чиглэлээр мэргэшсэн.

P4 болон програмчлагдсан чиглүүлэлт нь компанийн сүлжээний архитектурт хэрэглэгддэг дэвшилтэт технологиуд юм.

Үүсгэн байгуулагчдын нэг болохын хувьд Google нь сүлжээний салбар, ялангуяа дата төвийн архитектурын дизайнд P4-ийг хурдан нэвтрүүлж байгааг бахархаж байна.

2) арилжааны компаниуд;

Голдман Сакс нь нээлттэй эх сурвалжийн нийгэмлэгтэй хамтран ажиллаж, нийтлэг стандарт, шийдлүүдийг боловсруулж, сүлжээний дэд бүтцийг шинэчилж, үйлчлүүлэгчдэд илүү сайн шийдлүүдийг санал болгодог.

3) Үйлдвэрлэл;

Дамжуулах зан үйлийг өвөрмөц байдлаар тодорхойлдог P4 гэх мэт хэл нь сүлжээний салбар бүхэлдээ ашиг тус хүртэх болно. Cisco мөн энэ хэлийг ашиглахын тулд бүтээгдэхүүнийхээ шугамыг шилжүүлнэ гэдэгт итгэдэг.

Juniper Networks нь P4 болон P4 Runtime-г хэд хэдэн бүтээгдэхүүндээ багтаасан бөгөөд Juniper embedded процессор болон түүний програм хангамжийн код руу программчлагдсан хандалтыг олгодог.

Ruijie Networks нь P4-ийн хүчтэй дэмжигч бөгөөд энэ нь сүлжээнд авчирдаг ашиг тус юм. P4-ийн тусламжтайгаар компани нь өргөн хүрээний хэрэглэгчдэд хамгийн шилдэг шийдлүүдийг бий болгож, хүргэх боломжтой.

4) Харилцаа холбооны үйлчилгээ үзүүлэгч;

AT&T нь ​​P4-ийг эрт нэвтрүүлж, сүлжээндээ харахыг хүсч буй зан төлөвийг тодорхойлохын тулд P4-ийг ашиглаж, сүлжээндээ P4 программчлагдах дамжуулагч төхөөрөмжийг ашигласан анхны хүмүүсийн нэг байсан.

Deutsche Telekom-д энэ хэлийг Access 4.0 программын нэг хэсэг болгон сүлжээний үндсэн функцуудыг загварчлахад ашигладаг.

5) Хагас дамжуулагчийн үйлдвэрлэл;

Энэ хэл нь Barefoot-д програм хангамжийн чадварыг сүлжээний чиглүүлэлтийн хавтгайд хүргэх шинэ парадигмыг хэрэгжүүлэх боломжийг олгосон.

Xilinx нь P4.org сайтыг үүсгэн байгуулагчдын нэг байсан бөгөөд P4 хэлийг хөгжүүлэхэд идэвхтэй оролцож, үүнийг SmartNIC болон NFV техник хангамжид зориулсан FPGA-д суурилсан програмчлагдсан платформд нэвтрүүлж, SDNet дизайны нэг хэсэг болгон анхны P416 хөрвүүлэгчдийн нэгийг гаргасан.

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

Match-Action модулиуд — хайлтын түлхүүр үүсгэх, хүснэгтээс хайх, үйлдэл хийх.

Модулийн ердийн жишээг зурагт үзүүлэв.

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

сэтгэгдэл нэмэх