golang/go

cmd/link: combining dwarf on darwin can be very slow

Open

#12,259 opened on Aug 21, 2015

View on GitHub
 (28 comments) (1 reaction) (0 assignees)Go (19,008 forks)batch import
NeedsFixOS-DarwinToolSpeedearly-in-cyclehelp wanted

Repository metrics

Stars
 (133,883 stars)
PR merge metrics
 (No merged PRs in 30d)

Description

I'm noticing ~15x increase in build time when switched to go 1.5. It is somehow connected with a package github.com/ry/v8worker - binding for v8 javascript engine. I'm building on OS X.

This is a trivial program:

package main
import _ "github.com/ry/v8worker"

func main() {
}

1.4 build time: real 0m1.075s user 0m0.964s sys 0m0.108s

1.5 build time: real 0m16.816s user 0m16.225s sys 0m1.226s

Go 1.5 spends almost all of the time on the link step: /usr/local/Cellar/go/1.5/libexec/pkg/tool/darwin_amd64/link -o $WORK/slow_build/_obj/exe/a.out -L $WORK -L /Users/ianic/work/web/src/golang/pkg/darwin_amd64 -extld=clang++ -buildmode=exe -buildid=14ca37ec220e553c7bf9829fe97751df5a041f5f $WORK/slow_build.a

1.4 output for: time go build -v -x WORK=/var/folders/dx/p9b300dd27dcbqcrz0h9kn800000gn/T/go-build829145301 slow_build mkdir -p $WORK/slow_build/_obj/ mkdir -p $WORK/slow_build/_obj/exe/ cd /Users/ianic/work/web/src/golang/src/slow_build /usr/local/Cellar/go/1.4.2/libexec/pkg/tool/darwin_amd64/6g -o $WORK/slow_build.a -trimpath $WORK -p slow_build -complete -D _/Users/ianic/work/web/src/golang/src/slow_build -I $WORK -I /Users/ianic/work/web/src/golang/pkg/darwin_amd64 -pack ./main.go cd . /usr/local/Cellar/go/1.4.2/libexec/pkg/tool/darwin_amd64/6l -o $WORK/slow_build/_obj/exe/a.out -L $WORK -L /Users/ianic/work/web/src/golang/pkg/darwin_amd64 -extld=clang++ $WORK/slow_build.a mv $WORK/slow_build/_obj/exe/a.out slow_build

real 0m1.075s user 0m0.964s sys 0m0.108s

1.5 output for: time go build -v -x WORK=/var/folders/dx/p9b300dd27dcbqcrz0h9kn800000gn/T/go-build145414805 slow_build mkdir -p $WORK/slow_build/_obj/ mkdir -p $WORK/slow_build/_obj/exe/ cd /Users/ianic/work/web/src/golang/src/slow_build /usr/local/Cellar/go/1.5/libexec/pkg/tool/darwin_amd64/compile -o $WORK/slow_build.a -trimpath $WORK -p main -complete -buildid 14ca37ec220e553c7bf9829fe97751df5a041f5f -D _/Users/ianic/work/web/src/golang/src/slow_build -I $WORK -I /Users/ianic/work/web/src/golang/pkg/darwin_amd64 -pack ./main.go cd . /usr/local/Cellar/go/1.5/libexec/pkg/tool/darwin_amd64/link -o $WORK/slow_build/_obj/exe/a.out -L $WORK -L /Users/ianic/work/web/src/golang/pkg/darwin_amd64 -extld=clang++ -buildmode=exe -buildid=14ca37ec220e553c7bf9829fe97751df5a041f5f $WORK/slow_build.a mv $WORK/slow_build/_obj/exe/a.out slow_build

real 0m16.816s user 0m16.225s sys 0m1.226s

Contributor guide