Apu2c4 - enttäuschende Performance



  • Hi alle,

    ich habe mir eine nagelneue apu2c4 zugelegt, vor allem um damit IPSec zu tunneln. Das setup war soweit auch kein Problem. Aber
    ich die Performance ist etwas enttäuschend, daher habe ich angefangen etwas rumzutesten.

    Da ist pfsense 2.3.4 drauf und wenn ich mit iperf am LAN Interface teste (vom PC zur PFS), erreiche ich kaum mehr als 350MBit/sec - ohne dass
    hier auch nur ein Paket vermittelt oder gefiltert wird. Um Probleme am Switch auszuschließen, habe ich einen Server direkt mit
    der apu2 verbunden -> gleiches Ergebnis.

    Diese 350MBit erreiche ich auch nur, wenn ich IPSec und die Filterregeln ausschalte (SystemAdvancedFirewall & NAT -> Disable all packet filtering.)
    Wenn ich IPSec einschalte, komme ich noch auf ca 300MBit/sec, mit aktivierter FW gerade mal auf 220 MBit/sec. Auch hier
    ist noch kein Byte geroutet/vermittelt worden…

    Nun habe ich schon diverse andere Berichte über apu2 HW gelesen. Da gibt es Bereichte über Routingperformance im
    Bereich von 500MBit/sec aufwärts.

    Bei der IPSec Performance (um die es mir eigentlich geht) liege ich im Bereich von 50-60MBit/sec. Ich muss zugeben, dass
    ich da mehr erwartet hätte.

    Die Frage ist: was mache ich falsch?

    Was habe ich schon probiert:

    • HW Offloading on/off
    • enable/disable TSO und LRO
    • diverse Tunables

    -> alles ohne nennenswerten Effekt.

    Hat da jemand einen Tipp?



  • Hi,

    Firewall Performance misst man am Besten durch die Firewall hindurch, nicht mit iperf auf der Firewall. Du solltest Dir auf die WAN Seite einen Server stellen und dann nochmal durch die Firewall durch messen.
    IPsec profitiert vom AES-NI Modul, das solltest Du in Advanced -> Misc -> Cryto anstellen.



  • Hi athurdent,

    Performance durch die FW hindurch messen (ohne IPSec) , werde ich machen - muss ich erst ein Setup basteln.

    AES-NI habe ich aktiviert, konnte aber keinen nennenswerten Unterschied ausmachen. Die WAN Anbindung, über
    die der IPsec Tunnel geht, gibt 200MBit/sec her (symmetrisch). Aber für die APU2 ist bei ca. 55-60MBit/sec "schulss".

    Ich habe auch schon mit allen möglichen Cipher Einstellungen getestet, hat aber kaum einen Einfluss auf
    die Performance.

    Das einzige, was wirklich einen Einfluss hat, ist die Veränderung der MTU bzw. MSS Clamping. Ich erziele
    hier den Maximaldurchsatz bei 1398 Byte MSS (VPN->IPSec-> Advanced Settings). Die MTU auf dem WAN
    Interface ist 1500 Byte (kein PPPoE).

    Nach allem, was ich über die apu2 gelesen hatte, müsste die Kiste eigentlich in der Lage sein, mindestens
    100-150MBit/sec über den Tunnel zu bringen…



  • Hi,

    ich habe heute nochmal intensiv mit der apu2 getestet was den IP Durchsatz zwischen LAN <-> und WAN Interface angeht:

    • iperf zwischen LAN und WAN (ohne IPsec, OpenVPN. Fiter/NAT abgeschaltet): ca 830MBit/sec
    • iperf zwischen LAN und WAN mit aktivierten IPSec Tunnel (ohne, dass über den Tunnel Daten gehen): ca 450 MBit/sec
    • iperf zwischen LAN und WAN mit aktivierten IPSec und aktvierter Firewall+NAT: ca. 350 MBit/sec

    Bemerkenswert finde ich, dass das reine Vorhandensein eines IPSec Tunnels, die Datenrate halbiert.

    Da mich aber eigentlich die Performance über IPsec interessiert und ich mich mit ca. 60MBit/sec nicht zufrieden geben wollten, habe
    ich testweise den IPSec Tunnel abgeschaltet und einen GRE Tunnel eingerichtet. Darüber erreiche ich ca. 85-90 MBit/sec. Das
    ist fast das erreichbare Maximum von 100 MBit/sec.

    Als nächstes habe ich einen OpenVPN Peer-to-Peer Tunnel gebaut, und darüber geroutet…. Da war ich dann erstmal wieder
    bei ca. 60MBit/sec :-(

    Bei meinen vielfältigen Tests habe ich dann aber bemerkt, dass das aesni.ko Kernel Module für OpenVPN offenbar gar nicht
    so gut ist. Daher habe ich das mal deaktiviert (SystemAdvancedMiscellaneous -> Cryptographic Hardware=None). Man muss
    aber unbedingt sicherstellen, dass das Modul nicht geladen ist (kldstat darf aesni.ko nicht anzeigen, ggf mit kldunload aesni
    entfernen -> das wiederum geht nur, wenn das Modul gerade nicht genutzt wird, also ggf. openvpn/ipsec tunnel stoppen/beenden).
    Darüber hinaus ist es aber wichtig, dass in der OpenVPN Konfiguration "cryptodev" benutzt wird (also in der OpenVPN Konfiguration
    als "Hardware Crypto" die "BSD cryptodev engine" auswählen.

    Dann läuft alles in Software aber offenbar durch ein effizientes Interface. Ich habe als ciper AES-128-CBC ausgewählt und mit diversen
    digests getestet. Hier erreiche ich dann einen Durchsatz von ca. 80MBit/sec, wobei der openvpn Prozess bei ca. 70-80% CPU
    liegt...

    Mehr kriege ich verschlüsselt über eine apu2 nicht vermittelt. Falls jemand bessere Werte erzielt, wäre ich für einen Hinweis
    dankbar - vor allem im Bezug auf ipsec da ich hier nur magere Übertragungsraten erzielt habe....



  • Hi alle,

    also gut, nach weiteren, gefühlten 1000 Tests mit pfsense 2.3.4 nehme ich alles zurück und behaupte das Gegenteil :-)

    Tatsächlich kann man mit der apu2 durchaus 100MBit/sec IPSec Performance schaffen. Ich bin in meinen
    ersten Tests schlichtweg an der ungeeigneten Kombination von Ciphern und Hashes gescheitert.

    Mein Setup:

    • SystemAdvancedMiscellaneous -> Cryptographic Hardware = AES-NI CPU-based Acceleration
        (auf der shell mit "kldstat" prüfen, dass das Modul aesni.ko auch wirklich geladen ist BEVOR ein IPSec Tunnel aufgebaut ist)
    • IPSec Phase 1: IKEv2, Encryption: AES256-GCM mit 128bit Blocklänge, Hash: AES-XCBC, DH-Group: 14
    • IPSec Phase 2: Encryption: AES256-GCM 128bit Blocklänge, Hash: AES-XCBC, PFS group 14

    Ich habe mich auf beiden Seiten des Tunnels auf diese Parameter festgelegt und keine anderen Ciphers/Hashes
    ausgewählt/zugelassen. Insbesondere andere Hashes (MD5,SHA1,SHA256) sind echte "Spielverderber".

    Mit diesen Einstellungen erreiche ich 100MBit/sec durch den IPSec Tunnel. Die CPU der apu2 ist dabei
    auch nur wenig ausgelastet - offenbar passiert dann die Ver-/Entschlüsselung in Hardware.



  • perfekt, danke für deine Geduld und Rückmeldung…

    Grüße M.



  • ich habe mir eine nagelneue apu2c4 zugelegt, vor allem um damit IPSec zu tunneln. Das setup war soweit auch kein Problem. Aber
    ich die Performance ist etwas enttäuschend, daher habe ich angefangen etwas rumzutesten.

    Welche Performance hast Du denn erwartet?
    Wie schnell ist denn Dein Internetzugang genau?
    Was sind denn alles für Pakete installiert worden?

    Da ist pfsense 2.3.4 drauf und wenn ich mit iperf am LAN Interface teste (vom PC zur PFS), erreiche ich kaum mehr als 350MBit/sec - ohne dass hier auch nur ein Paket vermittelt oder gefiltert wird. Um Probleme am Switch auszuschließen, habe
    ich einen Server direkt mit der apu2 verbunden -> gleiches Ergebnis.

    Iperf oder auch NetIO sollten immer als Client / Server von LAN zu WAN durch die pfSense laufen, und dort dann einen VPN
    Tunnel anzulegen bringt nicht sehr viel, nur echte richtige Daten und Zahlen sind nachher interessant! Was nützt es denn schon
    zu Hause im "Labor" oder bei dem Testaufbau xyz MBit/s via IPSec zu bekommen und dann im richtigen Einsatz kommt das
    alles gar nicht so hin wie man es getestet hat! Nichts für ungut und nicht gelästert, aber für den reinen Routing-Durchsatz ist
    so ein test alle male richtig gut, nur hinsichtlich des VPNs sollte man immer einen richtige VPN Gegenstellen haben, wie z.B.
    einen Bekannten oder Freund und dann kann man einmal darüber einen test machen und etwas kopieren oder downloaden.

    Diese 350MBit erreiche ich auch nur, wenn ich IPSec und die Filterregeln ausschalte (SystemAdvancedFirewall & NAT ->
    Disable all packet filtering.)

    Naja das ist dann wohl eher ein normales Routing ohne NAT. Also wie LAN port zu LAN port, oder?

    Wenn ich IPSec einschalte, komme ich noch auf ca 300MBit/sec, mit aktivierter FW gerade mal auf 220 MBit/sec. Auch hier
    ist noch kein Byte geroutet/vermittelt worden…

    Also 220 Mbit/s IPSec Performance kann sich doch aber sehen lassen, oder?

    Nun habe ich schon diverse andere Berichte über apu2 HW gelesen. Da gibt es Bereichte über Routingperformance im
    Bereich von 500MBit/sec aufwärts.

    Unter Linux mag das alles etwas anders sein als unter pfSense was ja auch FreeBSD basiert, und Linux mag auch etwas
    Hardware naher programmiert worden zu sein bis hin zu der etwas besseren Treiberunterstützung, man sollte das nicht
    alles auf "ein Gramm" abwiegen. GBit/s Durchsatz am WAN soll auch mit > 2.0GHz laufen und nicht mit 1.2GHz wie sie
    die APU2C4 Geräte bieten!

    Bei der IPSec Performance (um die es mir eigentlich geht) liege ich im Bereich von 50-60MBit/sec. Ich muss zugeben, dass
    ich da mehr erwartet hätte.

    Wie Du selber ja schon heraus gefunden hast profittiert eigentlich nur der AES-GCM Algorithmus von AES-NI und mit einer
    SG-4860 sind da fast ~500 MBit/s per IPSec drinnen! Das sollte schon gehen oder?

    Die Frage ist: was mache ich falsch?

    Was habe ich schon probiert:

    • HW Offloading on/off
    • enable/disable TSO und LRO
    • diverse Tunables

    Manche Tuning Tipps reichen schon alleine und so manches Tuning ergänzt sich mit dem schon vorhandenen, und bei
    wiederum anderen Punkten muss man da mehrfach ran und es eben etwas feiner tunen und einstellen.

    Bei einer 1 GBit/s Netzwerkkarte ist z.B. eine mbuf size von 1000000 gut und bei einigen 10 GBit/s Karten wird es mit
    65000 erst so richtig etwas. Also man kann nicht unbedingt sagen man stellt etwas ein und es bringt etwas oder nicht
    sondern man muss schon hier und dort ein wenig einstellen und diese Einstellungen dann mit anderen Sachen kombinieren.


  • LAYER 8 Moderator

    Da der OT das Problem für sich ja schon erledigt hatte, ist das aber ein wenig obsolete, oder?



  • Hallo Unterwasser,

    darf ich mal diesen älteren Post vorkramen …

    Erstmal danke für die Untersuchung!

    @Unterwasser:

    Mein Setup:

    • SystemAdvancedMiscellaneous -> Cryptographic Hardware = AES-NI CPU-based Acceleration
        (auf der shell mit "kldstat" prüfen, dass das Modul aesni.ko auch wirklich geladen ist BEVOR ein IPSec Tunnel aufgebaut ist)
    • IPSec Phase 1: IKEv2, Encryption: AES256-GCM mit 128bit Blocklänge, Hash: AES-XCBC, DH-Group: 14
    • IPSec Phase 2: Encryption: AES256-GCM 128bit Blocklänge, Hash: AES-XCBC, PFS group 14

    Ich habe mich auf beiden Seiten des Tunnels auf diese Parameter festgelegt […]

    Frage: Was betriebst Du denn auf der anderen Seite des Tunnels, auch eine pfSense oder ein VPN-Client, ggf. welchen?

    -flo-



  • @-flo-:

    Frage: Was betriebst Du denn auf der anderen Seite des Tunnels, auch eine pfSense oder ein VPN-Client, ggf. welchen?

    -flo-

    Hallo,

    auf der anderen Seite läuft auch eine pfSense (gleiche Version) aber als VM (unter KVM). Die HW die die
    VM treibt ist so dick, dass es da keine Performance Probleme gibt…


Log in to reply