Add a lot more timing data. (#518)
This commit is contained in:
parent
9ab66560db
commit
170e0a2d94
|
|
@ -24,6 +24,8 @@ import (
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"github.com/GoogleContainerTools/kaniko/pkg/timing"
|
||||||
|
|
||||||
"github.com/GoogleContainerTools/kaniko/pkg/buildcontext"
|
"github.com/GoogleContainerTools/kaniko/pkg/buildcontext"
|
||||||
"github.com/GoogleContainerTools/kaniko/pkg/config"
|
"github.com/GoogleContainerTools/kaniko/pkg/config"
|
||||||
"github.com/GoogleContainerTools/kaniko/pkg/constants"
|
"github.com/GoogleContainerTools/kaniko/pkg/constants"
|
||||||
|
|
@ -87,6 +89,21 @@ var RootCmd = &cobra.Command{
|
||||||
if err := executor.DoPush(image, opts); err != nil {
|
if err := executor.DoPush(image, opts); err != nil {
|
||||||
exit(errors.Wrap(err, "error pushing image"))
|
exit(errors.Wrap(err, "error pushing image"))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
benchmarkFile := os.Getenv("BENCHMARK_FILE")
|
||||||
|
// false is a keyword for integration tests to turn off benchmarking
|
||||||
|
if benchmarkFile != "" && benchmarkFile != "false" {
|
||||||
|
f, err := os.Create(benchmarkFile)
|
||||||
|
if err != nil {
|
||||||
|
logrus.Warnf("Unable to create benchmarking file %s: %s", benchmarkFile, err)
|
||||||
|
}
|
||||||
|
defer f.Close()
|
||||||
|
s, err := timing.JSON()
|
||||||
|
if err != nil {
|
||||||
|
logrus.Warnf("Unable to write benchmark file: %s", err)
|
||||||
|
}
|
||||||
|
f.WriteString(s)
|
||||||
|
}
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -382,20 +382,6 @@ func DoBuild(opts *config.KanikoOptions) (v1.Image, error) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
timing.DefaultRun.Stop(t)
|
timing.DefaultRun.Stop(t)
|
||||||
benchmarkFile := os.Getenv("BENCHMARK_FILE")
|
|
||||||
// false is a keyword for integration tests to turn off benchmarking
|
|
||||||
if benchmarkFile != "" && benchmarkFile != "false" {
|
|
||||||
f, err := os.Create(benchmarkFile)
|
|
||||||
if err != nil {
|
|
||||||
logrus.Warnf("Unable to create benchmarking file %s: %s", benchmarkFile, err)
|
|
||||||
}
|
|
||||||
defer f.Close()
|
|
||||||
s, err := timing.JSON()
|
|
||||||
if err != nil {
|
|
||||||
logrus.Warnf("Unable to write benchmark file: %s", err)
|
|
||||||
}
|
|
||||||
f.WriteString(s)
|
|
||||||
}
|
|
||||||
return sourceImage, nil
|
return sourceImage, nil
|
||||||
}
|
}
|
||||||
if stage.SaveStage {
|
if stage.SaveStage {
|
||||||
|
|
|
||||||
|
|
@ -25,6 +25,7 @@ import (
|
||||||
"github.com/GoogleContainerTools/kaniko/pkg/cache"
|
"github.com/GoogleContainerTools/kaniko/pkg/cache"
|
||||||
"github.com/GoogleContainerTools/kaniko/pkg/config"
|
"github.com/GoogleContainerTools/kaniko/pkg/config"
|
||||||
"github.com/GoogleContainerTools/kaniko/pkg/constants"
|
"github.com/GoogleContainerTools/kaniko/pkg/constants"
|
||||||
|
"github.com/GoogleContainerTools/kaniko/pkg/timing"
|
||||||
"github.com/GoogleContainerTools/kaniko/pkg/version"
|
"github.com/GoogleContainerTools/kaniko/pkg/version"
|
||||||
"github.com/google/go-containerregistry/pkg/authn"
|
"github.com/google/go-containerregistry/pkg/authn"
|
||||||
"github.com/google/go-containerregistry/pkg/authn/k8schain"
|
"github.com/google/go-containerregistry/pkg/authn/k8schain"
|
||||||
|
|
@ -53,6 +54,7 @@ func DoPush(image v1.Image, opts *config.KanikoOptions) error {
|
||||||
logrus.Info("Skipping push to container registry due to --no-push flag")
|
logrus.Info("Skipping push to container registry due to --no-push flag")
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
t := timing.Start("Total Push Time")
|
||||||
destRefs := []name.Tag{}
|
destRefs := []name.Tag{}
|
||||||
for _, destination := range opts.Destinations {
|
for _, destination := range opts.Destinations {
|
||||||
destRef, err := name.NewTag(destination, name.WeakValidation)
|
destRef, err := name.NewTag(destination, name.WeakValidation)
|
||||||
|
|
@ -103,6 +105,7 @@ func DoPush(image v1.Image, opts *config.KanikoOptions) error {
|
||||||
return errors.Wrap(err, fmt.Sprintf("failed to push to destination %s", destRef))
|
return errors.Wrap(err, fmt.Sprintf("failed to push to destination %s", destRef))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
timing.DefaultRun.Stop(t)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -23,6 +23,7 @@ import (
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
|
"github.com/GoogleContainerTools/kaniko/pkg/timing"
|
||||||
"github.com/GoogleContainerTools/kaniko/pkg/util"
|
"github.com/GoogleContainerTools/kaniko/pkg/util"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
@ -124,6 +125,8 @@ func (l *LayeredMap) Add(s string) error {
|
||||||
// was added.
|
// was added.
|
||||||
func (l *LayeredMap) MaybeAdd(s string) (bool, error) {
|
func (l *LayeredMap) MaybeAdd(s string) (bool, error) {
|
||||||
oldV, ok := l.Get(s)
|
oldV, ok := l.Get(s)
|
||||||
|
t := timing.Start("Hashing files")
|
||||||
|
defer timing.DefaultRun.Stop(t)
|
||||||
newV, err := l.hasher(s)
|
newV, err := l.hasher(s)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return false, err
|
return false, err
|
||||||
|
|
|
||||||
|
|
@ -22,6 +22,8 @@ import (
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"syscall"
|
"syscall"
|
||||||
|
|
||||||
|
"github.com/GoogleContainerTools/kaniko/pkg/timing"
|
||||||
|
|
||||||
"github.com/karrick/godirwalk"
|
"github.com/karrick/godirwalk"
|
||||||
|
|
||||||
"github.com/GoogleContainerTools/kaniko/pkg/constants"
|
"github.com/GoogleContainerTools/kaniko/pkg/constants"
|
||||||
|
|
@ -141,6 +143,7 @@ func (s *Snapshotter) TakeSnapshotFS() (string, error) {
|
||||||
t := util.NewTar(f)
|
t := util.NewTar(f)
|
||||||
defer t.Close()
|
defer t.Close()
|
||||||
|
|
||||||
|
timer := timing.Start("Walking filesystem")
|
||||||
// Save the fs state in a map to iterate over later.
|
// Save the fs state in a map to iterate over later.
|
||||||
memFs := map[string]*godirwalk.Dirent{}
|
memFs := map[string]*godirwalk.Dirent{}
|
||||||
godirwalk.Walk(s.directory, &godirwalk.Options{
|
godirwalk.Walk(s.directory, &godirwalk.Options{
|
||||||
|
|
@ -158,6 +161,7 @@ func (s *Snapshotter) TakeSnapshotFS() (string, error) {
|
||||||
Unsorted: true,
|
Unsorted: true,
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
timing.DefaultRun.Stop(timer)
|
||||||
|
|
||||||
// First handle whiteouts
|
// First handle whiteouts
|
||||||
for p := range memFs {
|
for p := range memFs {
|
||||||
|
|
@ -176,6 +180,7 @@ func (s *Snapshotter) TakeSnapshotFS() (string, error) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
timer = timing.Start("Writing tar file")
|
||||||
// Now create the tar.
|
// Now create the tar.
|
||||||
for path := range memFs {
|
for path := range memFs {
|
||||||
whitelisted, err := util.CheckWhitelist(path)
|
whitelisted, err := util.CheckWhitelist(path)
|
||||||
|
|
@ -198,6 +203,7 @@ func (s *Snapshotter) TakeSnapshotFS() (string, error) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
timing.DefaultRun.Stop(timer)
|
||||||
|
|
||||||
return f.Name(), nil
|
return f.Name(), nil
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -39,11 +39,11 @@ type TimedRun struct {
|
||||||
// Stop stops the specified timer and increments the time spent in that category.
|
// Stop stops the specified timer and increments the time spent in that category.
|
||||||
func (tr *TimedRun) Stop(t *Timer) {
|
func (tr *TimedRun) Stop(t *Timer) {
|
||||||
stop := currentTimeFunc()
|
stop := currentTimeFunc()
|
||||||
|
tr.cl.Lock()
|
||||||
|
defer tr.cl.Unlock()
|
||||||
if _, ok := tr.categories[t.category]; !ok {
|
if _, ok := tr.categories[t.category]; !ok {
|
||||||
tr.categories[t.category] = 0
|
tr.categories[t.category] = 0
|
||||||
}
|
}
|
||||||
tr.cl.Lock()
|
|
||||||
defer tr.cl.Unlock()
|
|
||||||
tr.categories[t.category] += stop.Sub(t.startTime)
|
tr.categories[t.category] += stop.Sub(t.startTime)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue