OpenSSH und AES-Ni

Piktogramm

Admiral
Registriert
Okt. 2008
Beiträge
8.859
Servus,

mein AMD Kabini Athlon 5150 rückt über SSH meist nur 65MB/s heraus was mir zu lahm ist, vor allem da das Ding mit AES-Ni locker +200MB/s lokal erreichen sollte um die 1Gbit/s Verbindung gescheit zu nutzen und dann seine 120MB/s zu schaffen.

Auf meiner Suche bin ich daraufgestoßen, dass OpenSSL (SSL nicht wie gewünsch SSH ;) ) mittels der EVP Bibliotheken AES-Ni nutzen kann und "openssl speed -evp aes-128-ctr" auch tatsächlich in Bereichen von 180MB/s (16bytes) bis 1.370MB/s (8192bytes) und bei aes-128-cbc 272MB/s zu 488MB/s vorstößt.

Die Frage ist nun, wie bekomme ich nun eine SSH Verbindung hin, die verschlüsselt ist und AES-Ni auf Server wie Client nutzt?!


Das Problemchen, dass SSH immer nur singlethreaded läuft behandeln wir dann, wenn günstig 10Gbit/S Netzwerktechnik in die Hände bekomme :D

PS: Info
Code:
~$ ssh -V
OpenSSH_6.6.1p1 Ubuntu-8, OpenSSL 1.0.1f 6 Jan 2014


Edit:

Code:
~$ dd if=/dev/zero bs=1048576 count=4096 | ssh 127.0.0.1 dd of=/dev/null
someones@127.0.0.1's password: 
4096+0 records in
4096+0 records out
4294967296 bytes (4.3 GB) copied, 38.8783 s, 110 MB/s
8388608+0 records in
8388608+0 records out
4294967296 bytes (4.3 GB) copied, 31.9961 s, 134 MB/s


Also lokal passt die Geschwindigkeit halbwegs. Über das Netzwerk wird der Spaß dagegen auf gut 50% dessen reduziert. Wobei auch die lokale Geschwindigkeit dafür spricht, dass da noch alles in Software und nicht über AES-Ni abläuft. Mit AES-Ni würde ich als Minimum das Doppelte erwarten (siehe oben).
Bleibt also die Frage, wieso über das Netzwerk die Geschwindigkeit halb so groß ist und wie die Geschwindigkeit allgemein verbessert werden kann.

Der Vollständigkeit halber: Nein der Festspeicher begrenzt nicht. Es ist zwar nur eine billige SanDisk SSD aber die schreibt und liest sequentiell mehr als 1Gbit/s Lan liefert.
 
Zuletzt bearbeitet:
Piktogramm schrieb:
Servus,

mein AMD Kabini Athlon 5150 rückt über SSH meist nur 65MB/s heraus was mir zu lahm ist, vor allem da das Ding mit AES-Ni locker +200MB/s erreichen sollte um die 1Gbit/s Verbindung gescheit zu nutzen.

Vielleicht ist es noch zu früh oder ich verstehe die Frage nicht vollkommen, aber 200MB/s wirst du über 1Gbit/s (~Brutto 125MB/s; Netto eher 115MB/s) nie erreichen. Zumindest nicht ohne z.b. Link-Aggregation
 
Ist ungünstig geschrieben, die CPU sollte ohne begrenzendes Netzwerk +200MB/s über AES128 schaffen und an der Stelle darf dann auch das Netzwerkinterface auf die typischen 120MB/s begrenzen.

Ich bearbeite die Einleitung mal :)
 
Mach doch mal einen Test mit IPerf oder FTP. nicht das die NIC ein Problem macht.
 
Versuch mal:

Code:
ssh -c aes128-cbc
 
@startaq

Code:
~$ dd if=/dev/zero bs=1048576 count=4096 | ssh -c aes128-cbc 127.0.0.1 dd of=/dev/null
johannes@127.0.0.1's password: 
4096+0 records in
4096+0 records out
4294967296 bytes (4.3 GB) copied, 45.5212 s, 94.4 MB/s
8388608+0 records in
8388608+0 records out
4294967296 bytes (4.3 GB) copied, 41.3297 s, 104 MB/s

Das Ergebnis war so zu erwarten :)


@Sannyboy111985

Code:
~$ iperf -c 192.168.128.38 -d
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size: 85.3 KByte (default)
------------------------------------------------------------
------------------------------------------------------------
Client connecting to 192.168.128.38, TCP port 5001
TCP window size:  416 KByte (default)
------------------------------------------------------------
[  5] local 192.168.128.46 port 39602 connected with 192.168.128.38 port 5001
[  4] local 192.168.128.46 port 5001 connected with 192.168.128.38 port 47693
[ ID] Interval       Transfer     Bandwidth
[  5]  0.0-10.0 sec  1.09 GBytes   933 Mbits/sec
[  4]  0.0-10.0 sec  1.08 GBytes   931 Mbits/sec

