bahasa pemrograman P4

bahasa pemrograman P4
P4 adalah bahasa pemrograman yang dirancang untuk memprogram aturan perutean paket. Berbeda dengan bahasa tujuan umum seperti C atau Python, P4 adalah bahasa khusus domain dengan sejumlah desain yang dioptimalkan untuk perutean jaringan.

P4 adalah bahasa sumber terbuka yang dilisensikan dan dikelola oleh organisasi nirlaba yang disebut Konsorsium Bahasa P4. Hal ini juga didukung oleh Open Networking Foundation (ONF) dan Linux Foundation (LF), dua organisasi payung terbesar untuk proyek jaringan sumber terbuka.
Bahasa ini pertama kali diciptakan pada tahun 2013 dan dijelaskan dalam makalah SIGCOMM CCR tahun 2014 yang berjudul β€œProtocol Independent, Packet Routing Processor Programming.”

Sejak awal, P4 telah tumbuh dan berkembang secara eksponensial, dengan cepat menjadi standar untuk menggambarkan transmisi paket melalui perangkat jaringan, termasuk adaptor jaringan, switch, dan router.

β€œSDN telah mentransformasi industri jaringan, dan P4 membawa SDN ke level berikutnya dengan menghadirkan kemampuan program pada routing,” kata Guru Parulkar, direktur eksekutif Open Networking Foundation.

Bahasa P4 awalnya dibuat oleh sekelompok insinyur dan peneliti dari Google, Intel, Microsoft Research, Barefoot, Princeton dan Stanford. Tujuannya sederhana: menciptakan bahasa yang mudah digunakan sehingga pengembang perangkat lunak dapat mempelajarinya dalam sehari dan menggunakannya untuk menjelaskan secara akurat bagaimana paket dikirim melalui jaringan.

Sejak awal, P4 dirancang untuk tidak bergantung pada target (yaitu program yang ditulis dalam P4 dapat dikompilasi tanpa perubahan untuk dijalankan pada berbagai target seperti ASIC, FPGA, CPU, NPU, dan GPU).

Bahasa ini juga tidak bergantung pada protokol (yaitu, program P4 dapat menjelaskan protokol standar yang ada atau digunakan untuk menentukan mode pengalamatan khusus yang baru).

Di industri, P4 digunakan untuk pemrograman perangkat. Mungkin di masa depan standar Internet-RFC dan IEEE juga akan menyertakan spesifikasi P4.

P4 dapat digunakan untuk perangkat dengan fungsi yang dapat diprogram dan tetap. Misalnya, ini digunakan untuk secara akurat mencatat perilaku pipa sakelar di API Switch Abstraksi Antarmuka (SAI) yang digunakan oleh OS sakelar SONiC sumber terbuka. P4 juga digunakan dalam proyek ONF Stratum untuk menggambarkan perilaku peralihan di berbagai perangkat tetap dan dapat diprogram.

Untuk pertama kalinya, mendeskripsikan perilaku switch dan adaptor jaringan memungkinkan Anda membuat model seluruh jaringan yang dapat dieksekusi secara akurat sebelum penerapan. Penyedia cloud besar dapat menguji dan men-debug jaringan sepenuhnya menggunakan perangkat lunak, sehingga secara signifikan mengurangi waktu dan biaya pengujian interoperabilitas di laboratorium tanpa memerlukan perangkat keras yang mahal.

Dengan menggunakan P4, vendor peralatan jaringan dapat mengharapkan perilaku perutean umum yang mendasari seluruh produk, memungkinkan penggunaan kembali infrastruktur pengujian, menyederhanakan pengembangan perangkat lunak manajemen, dan pada akhirnya memastikan interoperabilitas.

Tentu saja, P4 dapat digunakan untuk menulis program yang menjelaskan cara routing yang benar-benar baru. Misalnya, P4 banyak digunakan untuk telemetri dan pengukuran di pusat data, jaringan perusahaan dan penyedia layanan.

Komunitas riset juga telah meningkat. Beberapa kelompok riset jaringan akademis terkemuka telah menerbitkan aplikasi baru yang menarik berdasarkan program P4, termasuk penyeimbangan beban, protokol konsensus, dan cache nilai kunci. Paradigma pemrograman baru sedang diciptakan, inovasi berpindah dari perangkat keras ke perangkat lunak, memungkinkan munculnya banyak ide yang tidak terduga, baru dan cerdik.

