-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:
parent
61e37b2439
commit
2d0ba24eca
13
README.md
13
README.md
@ -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
54
internal/speed/cpuinfo.go
Normal 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 ""
|
||||||
|
}
|
@ -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)
|
||||||
|
Loading…
Reference in New Issue
Block a user