CPU-Auslastung dabei liegt serverseitig bei ~0,9 - 1 (es wird jedoch in beide Richtungen gemessen, das kommt aber wirklich nur selten vor, dass ich symmetrische Last erzeuge :) )
Beim Clienten ist die CPU gerade stärker belastet und es sind Verbindungen offen die Traffic erzeugen. Insofern sind die Daten minimal schlechter als optimal möglich wäre.
 
Zuletzt bearbeitet:
Hallo,

Das kannst du erreichen, indem du eine ssh_config-Datei entweder nur für dich lokal (dann in ~/.ssh/ mit dem Namen "config"
oder systemweit in /etc/ssh/ (dann mit Namen "ssh_config) anlegst.
Die Syntax für diese Datei ist in der gleichnamigen Man-Page beschrieben.
Ich persönlich nutze die folgende ssh_config-Datei systemweit.

Code:
Host *
#   ForwardAgent no
#   ForwardX11 no
#   RhostsRSAAuthentication no
#   RSAAuthentication yes
#   PasswordAuthentication yes
#   HostbasedAuthentication no
#   GSSAPIAuthentication no
#   GSSAPIDelegateCredentials no
#   BatchMode no
#   CheckHostIP yes
#   AddressFamily any
#   ConnectTimeout 0
#   StrictHostKeyChecking ask
#   IdentityFile ~/.ssh/identity
#   IdentityFile ~/.ssh/id_rsa
#   IdentityFile ~/.ssh/id_dsa
#   Port 22
#   Protocol 2
   Ciphers aes256-gcm@openssh.com,aes128-gcm@openssh.com,chacha20-poly1305@openssh.com,aes256-ctr,aes192-ctr,aes128-ctr
   MACs hmac-ripemd160,hmac-sha2-256,hmac-sha2-512,hmac-sha1
   KexAlgorithms curve25519-sha256@libssh.org,diffie-hellman-group-exchange-sha256
#   ServerAliveCountMax 3
#   ServerAliveInterval 5
#   EscapeChar ~
#   Tunnel no
#   TunnelDevice any:any
#   PermitLocalCommand no
#   VisualHostKey no
#   ProxyCommand ssh -q -W %h:%p gateway.example.com
#       Compression yes
#       CompressionLevel 9

Die Syntax von ~/.ssh/config und /etc/ssh/ssh_config ist gleich.

Grüße,
Thermi
 
Zuletzt bearbeitet:
Hi Thermi,

damit ich nicht nur kopiere und auch was lerne. Woran erkenne ich jetzt aus dem Configfile heraus, dass AES-Ni bzw. entsprechende Bibliotheken genutzt werden und vor allem wo ist das dokumentiert?
 
Hallo,

Zuallererst musst du openssh dazu bringen Verschlüsselungsalgorithmen zu nutzen, die auf AES basieren, da sie sonst nicht mit AES-NI
beschleunigt werden können. Die oben genannte Konfiguration ist fast dafür vorbereitet. Du musst nur die "Ciphers"-Einstellung so ändern, dass nur auf AES basierende Algorithmen genutzt werden. Ob openssh dann tatsächlich AES-NI nutzt hängt von openssl, also der unter openssh liegenden Bibliothek, ab. Ob openssl dann die Verschlüsselung beschleunigt, liegt an den Einstellungen der Bibliothek.

Grüße,
Thermi
 
Also OpenSSH sieht als bevorzugte Methode sowieso aes-128-ctr vor, was in der EVP Bibiltiohek mittlerweile auch mittels AES-Ni unterstützt wird. Das ist also kein Problem. Insofern bringt dein Configfile leider keinen Mehrwehrt.

Bleibt die Frage, wie bekomme ich nun OpenSSL dazu die EVP Bibiliothek zu nutzen?
 
Naja, bei mir steht auch nur noch aes-xxx-ctr drinnen, insofern danke, aber du bist zu spät dran :)

Was den Thread von superuser.com angeht, der ist leider für openSSL 1.0 ff. nur bedingt brauchbar. Die EVP Bibliotheken mit AES-Ni Fähigkeit sind je bereits integriert (siehe Post #1, der Nachweis ist auch erbraucht und in der Dokumentation steht es auch so drinnen), daher wäre es unsinnig da selber Bibliotheken von Hand zu kompilieren und einzubinden. Ich würde schon gern nutzen, was da ist und mitnehmen, dass die genutzten Bibliotheken über die Repos auch gepatcht werden wenn es notwendig ist.
Es fehlt der Weg in der Config entsprechend festzuschreiben, dass das was -evp beim Aufruf über das Terminal bewirkt dauerhafter Zustand wird ohne von Hand an den Bibliotheken zu pfuschen :)


Edit:
https://www.openssl.org/docs/apps/config.html

Hier wird zwar fröhlich erklärt, wie man konfiguriert, leider fehlt der konkrete Hinweis, wie konkret die EVP Bibliothek angesprochen werden kann (oder ich bin zu doof).
 
Zuletzt bearbeitet:
Zurück
Oben