mirror of
https://github.com/golang/go
synced 2024-11-18 11:24:41 -07:00
cmd/compilebench: add object file size to package benchmarks
Protected by flag -obj. Sample relevant output from compilecmp using this commit. name old obj-bytes new obj-bytes delta Template 382k ± 0% 381k ± 0% -0.23% (p=0.002 n=6+6) Unicode 203k ± 0% 203k ± 0% -0.00% (p=0.002 n=6+6) GoTypes 1.18M ± 0% 1.17M ± 0% -0.08% (p=0.002 n=6+6) Compiler 3.99M ± 0% 3.99M ± 0% -0.08% (p=0.002 n=6+6) SSA 8.28M ± 0% 8.28M ± 0% -0.02% (p=0.002 n=6+6) Flate 230k ± 0% 230k ± 0% -0.05% (p=0.002 n=6+6) GoParser 287k ± 0% 287k ± 0% -0.16% (p=0.002 n=6+6) Reflect 1.00M ± 0% 1.00M ± 0% -0.01% (p=0.002 n=6+6) Tar 190k ± 0% 189k ± 0% -0.24% (p=0.002 n=6+6) XML 416k ± 0% 415k ± 0% -0.16% (p=0.002 n=6+6) name old export-bytes new export-bytes delta Template 19.0k ± 0% 18.2k ± 0% -4.55% (p=0.002 n=6+6) Unicode 4.45k ± 0% 4.44k ± 0% -0.11% (p=0.002 n=6+6) GoTypes 29.7k ± 0% 28.8k ± 0% -3.12% (p=0.002 n=6+6) Compiler 75.6k ± 0% 72.5k ± 0% -4.03% (p=0.002 n=6+6) SSA 76.2k ± 0% 74.8k ± 0% -1.72% (p=0.002 n=6+6) Flate 4.98k ± 0% 4.87k ± 0% -2.29% (p=0.002 n=6+6) GoParser 8.81k ± 0% 8.34k ± 0% -5.30% (p=0.002 n=6+6) Reflect 6.25k ± 0% 6.16k ± 0% -1.49% (p=0.002 n=6+6) Tar 9.49k ± 0% 9.03k ± 0% -4.82% (p=0.002 n=6+6) XML 16.0k ± 0% 15.4k ± 0% -4.03% (p=0.002 n=6+6) Change-Id: I3f5e6ec022cb02ad6937f7859c573ca1edc39fb7 Reviewed-on: https://go-review.googlesource.com/41053 Reviewed-by: Robert Griesemer <gri@golang.org>
This commit is contained in:
parent
c853fd5769
commit
7745887299
@ -34,6 +34,9 @@
|
||||
// -memprofilerate rate
|
||||
// Set runtime.MemProfileRate during compilation.
|
||||
//
|
||||
// -obj
|
||||
// Report object file statistics.
|
||||
//
|
||||
// -run regexp
|
||||
// Only run benchmarks with names matching regexp.
|
||||
//
|
||||
@ -60,6 +63,7 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"flag"
|
||||
"fmt"
|
||||
"go/build"
|
||||
@ -84,6 +88,7 @@ var (
|
||||
|
||||
var (
|
||||
flagAlloc = flag.Bool("alloc", false, "report allocations")
|
||||
flagObj = flag.Bool("obj", false, "report object file stats")
|
||||
flagCompiler = flag.String("compile", "", "use `exe` as the cmd/compile binary")
|
||||
flagCompilerFlags = flag.String("compileflags", "", "additional `flags` to pass to compile")
|
||||
flagRun = flag.String("run", "", "run benchmarks matching `regexp`")
|
||||
@ -268,7 +273,7 @@ func runBuild(name, dir string, count int) {
|
||||
}
|
||||
end := time.Now()
|
||||
|
||||
var allocs, bytes int64
|
||||
var allocs, allocbytes int64
|
||||
if *flagAlloc || *flagMemprofile != "" {
|
||||
out, err := ioutil.ReadFile(pkg.Dir + "/_compilebench_.memprof")
|
||||
if err != nil {
|
||||
@ -285,7 +290,7 @@ func runBuild(name, dir string, count int) {
|
||||
}
|
||||
switch f[1] {
|
||||
case "TotalAlloc":
|
||||
bytes = val
|
||||
allocbytes = val
|
||||
case "Mallocs":
|
||||
allocs = val
|
||||
}
|
||||
@ -317,11 +322,25 @@ func runBuild(name, dir string, count int) {
|
||||
wallns := end.Sub(start).Nanoseconds()
|
||||
userns := cmd.ProcessState.UserTime().Nanoseconds()
|
||||
|
||||
fmt.Printf("%s 1 %d ns/op %d user-ns/op", name, wallns, userns)
|
||||
if *flagAlloc {
|
||||
fmt.Printf("%s 1 %d ns/op %d user-ns/op %d B/op %d allocs/op\n", name, wallns, userns, bytes, allocs)
|
||||
} else {
|
||||
fmt.Printf("%s 1 %d ns/op %d user-ns/op\n", name, wallns, userns)
|
||||
fmt.Printf(" %d B/op %d allocs/op", allocbytes, allocs)
|
||||
}
|
||||
|
||||
os.Remove(pkg.Dir + "/_compilebench_.o")
|
||||
opath := pkg.Dir + "/_compilebench_.o"
|
||||
if *flagObj {
|
||||
// TODO(josharian): object files are big; just read enough to find what we seek.
|
||||
data, err := ioutil.ReadFile(opath)
|
||||
if err != nil {
|
||||
log.Print(err)
|
||||
}
|
||||
// Find start of export data.
|
||||
i := bytes.Index(data, []byte("\n$$B\n")) + len("\n$$B\n")
|
||||
// Count bytes to end of export data.
|
||||
nexport := bytes.Index(data[i:], []byte("\n$$\n"))
|
||||
fmt.Printf(" %d object-bytes %d export-bytes", len(data), nexport)
|
||||
}
|
||||
fmt.Println()
|
||||
|
||||
os.Remove(opath)
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user