diff options
Diffstat (limited to 'internal/speed')
-rw-r--r-- | internal/speed/cpuinfo.go | 54 | ||||
-rw-r--r-- | internal/speed/speed.go | 10 |
2 files changed, 64 insertions, 0 deletions
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) |