それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

AESの速度議論のためには種類のCPUで、AESの速度を測定する。- intel arm mips

AES がどれくらいの速度で扱えるかを測定したい。

openssl speed -multi $CORES aes-128-cbc sha256

実験してみた

まずはIntelのCPUで実験

> cat /proc/cpuinfo  |
model name  : Intel(R) Core(TM) i7-6700 CPU @ 3.40GHz
flags       : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch invpcid_single ibrs ibpb stibp kaiser tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm mpx rdseed adx smap clflushopt intel_pt xsaveopt xsavec xgetbv1 xsaves dtherm ida arat pln pts hwp hwp_notify hwp_act_window hwp_epp
bugs        : cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf
> openssl speed -multi 8 aes-128-cbc sha256
OpenSSL 1.1.0j  20 Nov 2018
built on: reproducible build, date unspecified
options:bn(64,64) rc4(16x,int) des(int) aes(partial) blowfish(ptr)
compiler: gcc -DDSO_DLFCN -DHAVE_DLFCN_H -DNDEBUG -DOPENSSL_THREADS -DOPENSSL_NO_STATIC_ENGINE -DOPENSSL_PIC -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DRC4_ASM -DMD5_ASM -DAES_ASM -DVPAES_ASM -DBSAES_ASM -DGHASH_ASM -DECP_NISTZ256_ASM -DPADLOCK_ASM -DPOLY1305_ASM -DOPENSSLDIR="\"/usr/lib/ssl\"" -DENGINESDIR="\"/usr/lib/x86_64-linux-gnu/engines-1.1\""
aes-128 cbc     359078.48k   430352.34k   446573.69k   423978.37k   465998.75k   493221.99k
sha256          224244.06k   536218.13k   945057.87k  1299140.74k  1215522.99k  1242332.35k

Raspi3 4コアで実験

> cat /proc/cpuinfo  | grep model
processor   : 3
model name  : ARMv7 Processor rev 4 (v7l)
BogoMIPS    : 38.40
Features    : half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm crc32

> openssl speed -multi 4 aes-128-cbc sha256
compiler: gcc -DDSO_DLFCN -DHAVE_DLFCN_H -DNDEBUG -DOPENSSL_THREADS -DOPENSSL_NO_STATIC_ENGINE -DOPENSSL_PIC -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DAES_ASM -DBSAES_ASM -DGHASH_ASM -DECP_NISTZ256_ASM -DPOLY1305_ASM -DOPENSSLDIR="\"/usr/lib/ssl\"" -DENGINESDIR="\"/usr/lib/arm-linux-gnueabihf/engines-1.1\""
aes-128 cbc     162479.43k   183362.99k   189770.67k   191614.29k   192888.83k   191987.71k
sha256           43623.56k   115694.68k   209662.38k   264529.58k   284770.30k   287719.42k

手元にあるルータでも試してみた。

root@tplinkc7v5:/etc/config# cat /proc/cpuinfo
system type     : Qualcomm Atheros QCA956X ver 1 rev 0
machine         : TP-LINK Archer C7 v5
cpu model       : MIPS 74Kc V5.0

root@tplinkc7v5:/etc/config# openssl speed  aes-128-cbc sha256
compiler: mips-openwrt-linux-musl-gcc -I. -I.. -I../include  -fPIC -DOPENSSL_PIC -DZLIB_SHARED -DZLIB -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -I/build/openwrt-18.06/slaves/phase2/mips_24kc/build/sdk/staging_dir/target-mips_24kc_musl/usr/include -I/build/openwrt-18.06/slaves/phase2/mips_24kc/build/sdk/staging_dir/target-mips_24kc_musl/include -I/build/openwrt-18.06/slaves/phase2/mips_24kc/build/sdk/staging_dir/toolchain-mips_24kc_gcc-7.3.0_musl/usr/include -I/build/openwrt-18.06/slaves/phase2/mips_24kc/build/sdk/staging_dir/toolchain-mips_24kc_gcc-7.3.0_musl/include/fortify -I/build/openwrt-18.06/slaves/phase2/mips_24kc/build/sdk/staging_dir/toolchain-mips_24kc_gcc-7.3.0_musl/include -znow -zrelro -DOPENSSL_SMALL_FOOTPRINT -DHAVE_CRYPTODEV -DUSE_CRYPTODEV_DIGESTS -DOPENSSL_NO_ERR -DTERMIOS -Os -pipe -mno-branch-likely -mips32r2 -mtune=24kc -fno-caller-saves -fno-plt -fhonour-copts -Wno-error=unused-but-set-variable -Wno-error=unused-result -msoft-float -iremap/build/openwrt-18.06/slaves/phase2/mips_24kc/build/sdk/build_dir/target-mips_24kc_musl/openssl-1.0.2p:openssl-1.0.2p -Wformat -Werror=format-security -fstack-protector -D_FORTIFY_SOURCE=1 -Wl,-z,now -Wl,-z,relro -fpic -I/build/openwrt-18.06/slaves/phase2/mips_24kc/build/sdk/feeds/base/package/libs/openssl/include -ffunction-sections -fdata-sections -fomit-frame-pointer -Wall -DOPENSSL_BN_ASM_MONT -DSHA1_ASM -DSHA256_ASM -DAES_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      11853.28k    13028.85k    13314.53k    13352.39k    13424.46k
sha256            4376.05k     9761.24k    17090.33k    21060.47k    22263.52k

最近買ったJ5005のマシンでも試してみた。

cat /proc/cpuinfo 
processor   : 0
vendor_id   : GenuineIntel
model name  : Intel(R) Pentium(R) Silver J5005 CPU @ 1.50GHz
stepping    : 1
microcode   : 0x28
cpu MHz     : 972.719
cache size  : 4096 KB

flags       : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf tsc_known_freq pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 sdbg cx16 xtpr pdcm sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave rdrand lahf_lm 3dnowprefetch cpuid_fault cat_l2 pti cdp_l2 ssbd ibrs ibpb stibp ibrs_enhanced tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust smep erms mpx rdt_a rdseed smap clflushopt intel_pt sha_ni xsaveopt xsavec xgetbv1 xsaves dtherm ida arat pln pts umip rdpid arch_capabilities
aes-128 cbc     247540.61k   270574.27k   276258.99k   618936.32k   625180.67k   623241.90k
sha256          357970.44k   917322.11k  1770737.49k  2298001.41k  2424143.87k  2547853.99k

まとめ

簡単に数字だけ拾ってみる

cpu aes-128 cbc 16byte
Intel(R) Core(TM) i7-6700 359078.48k
Intel(R) Pentium J5005 247540.61k
ARMv7 Processor rev 4 (v7l) 162479.43k
MIPS 74Kc V5.0 11853.28k

やっぱりPC用のIntelのCPUは段違いに早いっすね。AESとsha256などOpenVPNとかHTTPSとかをIntel/AMD以外のCPUで扱うのは無理がありそう

ルーターにOpenWRTやDD-WRTを突っ込んだとしてもOpenVPNなど暗号化通信のスループットは全く期待できないと思われる。

IPSecOpenVPNとかの暗号化をつかった通信を一般ご家庭で試すにはPCのCPUを使うのが一番いい。 Livaのマシン買ってきてLinuxルータを作るのがいいだろうな

GigaEther が2本ついてるマシン

関連記事

CPUのAES暗号化速度をCPU組込のaesサポートのありなしで測定する。 - それマグで!

参考資料

https://systemausfall.org/wikis/howto/AES-Performance