Engine_cudamrg for OpenSSL – Come usarlo e testarlo

In questo post vedremo come configurare l’engine_cudamrg per usarlo nel modo migliore.

Questa sezione dovrebbe essere divisa in due parti: una per i programmatori e una per gli utenti. La parte che riguarda gli sviluppatori non è ancora disponibile, lo diventerà non appena avrò tempo per scriverla, quindi tutto ciò che segue riguarda esclusivamente la configurazione per gli utenti finali.

Vi ricordo che questo estratto della documentazione del progetto è disponibile anche in lingua Inglese all’indirizzo http://code.google.com/p/engine-cuda/wiki/usageExample.

Se siete interessati ad un’analisi delle prestazioni (tabelle & grafici) vi rimando all’indirizzo http://code.google.com/p/engine-cuda/wiki/benchmarkVersion010, non appena avrò un poco di tempo a disposizione scriverò qualche riga di commento a riguardo.

Nei post che seguiranno sull’argomento cercherò di tenervi aggiornati sulle nuove release (nuove feature, incremento di prestazioni, analisi delle prestazioni, changelog, etc…)  e sull’andamento dello sviluppo.

Esempi d’uso per utenti finali

Con la versione 0.1.0 di engine_cudamrg è necessario ricompilare l’OpenSSL toolkit modificando un paio di file sorgenti con l’utility patch per avere lo speedup che un dispositivo abilitato CUDA è in grado di garantire.

Nel seguente esempio procederemo a scaricare, modificare, compilare e installare l’OpenSSL tookit, useremo /opt come directory d’installazione sia per l’OpenSSL toolkit che per l’engine_cudamrg ma è possibile scegliere qualsiasi directory di destinazione vogliate.

$ wget http://www.openssl.org/source/openssl-0.9.8k.tar.gz
$ wget http://engine-cuda.googlecode.com/files/engine_cudamrg-v_0.1.0.tar.gz
$ tar xvzf openssl-0.9.8k.tar.gz
$ tar xvzf engine_cudamrg-v_0.1.0.tar.gz
$ patch ./openssl-0.9.8k/apps/speed.c ./engine_cudamrg/openssl-patch/openssl-0.9.8.k-apps_speed.c.patch
$ patch ./openssl-0.9.8k/crypto/evp/bio_enc.c ./engine_cudamrg/openssl-patch/openssl-0.9.8.k-crypto_evp_bio_c.c.patch
$ cd openssl-0.9.8k/
$ ./config --prefix=/opt
$ make
$ sudo make install
$ cd ../engine_cudamrg/
$ ./configure --prefix=/opt
$ make
$ sudo make install
$ /opt/bin/openssl engine -vvvv cudamrg -c

Si può riassumere quanto fatto precedentemente con la seguente lista:

  1. scaricare sia l’OpenSSL toolkit che l’engine_cudamrg
  2. decomprimere i file scaricati
  3. applicare le modifiche ai due file scaricati
  4. configurare, compilare e installare l’OpenSSL toolkit
  5. configurare, compilare e installare l’engine_cudamrg
  6. verificare che tutto sia andato per il verso giusto

Da notare che nel precedente esempio non sono state compilate le librerie condivise dell’OpenSSL toolkit, se volete compilare anche le librerie condivise è necessario aggiungere l’opzione shared al comando config ma ricordatevi di modificare LD_LIBRARY_PATH in modo da includere la directory con le librerie modificate prima di quella contenente quelle originali.

$ /opt/bin/openssl speed -engine cudamrg -evp aes-256-ecb
...

La dimensione desiderata del buffer sarà quello con la velocità maggiore.

$ /opt/bin/openssl enc -engine cudamrg -e -aes-256-ecb -v -bufsize $DESIGNATED_BUFFER_SIZE -k $KEY -in $IN_FILE -out $OUT_FILE

Per cercare la dimensione del buffer che meglio si adatta al vostro dispositivo abilitato CUDA è necessario utilizzare la versione modificata di speed che avete compilato, probabilmente la dimensione del buffer migliore sarà fra 256KB e 2MB dipendentemente dal vostro hardware.

Ora è possibile usare e testare l’engine ma ricordatevi di utilizzare la dimensione del buffer che meglio si adatta al vostro dispositivo abilitato CUDA in altro caso potreste avere prestazioni peggiori di quelle ottenibili utilizzando il processore.

NOTA: in questo esempio ho utilizzato la versione 0.9.8k dell’OpenSSL toolkit semplicemente perché è quella fornita con la mia distribuzione.

Come usare la test suite: eseguire test-enc & test-speed

Usare la test suite fornita con i sorgenti è abbastanza semplice.

Le directory test-enc e test-speed contengono ognuna tre script di shell che eseguono il test e scrivono il risultato su disco più altri quattro script che diagrammano il risultato.

Per l’esecuzione degli script contenuti nella directory test-enc se avete l’engine_cudamrg e la versione ricompilata di OpenSSL impostate correttamente è sufficiente cambiare il valore della variabile OPENSSL all’interno degli script test-enc-cpu.sh e test-enc-gpu.sh in modo che contenga il percorso all’eseguibile openssl ricompilato. Dopodiché è necessario eseguire test-enc-gpu.sh, ricompilare l’engine con l’opzione --enable-cpuonly, eseguire lo script test-enc-cpu.sh ed eseguire lo script test-enc-plot.sh per diagrammare i risultati. Alla fine ricordatevi di ricompilare l’engine senza l’opzione --enable-cpuonly.

Per l’esecuzione degli script contenuti nella directory test-speed se avete l’engine_cudamrg e la versione ricompilata di OpenSSL impostate correttamente l’unica cosa che dovete fare è modificare il valore della variabile OPENSSL in modo che contenga il percorso all’eseguibile di openssl ricompilato. Al termine vengono diagrammati  i risultati.

Sia gli script di shell contenuti nella directory test-enc che nella directory test-speed producono come output 24 file, 4 per per ogni cifrario (cifratura e decifratura, sia per CPU che per GPU).

Related post:

Comments are closed.