]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/pack: buffer writes in TestLargeDefs
authorAnthony Martin <ality@pbrane.org>
Fri, 16 May 2014 03:12:06 +0000 (20:12 -0700)
committerRob Pike <r@golang.org>
Fri, 16 May 2014 03:12:06 +0000 (20:12 -0700)
TestLargeDefs was issuing over one million small writes to
create a 7MB file (large.go). This is quite slow on Plan 9
since our disk file systems aren't very fast and they're
usually accessed over the network.

Buffering the writes makes the test about six times faster.
Even on Linux, it's about 1.5 times faster.

Here are the results on a slow Plan 9 machine:

Before:
        % ./pack.test -test.v -test.run TestLargeDefs
        === RUN TestLargeDefs
        --- PASS: TestLargeDefs (125.11 seconds)
        PASS

After:
        % ./pack.test -test.v -test.run TestLargeDefs
        === RUN TestLargeDefs
        --- PASS: TestLargeDefs (20.835 seconds)
        PASS

LGTM=iant
R=golang-codereviews, iant
CC=golang-codereviews
https://golang.org/cl/95040044

src/cmd/pack/pack_test.go

index 8ecca98e6375dd3f73103cba3831d5e1949ccfed..e634c86f767f2ace2a0214aaae07a21ec371cfdb 100644 (file)
@@ -5,6 +5,7 @@
 package main
 
 import (
+       "bufio"
        "bytes"
        "fmt"
        "io"
@@ -223,9 +224,10 @@ func TestLargeDefs(t *testing.T) {
        if err != nil {
                t.Fatal(err)
        }
+       b := bufio.NewWriter(f)
 
        printf := func(format string, args ...interface{}) {
-               _, err := fmt.Fprintf(f, format, args...)
+               _, err := fmt.Fprintf(b, format, args...)
                if err != nil {
                        t.Fatalf("Writing to %s: %v", large, err)
                }
@@ -240,6 +242,9 @@ func TestLargeDefs(t *testing.T) {
                printf("\"`\n")
        }
        printf("}\n")
+       if err = b.Flush(); err != nil {
+               t.Fatal(err)
+       }
        if err = f.Close(); err != nil {
                t.Fatal(err)
        }