Prestanda

Intel Core i3-versionen av BRIX IoT är rätt mycket overkill som brandvägg för ett hemmanätverk, och maskinvaran har inga problem alls att hantera typisk 1 Gbit/s-trafik. Inte ens med tiotals klienter och rejält med brandväggsregler.

SUKBE6375.JPG

Brix temperaturprofil under benchmarking. Den stora kylflänsen gör ett gott jobb helt utan fläkt. Till stor del ett resultat av en väldigt strömsnål plattform, effekt mätt från väggen ligger på 15–20 W under maxlast.

För att ändå få lite prestandasiffror att titta på har det absolut värsta fallet testas. Jobbet en brandvägg behöver göra, vilket gäller även för NAT, är i princip helt oberoende av storleken på paketet. Värsta fallet man kan skapa är därför en ström av paket av minsta möjliga storlek.

För Ethernet är minsta tillåta paketstorlek 64 bytes, vilket för en 1 Gbit/s-länk ger en maximal paketfrekvens på strax över 1,4 miljoner paket per sekund. Första problemet där är att jobbet klienten ska utföra normalt sett är beräkningsmässigt tyngre än jobbet brandväggen ska utföra. Dessa paketfrekvenser kräver lite specialhantering då en miljon systemanrop mot OS får de flesta system att krokna.

Metoder för att skicka och ta emot paket i väldigt hög frekvens

För att testa kapaciteten hos routers, brandväggar och annan nätverksutrustning finns det både standarder och dedikerad testutrustning med sjusiffrig prislapp. Kanske inte någonting för normala hemanvändare.

I Linux finns lite olika tekniker för att nå väldigt höga paketfrekvenser. De mer extrema varianterna, som DPDK och ODP, når 30–40 miljoner paket per sekund och CPU-kärna. Även det är lite overkill för att testa en Pfsense-brandvägg. Dessa programbibliotek är kraftfulla men de kräver tyvärr rätt stora programmeringsinsatser även för relativt enkla uppgifter.

Med en modern desktop-CPU samt ett nätverkskort av bra kvalitet nås runt en miljon paket per sekund via sendmmsg() och recvmmsg(). Huvudsyftet med dessa två funktioner är att hantera multipla skrivningar och läsningar i ett enda systemanrop.

measure.png

Jag skapade ett enkelt program som skickade en paketström på en nätverksport och som mätte hur många som kom tillbaka på ett annat nätverksport baserat på sendmmsg() och recvmmsg().

Dessa två nätverks-gränssnitt kopplades ihop med WAN- och LAN-porten på BRIX IoT- brandväggen. Att ta emot paket är normalt sett lite lättare än att sända för en CPU, vilket är trevligt i detta fall då målet är att mäta kapaciteten hos brandväggen.

Resultat

Riktning

Paket/s

LAN –> WAN

450 000

WAN –> LAN

370 000

Kom ihåg att detta är med 64 byte stora paket. Dessa paketfrekvenser motsvarar en kapacitet på runt 5 Gbit/s när paketen har maxstorlek, det vill säga 1 514 bytes. Det är fullt möjligt att använda en CPU-kärna på riktigt, vilket betyder att BRIX IoT med Pfsense har ungefär en kapacitet på 5 Gbit/s full duplex.

Detta är mer än nog för hemmanätverket, framförallt när brandväggen har 1 Gbit/s Ethernet. Den som absolut måste har mer kan använda en modern Linux-kärna där denna plattform klarar väl över en miljon paket per sekund.