-speed: print cpu model

When somebody posts "gocryptfs -speed" results, they are
most helpful together with the CPU model. Add the cpu model
to the output.

Example:

$ ./gocryptfs -speed
gocryptfs v2.2.0-beta1-5-g52b0444-dirty; go-fuse v2.1.1-0.20210825171523-3ab5d95a30ae; 2021-09-14 go1.17.1 linux/amd64
cpu: Intel(R) Core(TM) i5-3470 CPU @ 3.20GHz; with AES acceleration
AES-GCM-256-OpenSSL       	 862.79 MB/s
AES-GCM-256-Go            	 997.71 MB/s	(selected in auto mode)
AES-SIV-512-Go            	 159.58 MB/s
XChaCha20-Poly1305-OpenSSL	 729.65 MB/s
XChaCha20-Poly1305-Go     	 843.97 MB/s	(selected in auto mode)
This commit is contained in:
Jakob Unterwurzacher 2021-09-14 18:47:41 +02:00
parent 61e37b2439
commit 2d0ba24eca
3 changed files with 71 additions and 6 deletions

View File

@ -168,12 +168,13 @@ Example for a CPU with AES-NI:
``` ```
$ ./gocryptfs -speed $ ./gocryptfs -speed
gocryptfs v2.2.0-beta1-4-gcdbc48f; go-fuse v2.1.1-0.20210825171523-3ab5d95a30ae; 2021-09-14 go1.17.1 linux/amd64 gocryptfs v2.2.0-beta1-5-g52b0444-dirty; go-fuse v2.1.1-0.20210825171523-3ab5d95a30ae; 2021-09-14 go1.17.1 linux/amd64
AES-GCM-256-OpenSSL 868.09 MB/s cpu: Intel(R) Core(TM) i5-3470 CPU @ 3.20GHz; with AES acceleration
AES-GCM-256-Go 997.97 MB/s (selected in auto mode) AES-GCM-256-OpenSSL 862.79 MB/s
AES-SIV-512-Go 160.72 MB/s AES-GCM-256-Go 997.71 MB/s (selected in auto mode)
XChaCha20-Poly1305-OpenSSL 722.14 MB/s AES-SIV-512-Go 159.58 MB/s
XChaCha20-Poly1305-Go 841.89 MB/s (selected in auto mode) XChaCha20-Poly1305-OpenSSL 729.65 MB/s
XChaCha20-Poly1305-Go 843.97 MB/s (selected in auto mode)
``` ```
You can run `./benchmark.bash` to run gocryptfs' canonical set of You can run `./benchmark.bash` to run gocryptfs' canonical set of

54
internal/speed/cpuinfo.go Normal file
View File

@ -0,0 +1,54 @@
package speed
import (
"io/ioutil"
"os"
"runtime"
"strings"
)
// cpuModelName returns the "model name" acc. to /proc/cpuinfo, or ""
// on error.
//
// Examples: On my desktop PC:
//
// $ grep "model name" /proc/cpuinfo
// model name : Intel(R) Core(TM) i5-3470 CPU @ 3.20GHz
//
// --> Returns "Intel(R) Core(TM) i5-3470 CPU @ 3.20GHz".
//
// On a Raspberry Pi 4:
//
// $ grep "model name" /proc/cpuinfo
// (empty)
// $ grep Hardware /proc/cpuinfo
// Hardware : BCM2835
//
// --> Returns "BCM2835"
func cpuModelName() string {
if runtime.GOOS != "linux" {
return ""
}
f, err := os.Open("/proc/cpuinfo")
if err != nil {
return ""
}
content, err := ioutil.ReadAll(f)
if err != nil {
return ""
}
lines := strings.Split(string(content), "\n")
// Look for "model name", then for "Hardware" (arm devices don't have "model name")
for _, want := range []string{"model name", "Hardware"} {
for _, line := range lines {
if strings.HasPrefix(line, want) {
parts := strings.SplitN(line, ":", 2)
if len(parts) != 2 {
continue
}
return strings.TrimSpace(parts[1])
}
}
}
return ""
}

View File

@ -27,6 +27,16 @@ const blockSize = 4096
// Run - run the speed the test and print the results. // Run - run the speed the test and print the results.
func Run() { func Run() {
cpu := cpuModelName()
if cpu == "" {
cpu = "unknown"
}
aes := "; no AES acceleration"
if stupidgcm.CpuHasAES() {
aes = "; with AES acceleration"
}
fmt.Printf("cpu: %s%s\n", cpu, aes)
bTable := []struct { bTable := []struct {
name string name string
f func(*testing.B) f func(*testing.B)