Komunitas pengembang telah memberikan kontribusi yang signifikan terhadap pengembangan kode, termasuk compiler, pipeline, model perilaku, API, kerangka pengujian, aplikasi, dan banyak lagi. Perusahaan seperti Alibaba, AT&T, Barefoot, Cisco, Fox Networks, Google, Intel, IXIA, Juniper Networks, Mellanox, Microsoft, Netcope, Netronome, VMware, Xilinx, dan ZTE telah mendedikasikan pengembang; dari universitas termasuk BUPT, Cornell, Harvard, MIT, NCTU, Princeton, Stanford, Technion, Tsinghua, UMass, dan USI; dan proyek sumber terbuka termasuk CORD, FD.io, OpenDaylight, ONOS, OvS, SAI dan Stratum menyoroti fakta bahwa P4 adalah proyek komunitas independen.

Generasi pengontrol umum untuk bahasa P4:

bahasa pemrograman P4

Prospek aplikasi

bahasa pemrograman P4
Karena bahasa ini ditujukan untuk aplikasi perutean, daftar persyaratan dan opsi desain berbeda dibandingkan dengan bahasa pemrograman tujuan umum. Ciri-ciri utama bahasa ini adalah:

  1. Independensi dari implementasi target;
  2. Independensi protokol yang digunakan;
  3. Konfigurasi ulang lapangan.

Kemandirian dari implementasi target

Program P4 dirancang agar tidak dapat diimplementasikan, artinya program tersebut dapat dikompilasi untuk berbagai jenis mesin eksekusi, seperti prosesor tujuan umum, FPGA, system-on-chip, prosesor jaringan, dan ASIC. Berbagai jenis mesin ini dikenal sebagai target P4, dan setiap target memerlukan kompiler untuk mengubah kode sumber P4 menjadi model sakelar target. Kompiler dapat dibangun ke dalam perangkat target, perangkat lunak eksternal, atau bahkan layanan cloud. Karena banyak dari target asli program P4 adalah untuk perpindahan paket sederhana, sangat umum kita mendengar istilah "P4 switch" meskipun "P4 target" lebih akurat.

Independensi protokol yang digunakan

P4 tidak bergantung pada protokol. Artinya bahasa tersebut tidak memiliki dukungan asli untuk protokol umum seperti IP, Ethernet, TCP, VxLAN atau MPLS. Sebaliknya, programmer P4 menjelaskan format header dan nama field dari protokol yang diperlukan dalam program, yang pada gilirannya ditafsirkan dan diproses oleh program yang dikompilasi dan perangkat target.

Konfigurasi ulang lapangan

Independensi protokol dan model bahasa abstrak memungkinkan konfigurasi ulangβ€”target P4 harus dapat mengubah pemrosesan paket setelah sistem diterapkan. Kemampuan ini secara tradisional dikaitkan dengan perutean melalui prosesor tujuan umum atau prosesor jaringan daripada sirkuit terintegrasi dengan fungsi tetap.

Meskipun tidak ada apa pun dalam bahasa tersebut yang dapat menghalangi pengoptimalan kinerja sekumpulan protokol tertentu, pengoptimalan ini tidak terlihat oleh pembuat bahasa dan pada akhirnya dapat mengurangi fleksibilitas sistem dan sasaran serta kemampuan konfigurasi ulangnya.

Karakteristik bahasa ini awalnya ditetapkan oleh penciptanya dengan fokus pada penggunaannya secara luas dalam infrastruktur jaringan.

Bahasa ini sudah digunakan di banyak perusahaan:

1) Pusat data skala besar;

Perusahaan Tiongkok Tencent adalah perusahaan investasi terbesar di dunia dan salah satu perusahaan modal ventura terbesar. Anak perusahaan Tencent, baik di Tiongkok maupun di negara lain di dunia, berspesialisasi dalam berbagai bidang bisnis teknologi tinggi, termasuk berbagai layanan Internet, pengembangan di bidang kecerdasan buatan, dan hiburan elektronik.

