tolok ukur nftlb dan kunci kinerja

Lihat Kategori

tolok ukur nftlb dan kunci kinerja

2 menit baca

benchmark #

Tolok ukur terbaru, tertanggal Juni 2018, menunjukkan peningkatan kinerja yang penting dalam menggunakan nftables sebagai jalur data, bukan iptables.

Mengingat lingkungan pengujian yang terdiri dari 2 klien yang menjalankan alat stres beban HTTP, 1 penyeimbang beban, dan 3 backend dengan terminator HTTP yang memberikan respons sekitar 210 byte, kami memperoleh tolok ukur berikut di Aliran HTTP per detik:

iptables DNAT 256.864,07 RPS / cpu iptables SNAT 262.088,94 RPS / cpu nftables DNAT 560.976,44 RPS / cpu nftables SNAT 608.941,57 RPS / cpu nftables DSR 7.302.517,31 RPS / cpu

Gambar di atas ditampilkan dalam bentuk per CPU fisik karena skalabilitas penambahan inti hampir linier. Meskipun tolok ukur ini telah dilakukan hanya dengan 3 backend, Kinerja iptables akan turun secara signifikan dan menambahkan lebih banyak backend, karena menyiratkan aturan yang lebih berurutan.

Tolok ukur tersebut dilakukan dengan retpoline dinonaktifkan (tidak ada mitigasi Spectre/Meltdown), namun setelah diaktifkan, penalti kinerja yang terdeteksi dalam kasus NAT dengan conntrack diaktifkan untuk kasus iptables dan nftables jauh lebih buruk untuk kasus pertama:

iptables: penalti CPU 40.77% nftables: penalti CPU 17.27%

Kunci kinerja #

Hukuman retpoline dijelaskan karena penggunaan lebih banyak panggilan tipuan di iptables daripada di nftables. Namun ada juga beberapa kunci kinerja lainnya yang akan dijelaskan di bawah ini.

Pengoptimalan aturan #

Kunci kinerja utama adalah optimalisasi aturan. Sudah diketahui di iptables bahwa penggunaan ipset meningkatkan kinerja karena mengurangi pemrosesan aturan sekuensial.

Di nftlb, meskipun dapat diperluas untuk digunakan untuk tujuan lain, kami menetapkan aturan dasar per layanan virtual menggunakan bahasa ekspresif yang secara asli mendukung penggunaan set dan peta. Silakan lihat di bawah aturan yang dihasilkan untuk a layanan tcp virtual bernama vs01 dengan 2 backend:

tabel ip nftlb { peta layanan tcp { ketik ipv4_addr . inet_service : putusan
        elemen = { 192.168.0.100 . http : pergi ke vs01 }
    } prerouting rantai { ketik prioritas prerouting nat hook 0; menerima kebijakan;
        ip ayahdr. tcp dport vmap @tcp-services
    } rantai postrouting { ketik nat hook postrouting prioritas 100; menerima kebijakan; }

    rantai vs01 { dnat ke jhash ip saddr mod 2 peta { 0 : 192.168.1.10, 1 : 192.168.1.11 } }
}

Setelah kita perlu menambahkan backend baru, cukup buat ulang rantai terkait ke layanan virtual tanpa menyertakan aturan baru dan tanpa memengaruhi layanan virtual lainnya.

    rantai vs01 {
        dnat ke jhash ip saddr mod 3 map { 0 : 192.168.1.10, 1 : 192.168.1.11, 2 : 192.168.1.12 }
    }

Lalu, jika layanan virtual baru vs02 perlu dibuat, maka kumpulan aturan menjadi seperti di bawah ini, tanpa penambahan aturan baru atau memengaruhi layanan virtual lainnya:

tabel ip nftlb { peta layanan tcp { ketik ipv4_addr . inet_service : elemen putusan = { 192.168.0.100 . http: pergi ke vs01,
                     192.168.0.102 . https : pergi ke vs02 } } pra-perutean rantai { ketik prioritas pra-perutean nat hook 0; menerima kebijakan; ip ayahdr. tcp dport vmap @tcp-services } rantai postrouting { ketik nat hook postrouting prioritas 100; menerima kebijakan; } rantai vs01 { dnat ke jhash ip saddr mod 3 peta { 0 : 192.168.1.10, 1 : 192.168.1.11, 2 : 192.168.1.12 } }

    rantai vs02 { dnat ke jhash ip saddr mod 2 peta { 0 : 192.168.2.10, 1 : 192.168.2.11 } }
}

Kait awal #

nftables mengizinkan penggunaan lebih awal kait masuknya yang digunakan di nftlb selama skenario DSR.

Selain itu, hook awal ini dapat digunakan untuk tujuan pemfilteran yang meningkatkan kinerja jika terjadi paket terjatuh. Ini ditunjukkan di bawah ini dengan tahap paling awal dari kasus iptables dan nftables dalam paket per detik:

iptables melakukan prerouting penurunan mentah: 38.949.054,35 PPS / inti penurunan masuk nftables: 45.743.628,64 PPS / inti

Teknik akselerasi #

Memang masih ada lebih banyak ruang untuk optimasi, karena nftables sudah mendukung jalur cepat dan teknik ringan yang dapat digunakan untuk manipulasi paket. Sebagai contohnya adalah:

Tabel aliran. Hubungkan jalur cepat untuk mendelegasikan koneksi yang sudah ada ke tahap ingress tanpa melewati seluruh jalur lambat. Info lebih lanjut disini.

NAT tanpa kewarganegaraan. Untuk beberapa kasus penyeimbangan beban, NAT stateless dapat dilakukan tanpa pelacakan koneksi dan dari tahap ingress untuk mendapatkan semua performa yang diterapkan pada skenario NAT.

📄 Unduh dokumen ini dalam format PDF #

    EMAIL: *

    Didukung oleh Dokumen yang Lebih Baik