P4 adalah bahasa pemrograman yang dirancang untuk memprogram aturan perutean paket. Tidak seperti bahasa tujuan umum seperti C atau Python, P4 adalah bahasa khusus domain dengan sejumlah konstruksi yang dioptimalkan untuk perutean jaringan.
P4 adalah bahasa open source berlisensi dan didukung oleh organisasi nirlaba yang disebut Konsorsium Bahasa P4. Ini juga didukung oleh Open Networking Foundation (ONF) dan Linux Foundation (LF), dua organisasi payung terbesar dalam proyek jaringan sumber terbuka.
Bahasa ini awalnya diciptakan pada tahun 2013 dan dijelaskan pada tahun 2014 dalam dokumen SIGCOMM CCR berjudul "Protokol Independen, Pemrograman Paket Proses Routing".
Sejak awal, P4 telah tumbuh secara eksponensial dan telah berkembang, dengan cepat menjadi standar untuk menggambarkan pengiriman paket oleh perangkat jaringan, termasuk adapter jaringan, switch, dan router.
"SDN telah mengubah industri jaringan, dan P4 membawa SDN ke tingkat berikutnya, memberikan kemampuan program di bidang perutean," kata Guru Parulkar, direktur eksekutif Open Networking Foundation.
Bahasa P4 pada awalnya dibuat oleh sekelompok insinyur dan peneliti dari Google, Intel, Microsoft Research, Barefoot, Princeton dan Stanford. Tujuannya sederhana: membuat bahasa yang mudah digunakan yang dapat dipelajari oleh pengembang perangkat lunak dalam sehari, dan menggunakannya untuk menggambarkan secara akurat bagaimana paket dikirimkan melalui jaringan.
Sejak awal, P4 dirancang untuk terlepas dari tujuan (yaitu program yang ditulis dalam P4 dapat dikompilasi tidak berubah untuk berbagai keperluan, seperti ASIC, FPGA, CPU, NPU, dan GPU).
Selain itu, bahasanya adalah protokol independen (mis., Program P4 dapat menggambarkan protokol standar yang ada atau dapat digunakan untuk menunjukkan mode pengalamatan kustom baru).
Dalam industri, P4 digunakan untuk perangkat pemrograman. Mungkin di masa depan, standar Internet-RFC dan IEEE juga akan mencakup spesifikasi P4.
P4 dapat digunakan untuk perangkat yang dapat diprogram dan fungsi tetap. Sebagai contoh, ini digunakan untuk secara akurat merekam perilaku dari switch pipeline di Switch Abstraction Interface (SAI) API yang digunakan oleh open source SONiC switch OS. P4 juga digunakan dalam proyek ONF Stratum untuk menggambarkan perilaku switching di berbagai perangkat tetap dan yang dapat diprogram.
Menjelaskan perilaku sakelar dan adaptor jaringan untuk pertama kalinya memungkinkan Anda membuat model yang dapat dieksekusi yang akurat dari seluruh jaringan sebelum penyebaran. Penyedia cloud besar dapat sepenuhnya menguji dan men-debug jaringan menggunakan perangkat lunak, yang secara signifikan mengurangi waktu dan biaya pengujian interaksi lab tanpa memerlukan peralatan mahal.
Dengan menggunakan P4, vendor peralatan jaringan dapat mengandalkan perilaku routing yang umum dan mendasar di semua produk, yang memungkinkan penggunaan kembali infrastruktur uji, menyederhanakan pengembangan perangkat lunak manajemen, dan pada akhirnya memastikan interoperabilitas.
Tentu saja, P4 dapat digunakan untuk menulis program yang menggambarkan metode routing yang sama sekali baru. Misalnya, P4 banyak digunakan untuk telemetri dan pengukuran di pusat data, jaringan perusahaan, dan penyedia layanan.
Komunitas riset juga semakin intensif. Beberapa kelompok penelitian teknologi jaringan akademik terkemuka telah menerbitkan aplikasi baru yang menarik berdasarkan pada program P4, termasuk penyeimbangan beban, protokol yang konsisten, dan caching nilai kunci. Paradigma pemrograman baru sedang dibuat, inovasi bergerak dari perangkat keras ke perangkat lunak, yang memungkinkan banyak ide yang tak terduga, baru dan cemerlang muncul.
Komunitas pengembangan telah memberikan kontribusi yang signifikan terhadap pengembangan kode, termasuk penyusun, jaringan pipa, model perilaku, API, lingkungan pengujian, aplikasi, dan banyak lagi. Ada pengembang yang berdedikasi di perusahaan seperti Alibaba, AT&T, Barefoot, Cisco, Fox Networks, Google, Intel, IXIA, Jaringan Juniper, Mellanox, Microsoft, Netcope, Netronome, VMware, Xilinx dan ZTE; dari universitas, termasuk BUPT, Cornell, Harvard, MIT, NCTU, Princeton, Stanford, Technion, Tsinghua, UMass, dan USI; dan proyek-proyek sumber terbuka, termasuk CORD, FD.io, OpenDaylight, ONOS, OvS, SAI dan Stratum, menyoroti fakta bahwa P4 adalah proyek komunitas independen.
Generasi pengendali P4 yang khas:
Prospek aplikasi
Karena bahasa ini dimaksudkan untuk merutekan aplikasi, daftar persyaratan dan opsi desain berbeda dibandingkan dengan bahasa pemrograman tujuan umum. Fitur utama bahasa adalah:
- Bebas dari implementasi target;
- Independensi protokol yang digunakan;
- Konfigurasi ulang lapangan.
Bebas dari implementasi targetProgram P4 dirancang untuk menjadi bebas implementasi, yang berarti mereka dapat dikompilasi untuk berbagai jenis mesin eksekutif, seperti prosesor tujuan umum, FPGA, sistem on-chip, prosesor jaringan, dan ASIC. Berbagai jenis mesin ini dikenal sebagai target P4, dan kompiler diperlukan untuk setiap target untuk mengonversi kode sumber P4 ke model saklar target. Kompiler dapat disematkan di perangkat target, perangkat lunak eksternal, atau bahkan layanan cloud. Karena banyak tujuan asli untuk program P4 digunakan untuk pengalihan paket sederhana, Anda sering dapat mendengar istilah "P4 switch", bahkan jika penggunaan "target P4" lebih tepat.
Independensi protokol yang digunakanP4 adalah protokol yang independen. Ini berarti bahwa bahasa tersebut tidak memiliki dukungan bawaan untuk protokol umum seperti IP, Ethernet, TCP, VxLAN atau MPLS. Alih-alih, pemrogram P4 menjelaskan format header dan nama bidang dari protokol yang diperlukan dalam program, yang pada gilirannya ditafsirkan dan diproses oleh program yang dikompilasi dan perangkat target.
Konfigurasi ulang lapanganIndependensi protokol dan model bahasa abstrak memungkinkan konfigurasi ulang - target P4 harus dapat mengubah pemrosesan paket setelah menggunakan sistem. Fitur ini secara tradisional dikaitkan dengan perutean melalui prosesor tujuan umum atau prosesor jaringan, daripada sirkuit terintegrasi dengan fungsi tetap.
Meskipun tidak ada bahasa yang dapat mencegah optimalisasi seperangkat protokol tertentu, optimisasi ini tidak terlihat oleh penulis bahasa dan akhirnya dapat mengurangi fleksibilitas sistem dan tujuan serta rekonfigurasi-ulangnya.
Karakteristik bahasa ini pada awalnya diletakkan oleh penciptanya dengan orientasi penggunaannya yang luas dalam infrastruktur jaringan.
Sudah, bahasa tersebut digunakan di banyak perusahaan:
1) pusat data Hyperscale;Perusahaan China Tencent adalah perusahaan investasi terbesar di dunia dan salah satu perusahaan modal ventura terbesar. Anak perusahaan Tencent, baik di Cina dan di negara-negara lain di dunia, berspesialisasi dalam berbagai bidang bisnis teknologi tinggi, termasuk berbagai layanan Internet, perkembangan di bidang kecerdasan buatan dan hiburan elektronik.
P4 dan routing yang dapat diprogram adalah teknologi canggih yang digunakan dalam arsitektur jaringan perusahaan.
Sebagai salah satu pencipta, Google dengan bangga mencatat pengenalan cepat P4 dalam industri jaringan dan, khususnya, di bidang desain arsitektur pusat data.
2) Perusahaan komersial;Goldman Sachs, mengambil keuntungan dari bekerja dengan komunitas open source dan mengembangkan standar dan solusi bersama, sudah membawa inovasi ke infrastruktur jaringan dan memberikan solusi terbaik bagi pelanggan.
3) Produksi;Seluruh industri jaringan akan mendapat manfaat dari bahasa seperti P4, yang secara unik mendefinisikan perilaku mengalihkan panggilan. Juga pertimbangkan di Cisco, mentransfer lini produk mereka untuk menggunakan bahasa ini.
Juniper Networks telah memasukkan P4 dan P4 Runtime dalam sejumlah produk, dan menyediakan akses terprogram ke prosesor yang tertanam Juniper dan kode programnya.
Ruijie Networks adalah pendukung aktif P4 dan manfaat yang dibawanya ke jaringan. Dengan P4, perusahaan dapat membuat dan memberikan solusi terbaik di kelasnya untuk berbagai pelanggan.
4) Penyedia telekomunikasi;AT&T adalah salah satu pendukung P4 pertama, salah satu yang pertama menggunakan P4 untuk menentukan perilaku yang ingin dilihat di jaringan, dan menggunakan perangkat penerusan P4 yang dapat diprogram di jaringannya.
Deutsche Telekom menggunakan bahasa tersebut untuk membuat prototipe fungsi jaringan utama sebagai bagian dari Access 4.0.
5) industri semikonduktor;Bahasa ini memungkinkan untuk menerapkan paradigma baru untuk mentransfer kemampuan perangkat lunak ke pesawat routing jaringan oleh Barefoot.
Xilinx adalah salah satu pendiri P4.org dan mengambil bagian aktif dalam mengembangkan bahasa P4 dan menerapkannya dalam platform yang dapat diprogram berbasis FPGA untuk peralatan SmartNIC dan NFV, merilis salah satu kompiler P4
16 pertama sebagai bagian dari desain SDNet.
6) Perangkat Lunak.VMware percaya bahwa P4 menciptakan energi yang luar biasa, inovasi dan komunitas yang mengarah pada transformasi yang bermakna dan perlu dalam jaringan. VMware awalnya merupakan bagian dari pergerakan industri ini, karena gelombang inovasi baru didorong oleh pendekatan perangkat lunak yang memperluas kemampuan infrastruktur dan mengimplementasikannya dalam produk-produk terbaru.
Dengan demikian, P4 adalah bahasa pemrograman tujuan-independen dan protokol-independen yang digunakan oleh industri dan komunitas ilmiah untuk secara unik menentukan perilaku paket routing sebagai suatu program, yang, pada gilirannya, dapat dikompilasi untuk beberapa tujuan. Sasaran hari ini termasuk peranti keras dan peranti lunak, perisai hypervisor, NPU, GPU, FPGA, SmartNIC, dan ASIC.
Fitur utama dari bahasa ini secara signifikan memperluas cakupan aplikasinya dan menyediakan implementasinya yang cepat dalam arsitektur jaringan.
Mulai dari mana
P4 adalah proyek sumber terbuka, semua informasi saat ini ada di situs web
P4.orgTautan ke repositori
https://github.com/p4lang , di mana Anda bisa mendapatkan kode sumber dari contoh dan materi pelatihan.
Plugin untuk Eclipse dengan dukungan P4, tetapi kami dapat merekomendasikan
P4 Studio dari Barefoot.
Mari kita menganalisis abstraksi utama dari kernel:
Definisi header - dengan bantuannya, header protokol didefinisikan.
Definisi set header:
- deskripsi format paket dan nama bidang tajuk
- bidang tetap dan variabel diizinkan
Sebagai contoh
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 adalah tugas mereka untuk mengurai header.
Contoh parser berikut akan menentukan transisi status akhir mesin dari satu kondisi awal ke salah satu dari dua kondisi terakhir:
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 kondisi mesin yang mengaitkan kunci pengguna dengan tindakan.
Tindakan - Deskripsi tentang bagaimana paket harus dimanipulasi.
Tabel berisi status (didefinisikan pada tingkat manajerial) untuk meneruskan paket, menggambarkan unit aksi pertandingan
Pencocokan paket dilakukan oleh:
- Pencocokan tepat
- Pencocokan Terpanjang dengan Awalan (LPM)
- Pencocokan tiga kali (masking)
table ipv4_lpm{
reads {
ipv4.dstAddr: lpm;
} actions {
forward();
}
}
Semua tindakan yang mungkin harus didefinisikan dalam tabel terlebih dahulu.
Tindakan terdiri dari kode dan data. Data tiba di tingkat manajemen (mis. Alamat IP / nomor port). Tertentu, primitif tanpa loop dapat ditentukan secara langsung dalam tindakan, tetapi jumlah perintah harus dapat diprediksi. Oleh karena itu, tindakan tidak dapat berisi loop atau pernyataan bersyarat.
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 Match-Action - tindakan untuk membuat kunci pencarian, mencari dalam tabel, melakukan tindakan.
Contoh modul khas ditunjukkan pada gambar:
Aliran kontrol - menunjukkan urutan aplikasi dari modul Match-Action. Ini adalah program penting yang mendefinisikan logika tingkat tinggi dan urutan Aksi Pertandingan. Aliran kontrol menghubungkan semua objek, mengatur level kontrol.
Objek eksternal adalah
objek khusus dengan arsitektur dan API yang jelas. Misalnya, perhitungan checksum, register, penghitung, penghitung, 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 adalah struktur data yang terkait dengan setiap paket.
Ada 2 jenis metadata:
Metadata khusus (struktur kosong untuk semua paket)Anda dapat meletakkan semua yang Anda inginkan di sini
Tersedia di seluruh saluran pipa
nyaman untuk Anda gunakan sendiri, misalnya, untuk menyimpan hash paket
Metadata internal - disediakan oleh arsitekturPort input, port output didefinisikan di sini
Cap waktu ketika paket diantrikan, kedalaman antrian
multicast hash / multicast queue
Prioritas Paket, Pentingnya Paket
Spesifikasi port output (mis. Antrian output)
Kompiler P4
P4 compiler (P4C) menghasilkan:
- Runtime bidang data
- API untuk kontrol keadaan mesin di bidang data
Contoh sakelar perangkat lunak pada 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:
Manipulasi dengan tabel, baca register, konter:
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>
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>
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 kenyamanan penggunaan API peralihan perangkat lunak.
Anda dapat mengunduh ini dan contoh lainnya di repositori.
PS Di awal musim panas, Intel menandatangani perjanjian untuk mengakuisisi Barefoot Networks, dengan tujuan untuk memenuhi kebutuhan para pengguna Cloud Hyperscale dengan cepat. Menurut Navin Shenoy (wakil presiden eksekutif dan manajer umum Grup Data Center di Intel Corporation) - ini akan memungkinkan Intel memberikan beban kerja yang lebih besar dan lebih banyak peluang bagi pelanggan pusat data.
Menurut pendapat pribadi saya, jangan lupa bahwa Intel adalah pemimpin dalam produksi chip FPGA dan memiliki lingkungan Quartus yang sangat baik. Jadi, kita dapat berharap bahwa dengan kedatangan Intel, Barefoot tidak hanya akan memperluas lini produknya, tetapi Quartus dan P4 Studio akan mengharapkan pembaruan serius dan penambahan dengan lini Toffino dan Toffino 2.
Anggota resmi komunitas P4 adalah
Factor Group .