libgocryptfs/openssl_benchmark/go-vs-openssl.md

2.4 KiB

Go 1.4.2

39MB/s @1k

go1.4/src/crypto/cipher$ go test -bench=.

BenchmarkAESGCMSeal1K   	   50000	     25968 ns/op	  39.43 MB/s
BenchmarkAESGCMOpen1K   	   50000	     25914 ns/op	  39.51 MB/s
[...]

Go 1.5

41MB/s @1k

go1.5/src/crypto/cipher$ ~/go/src/go1.5/bin/go test -bench=.

BenchmarkAESGCMSeal1K-2   	   50000	     24429 ns/op	  41.92 MB/s
BenchmarkAESGCMOpen1K-2   	   50000	     24578 ns/op	  41.66 MB/s
BenchmarkAESGCMSeal8K-2   	   10000	    190340 ns/op	  43.04 MB/s
BenchmarkAESGCMOpen8K-2   	   10000	    190308 ns/op	  43.05 MB/s
[...]

openssl 1.0.1k

302MB/s @1k

$ openssl speed -elapsed -evp aes-128-gcm

[...]
The 'numbers' are in 1000s of bytes per second processed.
type             16 bytes     64 bytes    256 bytes   1024 bytes   8192 bytes
aes-128-gcm      71275.15k    80063.19k   275048.36k   302066.69k   308912.13k

gocryptfs with openssl bindings

148MB/s @4k

gocryptfs/openssl_benchmark$ ./openssl_benchmark.bash 

BenchmarkAESGCMSeal4K   	   20000	     98671 ns/op	  41.51 MB/s
BenchmarkAESGCMOpen4K   	   20000	     98679 ns/op	  41.51 MB/s
BenchmarkOpensslGCMenc4K	   50000	     27542 ns/op	 148.72 MB/s
BenchmarkOpensslGCMdec4K	   50000	     27564 ns/op	 148.60 MB/s

CPU Info

This is tested on a dual-core Intel Sandy Bridge Pentium G630 which does NOT have aes instructions ( https://en.wikipedia.org/wiki/AES_instruction_set )

$ cat /proc/cpuinfo | fold -s -w 80

processor	: 0
vendor_id	: GenuineIntel
cpu family	: 6
model		: 42
model name	: Intel(R) Pentium(R) CPU G630 @ 2.70GHz
stepping	: 7
microcode	: 0x29
cpu MHz		: 1617.574
cache size	: 3072 KB
physical id	: 0
siblings	: 2
core id		: 0
cpu cores	: 2
apicid		: 0
initial apicid	: 0
fpu		: yes
fpu_exception	: yes
cpuid level	: 13
wp		: yes
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 rdtscp lm 
constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc 
aperfmperf eagerfpu pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 
xtpr pdcm pcid sse4_1 sse4_2 popcnt tsc_deadline_timer xsave lahf_lm arat epb 
pln pts dtherm tpr_shadow vnmi flexpriority ept vpid xsaveopt
bugs		:
bogomips	: 5387.68
clflush size	: 64
cache_alignment	: 64
address sizes	: 36 bits physical, 48 bits virtual
power management:
[...]