diff options
author | Jakob Unterwurzacher | 2021-09-05 12:17:38 +0200 |
---|---|---|
committer | Jakob Unterwurzacher | 2021-09-07 18:14:05 +0200 |
commit | 6a0206897c83e1f3e4539d6a6c77149167f49626 (patch) | |
tree | 595bd444c56beaa2c405a9ba518acf852e06c70e /internal | |
parent | a2eaa5e3d1d9dfd8cf840076c215d253f82abf4b (diff) |
stupidgcm: add BenchmarkCCall
gocryptfs/internal/stupidgcm$ go test -bench .
goos: linux
goarch: amd64
pkg: github.com/rfjakob/gocryptfs/v2/internal/stupidgcm
cpu: Intel(R) Core(TM) i5-3470 CPU @ 3.20GHz
BenchmarkCCall-4 15864030 78.60 ns/op
PASS
ok github.com/rfjakob/gocryptfs/v2/internal/stupidgcm 1.898s
Diffstat (limited to 'internal')
-rw-r--r-- | internal/stupidgcm/common_test.go | 21 | ||||
-rw-r--r-- | internal/stupidgcm/openssl.go | 6 | ||||
-rw-r--r-- | internal/stupidgcm/openssl_aead.c | 5 | ||||
-rw-r--r-- | internal/stupidgcm/openssl_aead.h | 2 |
4 files changed, 34 insertions, 0 deletions
diff --git a/internal/stupidgcm/common_test.go b/internal/stupidgcm/common_test.go index a8080ca..589d974 100644 --- a/internal/stupidgcm/common_test.go +++ b/internal/stupidgcm/common_test.go @@ -208,3 +208,24 @@ func randBytes(n int) []byte { } return b } + +/* +BenchmarkCCall benchmarks the overhead of calling from Go into C. +Looks like things improved a bit compared to +https://www.cockroachlabs.com/blog/the-cost-and-complexity-of-cgo/ +where they measured 171ns/op: + +$ go test -bench . +goos: linux +goarch: amd64 +pkg: github.com/rfjakob/gocryptfs/v2/internal/stupidgcm +cpu: Intel(R) Core(TM) i5-3470 CPU @ 3.20GHz +BenchmarkCCall-4 13989364 76.72 ns/op +PASS +ok github.com/rfjakob/gocryptfs/v2/internal/stupidgcm 1.735s +*/ +func BenchmarkCCall(b *testing.B) { + for i := 0; i < b.N; i++ { + noopCFunction() + } +} diff --git a/internal/stupidgcm/openssl.go b/internal/stupidgcm/openssl.go index cb9845e..82ec0a1 100644 --- a/internal/stupidgcm/openssl.go +++ b/internal/stupidgcm/openssl.go @@ -108,3 +108,9 @@ func openSSLOpen(a *stupidAEADCommon, dst, iv, in, authData []byte) ([]byte, err } return append(dst, buf...), nil } + +// This functions exists to benchmark the C call overhead from Go. +// See BenchmarkCCall for resuts. +func noopCFunction() { + C.noop_c_function() +} diff --git a/internal/stupidgcm/openssl_aead.c b/internal/stupidgcm/openssl_aead.c index 9dc6866..77898d5 100644 --- a/internal/stupidgcm/openssl_aead.c +++ b/internal/stupidgcm/openssl_aead.c @@ -176,3 +176,8 @@ int openssl_aead_open( return plaintextLen; } + +// This functions exists to benchmark the C call overhead from Go. +void noop_c_function(void) { + return; +} diff --git a/internal/stupidgcm/openssl_aead.h b/internal/stupidgcm/openssl_aead.h index 6a818b6..820beeb 100644 --- a/internal/stupidgcm/openssl_aead.h +++ b/internal/stupidgcm/openssl_aead.h @@ -27,3 +27,5 @@ int openssl_aead_open( const int ivLen, unsigned char* const plaintext, const int plaintextBufLen); + +void noop_c_function(void); |