]> Cypherpunks repositories - gostls13.git/commitdiff
misc/benchcmp: show memory statistics, when available
authorJeff R. Allen <jra@nella.org>
Fri, 2 Nov 2012 18:13:51 +0000 (02:13 +0800)
committerShenghou Ma <minux.ma@gmail.com>
Fri, 2 Nov 2012 18:13:51 +0000 (02:13 +0800)
R=minux.ma, dave, extraterrestrial.neighbour, rsc
CC=golang-dev
https://golang.org/cl/6587069

misc/benchcmp

index 015e7d2b28fd107e15dec4c3cf640af873c5ad3d..b98ee2b2ff6d80105e516a98fbccfd9e5cf9db0d 100755 (executable)
@@ -7,8 +7,13 @@ case "$1" in
 -*)    
        echo 'usage: benchcmp old.txt new.txt' >&2
        echo >&2
-       echo 'Each input file should be go test -test.run=NONE -test.bench=. > [old,new].txt' >&2
+       echo 'Each input file should be from:' >&2
+       echo '  go test -test.run=NONE -test.bench=. > [old,new].txt' >&2
+       echo >&2
        echo 'Benchcmp compares the first and last for each benchmark.' >&2
+       echo >&2
+       echo 'If -test.benchmem=true is added to the "go test" command' >&2
+       echo 'benchcmp will also compare memory allocations.' >&2
        exit 2
 esac
 
@@ -27,10 +32,21 @@ $1 ~ /Benchmark/ && $4 == "ns/op" {
                new[$1] = $3
                if($6 == "MB/s")
                        newmb[$1] = $5
+
+               # allocs/op might be at $8 or $10 depending on if
+               # SetBytes was used or not.
+               if($8 == "allocs/op")
+                       newalloc[$1] = $7
+               if($10 == "allocs/op")
+                       newalloc[$1] = $9
        } else {
                old[$1] = $3
-               if($6 = "MB/s")
+               if($6 == "MB/s")
                        oldmb[$1] = $5
+               if($8 == "allocs/op")
+                       oldalloc[$1] = $7
+               if($10 == "allocs/op")
+                       oldalloc[$1] = $9
        }
 }
 
@@ -62,5 +78,21 @@ END {
                        sprintf("%.2f", newmb[what]),
                        sprintf("%.2f", newmb[what]/oldmb[what]))
        }
+
+       # print allocs
+       anyalloc = 0
+       for(i=0; i<n; i++) {
+               what = name[i]
+               if(!(what in newalloc))
+                       continue
+               if(anyalloc++ == 0)
+                       printf("\n%-*s %12s %12s  %7s\n", len, "benchmark", "old allocs", "new allocs", "delta")
+               if(oldalloc[what] == 0)
+                       delta="n/a"
+               else
+                       delta=sprintf("%.2f", 100*newalloc[what]/oldalloc[what]-100)
+               printf("%-*s %12d %12d  %6s%%\n", len, what,
+                       oldalloc[what], newalloc[what], delta)
+       }
 }
 ' "$@"