見せてもらおうか、IntelのAES-NIの性能とやらを 〜OpenSSLでベンチしてみた〜

AES-NI の乗ってるマシンが使えたので OpenSSL でベンチマークしてみた。

結果:AES-NI なし 80〜90MB/s AES-NI あり 500〜530MB/s

「通常の5倍のスピードで処理してます!」「圧倒的じゃないか、我が軍は」
アクセラレーション命令の効果ってすごいねw

環境

  • パッケージ openssl-1.0.0-20.el6_2.3.x86_64
OpenSSL 1.0.0-fips 29 Mar 2010
built on: Wed Mar 28 01:11:34 BST 2012
options:bn(64,64) md2(int) rc4(16x,int) des(idx,cisc,16,int) aes(partial) blowfish(idx) 
compiler: gcc -fPIC -DOPENSSL_PIC -DZLIB -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -DKRB5_MIT -m64 -DL_ENDIAN -DTERMIO -Wall -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -Wa,--noexecstack -DMD32_REG_T=int -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DMD5_ASM -DAES_ASM -DWHIRLPOOL_ASM

データ処理方法

$ openssl speed aes-256-cbc と、$ openssl speed -engine aesni -evp aes-256-cbc をそれぞれ12回実行。
最低値と最高値を除いた10回分を平均。

ほぼ生結果

出力からデータ部分だけ抜き出して整形したもの

$ for i in [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12];do sleep 5;echo $'\n' $i;openssl speed aes-256-cbc;done

The 'numbers' are in 1000s of bytes per second processed.
      type              16 bytes     64 bytes    256 bytes   1024 bytes   8192 bytes
  [1] aes-256 cbc      83334.51k    88875.11k    89694.81k    90108.59k    90032.81k
  [2] aes-256 cbc      83676.49k    88564.69k    89513.81k    90060.12k    90136.58k
  [3] aes-256 cbc      83586.06k    88518.53k    89619.80k    89900.37k    90120.19k
  [4] aes-256 cbc      83481.23k    88239.70k    89631.74k    89968.64k    90161.15k
  [5] aes-256 cbc      83766.11k    88464.09k    89475.16k    90037.93k    90131.11k
  [6] aes-256 cbc      83576.46k    88526.70k    89594.11k    89827.33k    90150.23k
  [7] aes-256 cbc      83656.46k    88513.39k    89270.19k    89924.61k    89907.20k
  [8] aes-256 cbc      83753.24k    88548.39k    89591.89k    90039.64k    90106.54k
  [9] aes-256 cbc      83824.61k    88517.74k    89623.47k    89947.48k    90158.42k
 [10] aes-256 cbc      83477.34k    88522.82k    89642.92k    89906.52k    90317.48k
 [11] aes-256 cbc      83753.46k    88330.35k    89580.29k    89991.85k    90418.86k
 [12] aes-256 cbc      83760.76k    88532.03k    89620.74k    89857.02k    90172.07k

$ for i in [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12];do sleep 5;echo $'\n' $i;openssl speed -engine aesni -evp aes-256-cbc;done

      type             16 bytes     64 bytes    256 bytes   1024 bytes   8192 bytes
  [1] aes-256-cbc     501828.65k   526791.94k   532614.66k   532002.13k   534336.85k
  [2] aes-256-cbc     502227.67k   526500.01k   532457.30k   534213.63k   534629.03k
  [3] aes-256-cbc     502761.90k   526832.58k   532505.69k   534058.67k   534506.15k
  [4] aes-256-cbc     502380.79k   525534.10k   532617.98k   534076.76k   532540.07k
  [5] aes-256-cbc     501802.15k   526575.21k   531325.27k   534007.47k   534659.07k
  [6] aes-256-cbc     501603.49k   526804.86k   532528.21k   532920.32k   534399.66k
  [7] aes-256-cbc     501986.26k   526815.45k   532567.72k   534147.07k   533749.76k
  [8] aes-256-cbc     502505.37k   526502.93k   532417.79k   534156.63k   536340.38k
  [9] aes-256-cbc     501352.31k   526771.63k   532590.76k   533918.72k   534555.31k
 [10] aes-256-cbc     500879.76k   526261.67k   532489.47k   533684.91k   534560.77k
 [11] aes-256-cbc     502065.32k   526153.11k   530862.76k   533784.58k   536036.26k
 [12] aes-256-cbc     500670.27k   526739.97k   532580.78k   532582.74k   536112.97k