nftlb võrdlusnäitajad ja toimivusklahvid

POSTITATUD 28. juunil 2018

kriteeriumid

Latests'i võrdlusnäitajad, dateeritud juuni 2018-is, näitavad olulist parendust tulemuste kasutamisel, kui kasutatakse nftables-i kui iptables-i asemel andmeedast.

Arvestades 2i klientidele testitud keskkonda, mis täidavad HTTP koormuse koormuse tööriista, 1i koormuse tasakaalustajat ja 3i taustaprogramme, mille HTTP-terminator annab vastuse umbes 210i baitidest, saame järgmised võrdlusalused: HTTP voolab sekundis:

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

Ülaltoodud joonised on esitatud füüsilise CPU kohta, kuna mastaapsuse lisamise südamikud on peaaegu lineaarsed. Kuigi need võrdlusalused on tehtud ainult 3i taustaprogrammidega, iptables'i jõudlus väheneb oluliselt, lisades rohkem taustaprogramme, kuna need hõlmavad järjestikuseid reegleid.

Need võrdlusnäitajad viidi läbi, kui retpoliin oli keelatud (puudusid Spectre / Meltdown leevendused), kuid kui need on lubatud, on NAT-i juhtumitel tuvastatud toimivuskaristused, kus nii iptable'i kui ka nftable-i juhtumite puhul on lubatud ühendtrada, esimese jaoks palju halvemad:

iptables: 40.77% CPU penalty
nftables: 17.27% CPU penalty

Toimivusklahvid

Retpoliini karistusi selgitatakse tänu sellele, et iptablesis kasutatakse palju rohkem kaudseid kõnesid kui nftables'is. Kuid ka mõned täiendavad võtmed, mida selgitatakse allpool.

Reeglite optimeerimine

Peamine jõudluse võti on reeglite optimeerimine. Iptables oli juba teada, et ipseti kasutamine suurendab jõudlust, kuna see vähendab järjestikuste reeglite töötlemist.

Kuigi nftlb-s võib seda laiendada ka muudel eesmärkidel kasutamiseks, seadsime virtuaalset teenust kasutades põhireeglid, kasutades ekspressiivset keelt, mis toetab loomulikult komplektide ja kaartide kasutamist. Palun vaadake allpool loodud reegleid a virtuaalne TCP teenus nimega vs01 koos 2i taustaprogrammidega:

table ip nftlb {
    map tcp-services {
        type ipv4_addr . inet_service : verdict
        elements = { 192.168.0.100 . http : goto vs01 }
    }

    chain prerouting {
        type nat hook prerouting priority 0; policy accept;
        ip daddr . tcp dport vmap @tcp-services
    }

    chain postrouting {
        type nat hook postrouting priority 100; policy accept;
    }

    chain vs01 {
        dnat to jhash ip saddr mod 2 map { 0 : 192.168.1.10, 1 : 192.168.1.11 }
    }
}

Kui peame uue taustaprogrammi lisama, siis taastage sellega seotud kett virtuaalseks teenuseks, lisamata uusi reegleid ja mõjutamata ülejäänud virtuaalteenuseid.

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

Siis, kui uus virtuaalne teenus vs02 tuleb luua, muutub reeglistik selliseks, nagu allpool näidatud, ilma uute reeglite lisamiseta ega mõjuta muid virtuaalteenuseid:

table ip nftlb {
    map tcp-services {
        type ipv4_addr . inet_service : verdict
        elements = { 192.168.0.100 . http : goto vs01,
                     192.168.0.102 . https : goto vs02 }
    }

    chain prerouting {
        type nat hook prerouting priority 0; policy accept;
        ip daddr . tcp dport vmap @tcp-services
    }

    chain postrouting {
        type nat hook postrouting priority 100; policy accept;
    }

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

    chain vs02 {
        dnat to jhash ip saddr mod 2 map { 0 : 192.168.2.10, 1 : 192.168.2.11 }
    }
}

Varased konksud

nftables võimaldab kasutada varakult sissepääsukonks mida kasutatakse nftlb-s DSR-stsenaariumide ajal.

Ka seda varajast konksu saab kasutada filtreerimise eesmärgil, mis suurendab pakettide kukutamise korral jõudlust. See on näidatud allpool, kus iptables ja nftables on kõige varasemas etapis pakettides sekundis:

iptables prerouting raw drop: 38.949.054,35 PPS
nftables ingress drop: 45.743.628,64 PPS

Kiirendusmeetodid

Optimeerimiseks on veel rohkem ruumi, sest nftables toetab juba kiirteid ja kergeid meetodeid, mida saab kasutada pakettide mangeldamiseks. Näited selle kohta on:

Tabelid. Conntracki kiire tee, et delegeerida juba loodud ühendused sissepääsuetapiga, läbimata kogu aeglast teed. Lisateave siin.

Kodakondsuseta NAT. Mõnede koormuse tasakaalustamise juhtumite puhul võib kodakondsuseta NAT-i teostada ilma ühendusjälgimiseta ja sisselülitamisetapilt, et saada kõik NAT-stsenaariumide rakendused.

Jaga:

Dokumentatsioon GNU Vaba Dokumentatsiooni Litsentsi tingimustel.

Kas see artikkel oli kasulik?

seotud artiklid