diff options
| -rw-r--r-- | README.md | 13 | ||||
| -rw-r--r-- | internal/speed/cpuinfo.go | 54 | ||||
| -rw-r--r-- | internal/speed/speed.go | 10 | 
3 files changed, 71 insertions, 6 deletions
| @@ -168,12 +168,13 @@ Example for a CPU with AES-NI:  ```  $ ./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 -AES-GCM-256-OpenSSL          868.09 MB/s -AES-GCM-256-Go               997.97 MB/s  (selected in auto mode) -AES-SIV-512-Go               160.72 MB/s -XChaCha20-Poly1305-OpenSSL   722.14 MB/s -XChaCha20-Poly1305-Go        841.89 MB/s  (selected in auto mode) +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)  ```  You can run `./benchmark.bash` to run gocryptfs' canonical set of diff --git a/internal/speed/cpuinfo.go b/internal/speed/cpuinfo.go new file mode 100644 index 0000000..09e7a89 --- /dev/null +++ b/internal/speed/cpuinfo.go @@ -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 "" +} diff --git a/internal/speed/speed.go b/internal/speed/speed.go index 231a982..0b1a51a 100644 --- a/internal/speed/speed.go +++ b/internal/speed/speed.go @@ -27,6 +27,16 @@ const blockSize = 4096  // Run - run the speed the test and print the results.  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 {  		name      string  		f         func(*testing.B) | 
