[Kertas] [Video]
UDPDK adalah tumpukan UDP minimal berdasarkan DPDK untuk komunikasi point-to-point yang cepat antar server.
Ini berjalan sepenuhnya di ruang pengguna, sehingga Anda dapat memindahkan paket Anda dengan cepat tanpa melalui tumpukan kernel yang rumit.
Selain itu, berkat API mirip POSIX, mem-porting aplikasi yang ada ke UDPDK menjadi sangat mudah! 1
Apa itu UDPDK:
Apa yang BUKAN UDPDK:
1 Beberapa fitur mungkin belum didukung.
Untuk menggunakan UDPDK, mesin Anda harus dilengkapi dengan NIC yang mendukung DPDK; ini biasanya ditemukan di server, bukan di laptop dan mesin desktop. Daftar perangkat keras yang didukung resmi oleh DPDK tersedia di sini. Secara khusus, UDPDK telah dikembangkan dan diuji pada Intel X710-DA2 dengan driver igb_uio dan vfio ; perangkat lain dapat berfungsi selama DPDK mendukungnya.
UDPDK memerlukan:
Mereka sudah disertakan dalam repositori ini sebagai submodul, jadi tariklah:
git submodule init
git submodule update
DPDK
DPDK merupakan unsur penting UDPDK. Ia mengelola NIC dan mengimplementasikan Ethernet.
cd dpdk/usertools
./dpdk-setup.sh
Dari menu, lakukan hal berikut:
x86_64-native-linuxapp-gcc
vfio
️ Jika Anda menggunakan driver VFIO , maka Anda harus mengaktifkan IOMMU di sistem Anda.
Untuk mengaktifkannya, buka/etc/default/grub
, tambahkan flagintel_iommu=on
diGRUB_CMDLINE_LINUX_DEFAULT
, lalusudo update-grub
dan terakhir reboot.
inih
inih digunakan untuk kemudahan mengurai file konfigurasi .ini
.
cd inih
meson build
cd build
ninja
UDPDK dibangun menjadi perpustakaan statis, yang pada akhirnya perlu dihubungkan dengan aplikasi akhir.
cd udpdk
make
sudo make install
API UDPDK sangat mirip dengan soket BSD lama yang bagus:
int udpdk_socket(int domain, int type, int protocol);
int udpdk_bind(int s, const struct sockaddr *addr, socklen_t addrlen);
int getsockopt(int sockfd, int level, int optname, void *optval, socklen_t *optlen);
int setsockopt(int sockfd, int level, int optname, const void *optval, socklen_t *optlen);
ssize_t udpdk_sendto(int sockfd, const void *buf, size_t len, int flags, const struct sockaddr *dest_addr, socklen_t addrlen);
ssize_t udpdk_recvfrom(int s, void *buf, size_t len, int flags, struct sockaddr *src_addr, socklen_t *addrlen);
int udpdk_close(int s);
Selain itu, metode berikut diperlukan untuk pengaturan dan pembongkaran internal (struktur dan proses) DPDK yang tepat:
int udpdk_init(int argc, char *argv[]);
void udpdk_interrupt(int signum);
void udpdk_cleanup(void);
Catatan: select() belum diterapkan
Folder apps/
berisi dua contoh sederhana: aplikasi ping-pong dan pkt-gen.
UDPDK berjalan dalam dua proses terpisah: proses utama adalah proses yang berisi logika aplikasi (yaitu di mana panggilan syscall dipanggil), sedangkan proses sekunder ( poller ) terus-menerus melakukan polling pada NIC untuk mengirim dan menerima data. Paket-paket tersebut dipertukarkan antara aplikasi dan poller melalui memori bersama, menggunakan antrian dering tanpa kunci.
Kami membandingkan UDPDK dengan soket UDP standar dalam hal throughput dan latensi.
Lingkungan
Dua server identik terhubung point-to-point pada antarmuka 10G. Spesifikasinya adalah:
Prosesor: Intel Xeon E5-2640 @2,4GHz
RAM: 64GB
OS: Ubuntu 18.04
Kernel: 4.15.0
NIC: Intel X710 DA2 10GbE
Driver NIC: VFIO (DPDK) atau i40e (soket normal)
Hasil
Kami mengukur throughput maksimum yang dicapai dengan memvariasikan ukuran paket.
Yang terakhir ini termasuk header UDP, IP dan MAC.
Seperti yang ditunjukkan pada gambar, UDPDK 18x lebih baik dibandingkan soket tradisional.
Perlu dicatat bahwa UDPDK memenuhi koneksi 10G, yang sayangnya merupakan satu-satunya yang kami miliki: inferface 40G akan membuatnya bersinar!
Latensi
Kami mengukur latensi dan jitternya.
Sekali lagi, UDPDK terbukti jauh lebih baik daripada soket standar.
UDPDK | Standar | |
---|---|---|
Rata-rata (μs) | 13.92 | 116.57 |
Standar (μs) | 0,74 | 18.49 |
Kode UDPDK dirilis di bawah lisensi BSD 3-Clause.
Karya ini telah dipresentasikan pada IEEE NFV-SDN 2021, Konferensi IEEE ke-7 tentang Virtualisasi Fungsi Jaringan dan Jaringan yang Ditentukan Perangkat Lunak. Penulisnya adalah: L. Lai, G. Ara, T. Cucinotta, K. Kondepu, L. Valcarenghi.
Lai, Leonardo, dkk. "Layanan NFV Latensi Sangat Rendah Menggunakan DPDK" Konferensi IEEE 2021 tentang Virtualisasi Fungsi Jaringan dan Jaringan Buatan Perangkat Lunak (NFV-SDN). IEEE, 2021.
Setiap orang dipersilakan untuk berkontribusi pada UDPDK dengan mengimplementasikan fitur-fitur baru, memperluas fitur-fitur yang sudah ada, atau sekadar melaporkan bug/masalah.