P4 dan perutean yang dapat diprogram adalah teknologi canggih yang digunakan dalam arsitektur jaringan perusahaan.

Sebagai salah satu pencetusnya, Google dengan bangga mencatat pesatnya adopsi P4 dalam industri jaringan dan khususnya desain arsitektur pusat data.

2) Perusahaan komersial;

Goldman Sachs memanfaatkan kerja sama dengan komunitas open source dan mengembangkan standar dan solusi umum untuk berinovasi pada infrastruktur jaringan dan memberikan solusi yang lebih baik bagi klien.

3) Produksi;

Seluruh industri jaringan akan mendapatkan keuntungan dari bahasa seperti P4 yang secara unik mendefinisikan perilaku penerusan. Cisco juga percaya dalam mentransfer lini produknya untuk menggunakan bahasa ini.

Juniper Networks telah menyertakan P4 dan P4 Runtime di sejumlah produk, dan menyediakan akses terprogram ke prosesor tertanam Juniper dan kode perangkat lunaknya.

Ruijie Networks adalah pendukung kuat P4 dan manfaatnya bagi jaringan. Dengan P4, perusahaan dapat menciptakan dan memberikan solusi terbaik di kelasnya kepada berbagai pelanggan.

4) Penyedia telekomunikasi;

AT&T adalah pengguna awal P4, salah satu yang pertama menggunakan P4 untuk menentukan perilaku yang ingin dilihatnya di jaringannya, dan menggunakan perangkat penerusan P4 yang dapat diprogram di jaringannya.

Di Deutsche Telekom, bahasa ini digunakan untuk membuat prototipe fungsi jaringan utama sebagai bagian dari program Access 4.0.

5) Industri semikonduktor;

Bahasa tersebut memungkinkan Barefoot menerapkan paradigma baru untuk memberikan kemampuan perangkat lunak ke bidang perutean jaringan.

Xilinx adalah salah satu pendiri P4.org dan secara aktif terlibat dalam pengembangan bahasa P4 dan mengimplementasikannya ke dalam platform yang dapat diprogram berbasis FPGA untuk perangkat keras SmartNIC dan NFV, merilis salah satu kompiler P416 pertama sebagai bagian dari desain SDNet.

6) Perangkat Lunak.

VMware percaya bahwa P4 menciptakan energi, inovasi, dan komunitas luar biasa yang mendorong transformasi yang berarti dan diperlukan dalam jaringan. VMware telah menjadi bagian dari pergerakan industri ini sejak awal, sebagai gelombang inovasi baru yang didorong oleh pendekatan berbasis perangkat lunak yang memperluas kemampuan infrastruktur dan mengimplementasikannya dalam produk-produk terbaru.

Dengan demikian, P4 adalah bahasa pemrograman yang tidak bergantung pada target dan tidak bergantung pada protokol yang digunakan oleh industri dan akademisi untuk secara unik mendefinisikan perilaku perutean paket sebagai sebuah program, yang pada gilirannya dapat dikompilasi untuk beberapa target. Saat ini, targetnya mencakup sakelar perangkat keras dan perangkat lunak, sakelar hypervisor, NPU, GPU, FPGA, SmartNIC, dan ASIC.

Fitur utama bahasa ini secara signifikan memperluas cakupan penerapannya dan memastikan implementasi yang cepat dalam arsitektur jaringan.

Memulai

P4 adalah proyek terbuka, semua informasi relevan ada di situs web P4.org

Tautan repositori https://github.com/p4lang, di mana Anda bisa mendapatkan contoh kode sumber dan tutorial.

Plugin untuk Eclipse dengan dukungan P4, tapi kami dapat merekomendasikan Studio P4 dari bertelanjang kaki.

bahasa pemrograman P4

Mari kita lihat abstraksi utama kernel:

Mendefinisikan Header β€” dengan bantuan mereka, header protokol ditentukan.

Definisi header menentukan:

  • deskripsi format paket dan nama kolom header
  • bidang tetap dan variabel yang diizinkan

Misalnya

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

Parser β€” tugas mereka adalah menguraikan berita utama.

Contoh parser berikut akan menentukan transisi keadaan akhir mesin dari satu keadaan awal ke salah satu dari dua keadaan akhir:

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

