Verwendet Nginx die Hardware-AES-Unterstützung von Intel Core i7 oder anderen ähnlichen Architekturen?

8

Ich versuche, Nginx als Reverse-Proxy mit Funktionen wie Lastausgleich und SSL-Offload zu verwenden, und ich muss die richtige Hardware kaufen.

In einigen Fällen benötige ich ein SSL-Offload mit hohem Durchsatz und frage mich, ob Nginx die Hardware-AES-Funktionen von Intel Core i7 (oder der Server-Xeon Nehalem- CPU-Produktlinie) verwendet oder nicht!

Erhält die Verwendung von Nginx mit solchen CPUs mehr Durchsatz beim SSL-Offload, oder wäre dies eine Geldverschwendung?

Ehsan Mahdavi
quelle
2
Fast alle aktuellen Intel-Prozessoren verfügen über AES-NI, sodass Sie es wahrscheinlich trotzdem erhalten, unabhängig davon, was Sie kaufen.
Michael Hampton

Antworten:

15

Sie können überprüfen, ob nginx mit OpenSSL erstellt wurde, indem Sie ausführen nginx -V.

[root@saurok ~]# nginx -V
nginx version: nginx/1.8.0
built by gcc 5.1.1 20150618 (Red Hat 5.1.1-4) (GCC)
built with OpenSSL 1.0.1k-fips 8 Jan 2015
TLS SNI support enabled
...

Sie können überprüfen, ob OpenSSL Intel AES-NI verwendet, indem Sie die internen Benchmarks von OpenSSL ausführen.

Vergleichen Sie die Ausgabe von openssl speed aes-128-cbcmit openssl speed -evp aes-128-cbc. Ersteres überspringt die Hardwarebeschleunigung, selbst wenn vorhanden, während letzteres die Beschleunigung verwendet, falls verfügbar. Mit Ausnahme des Benchmarks wird dieser automatisch verwendet, falls vorhanden .

Zum Beispiel:

[root@saurok ~]# openssl speed aes-128-cbc
Doing aes-128 cbc for 3s on 16 size blocks: 32797518 aes-128 cbc's in 3.00s
Doing aes-128 cbc for 3s on 64 size blocks: 9030109 aes-128 cbc's in 3.00s
Doing aes-128 cbc for 3s on 256 size blocks: 2311493 aes-128 cbc's in 3.00s
Doing aes-128 cbc for 3s on 1024 size blocks: 582201 aes-128 cbc's in 3.00s
Doing aes-128 cbc for 3s on 8192 size blocks: 72836 aes-128 cbc's in 3.00s
OpenSSL 1.0.1k-fips 8 Jan 2015
built on: Thu Aug 13 12:19:54 2015
options:bn(64,64) md2(int) rc4(16x,int) des(idx,cisc,16,int) aes(partial) idea(int) blowfish(idx) 
compiler: -I. -I.. -I../include  -fPIC -DOPENSSL_PIC -DZLIB -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -DKRB5_MIT -m64 -DL_ENDIAN -DTERMIO -Wall -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches  -m64 -mtune=generic -Wa,--noexecstack -DPURIFY -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DMD5_ASM -DAES_ASM -DVPAES_ASM -DBSAES_ASM -DWHIRLPOOL_ASM -DGHASH_ASM
The 'numbers' are in 1000s of bytes per second processed.
type             16 bytes     64 bytes    256 bytes   1024 bytes   8192 bytes
aes-128 cbc     174920.10k   192642.33k   197247.40k   198724.61k   198890.84k

verglichen mit

[root@saurok ~]# openssl speed -evp aes-128-cbc
Doing aes-128-cbc for 3s on 16 size blocks: 169042680 aes-128-cbc's in 3.00s
Doing aes-128-cbc for 3s on 64 size blocks: 45311567 aes-128-cbc's in 3.00s
Doing aes-128-cbc for 3s on 256 size blocks: 11536773 aes-128-cbc's in 3.00s
Doing aes-128-cbc for 3s on 1024 size blocks: 2897474 aes-128-cbc's in 3.00s
Doing aes-128-cbc for 3s on 8192 size blocks: 362685 aes-128-cbc's in 3.00s
OpenSSL 1.0.1k-fips 8 Jan 2015
built on: Thu Aug 13 12:19:54 2015
options:bn(64,64) md2(int) rc4(16x,int) des(idx,cisc,16,int) aes(partial) idea(int) blowfish(idx) 
compiler: -I. -I.. -I../include  -fPIC -DOPENSSL_PIC -DZLIB -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -DKRB5_MIT -m64 -DL_ENDIAN -DTERMIO -Wall -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches  -m64 -mtune=generic -Wa,--noexecstack -DPURIFY -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DMD5_ASM -DAES_ASM -DVPAES_ASM -DBSAES_ASM -DWHIRLPOOL_ASM -DGHASH_ASM
The 'numbers' are in 1000s of bytes per second processed.
type             16 bytes     64 bytes    256 bytes   1024 bytes   8192 bytes
aes-128-cbc     901560.96k   966646.76k   984471.30k   989004.46k   990371.84k

Wie Sie sehen können, ist letzteres viel schneller, was darauf hinweist, dass Hardwarebeschleunigung verwendet wird.

Michael Hampton
quelle
1

Nginx hat nichts mit Hardware-Offloading zu tun. Das liegt an der verwendeten Kryptobibliothek. Normalerweise verwenden Sie OpenSSL. Wenn es sich um eine geeignete, entsprechend konfigurierte Version handelt, wird das Hardware-Offloading für Kryptooperationen verwendet, die in Silizium auf modernen CPUs unterstützt werden.

womble
quelle
Ich habe keine Änderungen an der Standard-Nginx-Konfiguration vorgenommen. Wie kann ich feststellen, ob ich die entsprechende Version mit der entsprechenden Konfiguration verwende?
Ehsan Mahdavi