Browse Source

cmd/syncthing: Report real hashing performance, including weakhash

Instead of

    [I6KAH] 19:05:56 INFO: Single thread hash performance is 359 MB/s using minio/sha256-simd (354 MB/s using crypto/sha256).

it now says

    [I6KAH] 19:06:16 INFO: Single thread SHA256 performance is 359 MB/s using minio/sha256-simd (354 MB/s using crypto/sha256).
    [I6KAH] 19:06:17 INFO: Actual hashing performance is 299.01 MB/s

which is more informative. This is also the number it reports in usage
reporting.

GitHub-Pull-Request: https://github.com/syncthing/syncthing/pull/3918
Jakob Borg 8 years ago
parent
commit
6d4fa27ea7
3 changed files with 12 additions and 8 deletions
  1. 2 0
      cmd/syncthing/main.go
  2. 9 7
      cmd/syncthing/usage_report.go
  3. 1 1
      lib/sha256/sha256.go

+ 2 - 0
cmd/syncthing/main.go

@@ -613,6 +613,8 @@ func syncthingMain(runtimeOptions RuntimeOptions) {
 
 	sha256.SelectAlgo()
 	sha256.Report()
+	perf := cpuBench(3, 150*time.Millisecond)
+	l.Infof("Actual hashing performance is %.02f MB/s", perf)
 
 	// Emit the Starting event, now that we know who we are.
 

+ 9 - 7
cmd/syncthing/usage_report.go

@@ -22,7 +22,7 @@ import (
 	"github.com/syncthing/syncthing/lib/dialer"
 	"github.com/syncthing/syncthing/lib/model"
 	"github.com/syncthing/syncthing/lib/protocol"
-	"github.com/syncthing/syncthing/lib/sha256"
+	"github.com/syncthing/syncthing/lib/scanner"
 	"github.com/syncthing/syncthing/lib/upgrade"
 	"github.com/thejerf/suture"
 )
@@ -291,22 +291,24 @@ func cpuBench(iterations int, duration time.Duration) float64 {
 			perf = v
 		}
 	}
+	blocksResult = nil
 	return perf
 }
 
+var blocksResult []protocol.BlockInfo // so the result is not optimized away
+
 func cpuBenchOnce(duration time.Duration) float64 {
-	chunkSize := 100 * 1 << 10
-	h := sha256.New()
-	bs := make([]byte, chunkSize)
+	dataSize := 16 * protocol.BlockSize
+	bs := make([]byte, dataSize)
 	rand.Reader.Read(bs)
 
 	t0 := time.Now()
 	b := 0
 	for time.Since(t0) < duration {
-		h.Write(bs)
-		b += chunkSize
+		r := bytes.NewReader(bs)
+		blocksResult, _ = scanner.Blocks(r, protocol.BlockSize, int64(dataSize), nil, true)
+		b += dataSize
 	}
-	h.Sum(nil)
 	d := time.Since(t0)
 	return float64(int(float64(b)/d.Seconds()/(1<<20)*100)) / 100
 }

+ 1 - 1
lib/sha256/sha256.go

@@ -89,7 +89,7 @@ func Report() {
 		otherImpl = defaultImpl
 	}
 
-	l.Infof("Single thread hash performance is %s using %s (%s using %s).", formatRate(selectedRate), selectedImpl, formatRate(otherRate), otherImpl)
+	l.Infof("Single thread SHA256 performance is %s using %s (%s using %s).", formatRate(selectedRate), selectedImpl, formatRate(otherRate), otherImpl)
 }
 
 func selectMinio() {