Tabel β€” berisi status mesin yang menghubungkan kunci pengguna dengan tindakan. Aktivitas β€” penjelasan tentang bagaimana paket harus dimanipulasi.

Tabel berisi status (ditentukan pada tingkat manajemen) untuk penerusan paket, jelaskan unit Tindakan Pencocokan

Paket dicocokkan dengan:

  • Benar-benar cocok
  • Pertandingan Awalan Terpanjang (LPM)
  • Pencocokan rangkap tiga (penutup)

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

Semua tindakan yang mungkin harus ditentukan terlebih dahulu dalam tabel.

Tindakan terdiri dari kode dan data. Data berasal dari tingkat manajemen (misalnya alamat IP/nomor port). Primitif bebas loop tertentu dapat ditentukan secara langsung dalam tindakan, tetapi jumlah instruksi harus dapat diprediksi. Oleh karena itu, tindakan tidak boleh berisi perulangan atau pernyataan kondisional apa pun.

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

Modul Aksi Pencocokan β€” tindakan untuk membuat kunci pencarian, mencari di tabel, melakukan tindakan.

Contoh khas modul ditunjukkan pada gambar:

bahasa pemrograman P4

Aliran kontrol β€” menunjukkan urutan penggunaan modul Match-Action. Ini adalah program penting yang mendefinisikan logika tingkat tinggi dan urutan Aksi Pencocokan. Aliran kendali menghubungkan semua objek dengan menentukan tingkat kendali.

Objek eksternal adalah objek spesifik dengan arsitektur dan antarmuka API yang jelas. Misalnya perhitungan checksum, register, counter, counter, dll.

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 β€” struktur data yang terkait dengan setiap paket.

Ada 2 jenis metadata:

  Metadata khusus (struktur kosong untuk semua paket)
    Anda dapat meletakkan apa pun yang Anda inginkan di sini
    Tersedia di seluruh saluran pipa
    nyaman untuk digunakan untuk keperluan Anda sendiri, misalnya, untuk menyimpan hash paket

  Metadata internal - disediakan oleh arsitektur
    Port input, port output didefinisikan di sini
    Stempel waktu saat paket diantri, kedalaman antrian
    hash multicast/antrian multicast
    Prioritas paket, pentingnya paket
    Spesifikasi port keluaran (misalnya antrian keluaran)

Kompiler P4

Kompiler P4 (P4C) menghasilkan:

  1. Waktu proses bidang data
  2. API untuk mengelola status mesin di bidang data

bahasa pemrograman P4

Contoh saklar perangkat lunak dalam bahasa P4

Kode sumber dapat diunduh dari repositori.

p4lang/p4c-bm: membuat konfigurasi JSON untuk bmv2
p4lang/bmv2: saklar perangkat lunak yang memahami konfigurasi JSON versi bmv2

Gambar tersebut menunjukkan diagram kompilasi proyek:

bahasa pemrograman P4

Manipulasi dengan tabel, register pembacaan, penghitung:

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


Kode sumber berisi program simple_switch_CLI untuk kemudahan penggunaan API saklar perangkat lunak.

Anda dapat mengunduh ini dan contoh lainnya dari repositori.

bahasa pemrograman P4

PS Awal musim panas ini, Intel menandatangani perjanjian untuk mengakuisisi Barefoot Networks dalam upaya memenuhi kebutuhan pengguna Hyperscale Cloud dengan cepat. Seperti yang dikatakan Navin Shenoy (wakil presiden eksekutif dan manajer umum Grup Pusat Data di Intel Corporation), hal ini akan memungkinkan Intel memberikan beban kerja yang lebih besar dan lebih banyak peluang bagi pelanggan pusat data.

Menurut pendapat pribadi saya, kita tidak boleh lupa bahwa Intel adalah pemimpin dalam produksi chip FPGA dan memiliki lingkungan Quartus yang sangat baik. Artinya, dengan hadirnya Intel, Barefoot tidak hanya akan memperluas lini produknya, tetapi Quartus dan P4 Studio juga akan menerima pembaruan dan penambahan besar pada lini Toffino dan Toffino 2.

Anggota resmi komunitas P4 - perusahaan Kelompok faktor.

Sumber: www.habr.com

Tambah komentar