それマグで!

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

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

CPUのAESの速度を測定する

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本ついてるマシン

参考資料

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

JetBrainssのコマンドライン launcher を何度も導入し直すのが面倒なのでスクリプト書いた

WebStorm やPycharm をコマンドから呼べるヤツ

コマンドラインからPycharmを起動できるスクリプトはもともとサポートされていますが。

f:id:takuya_1st:20190130223525p:plain

Toolbox を使うとパスが飛びまくる

Jetbrains toolbox を使っていると、PATHがぜんぜんもうダメになって使い物にならない。

たとえば、2019-01-30 現在の pycharm の場所はこんなのになってる。

 '/Users/takuya/Library/Application Support/JetBrains/Toolbox/apps/PyCharm-P/ch-0/183.5153.39/PyCharm.app/Contents'

はぁめんどくさいなぁ。アップデート来るたびにコマンドラインの起動スクリプトを作り直しになるう。

通常で使ってる分にはあんまり問題はないのだけれど。Toolboxを使って自動アップデートにするとコマンドの作成がうまくいかない。

自前で作ることにした。

ポイントは --args で引数のパスを渡すところ

gist.github.com

このファイルを保存して実行すれば大丈夫。

使い方

curl -L http://j.mp/2TkW4uf > pycharm 
pycharm /usr/local/bin

これでオッケ

phpstorm が良ければ

curl -L http://j.mp/2TkW4uf > phpstorm
phpstorm /usr/local/bin

webstorm も rubymine も同じ感じで行けそう

mac にlsusb をインストール

mac で lsbusb をつい叩いてしまう

takuya@macos~$ lsusb
-bash: lsusb: コマンドが見つかりません

あああ、もう。慣れって怖い

mac で同様のコマンドはないのかとおもったら。

教えてもらった。

出来た!

system_profiler SPUSBDataType

あとは、これをAliasにして

alias lsusb='system_profiler SPUSBDataType'

これで困らないね。でも表示が冗長なんだよなぁ。

あれ、brew に面白いものが

ip コマンドみたいに、ダメ元で検索かけたら出てきた。

brew install lsusb

なんと、bash で記述された根性スクリプトだった。コレは楽しい。