libgocryptfs/internal/speed/cpuinfo.go

55 lines
1.1 KiB
Go

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 ""
}