diff options
| author | Chris Lu <chris.lu@gmail.com> | 2014-11-30 21:55:53 -0800 |
|---|---|---|
| committer | Chris Lu <chris.lu@gmail.com> | 2014-11-30 21:55:53 -0800 |
| commit | 6c5a3d3dbfc3e801c962bd650cfd4455483cc63c (patch) | |
| tree | 75aa29502532d07757467a1b909e23e5e8caba88 /go | |
| parent | ca67ed69a1e80bd1166105fb8a08d8c5b4f9c83f (diff) | |
| download | seaweedfs-6c5a3d3dbfc3e801c962bd650cfd4455483cc63c.tar.xz seaweedfs-6c5a3d3dbfc3e801c962bd650cfd4455483cc63c.zip | |
Increase performance by reusing []byte, reducing GC.
Diffstat (limited to 'go')
| -rw-r--r-- | go/weed/benchmark.go | 23 |
1 files changed, 22 insertions, 1 deletions
diff --git a/go/weed/benchmark.go b/go/weed/benchmark.go index e5cf831c6..f88d0d6a9 100644 --- a/go/weed/benchmark.go +++ b/go/weed/benchmark.go @@ -33,10 +33,12 @@ type BenchmarkOptions struct { cpuprofile *string maxCpu *int vid2server map[string]string //cache for vid locations + } var ( - b BenchmarkOptions + b BenchmarkOptions + sharedBytes []byte ) func init() { @@ -55,6 +57,7 @@ func init() { b.cpuprofile = cmdBenchmark.Flag.String("cpuprofile", "", "cpu profile output file") b.maxCpu = cmdBenchmark.Flag.Int("maxCpu", 0, "maximum number of CPUs. 0 means all available CPUs") b.vid2server = make(map[string]string) + sharedBytes = make([]byte, 1024) } var cmdBenchmark = &Command{ @@ -512,6 +515,23 @@ func (l *FakeReader) Read(p []byte) (n int, err error) { return } +func (l *FakeReader) WriteTo(w io.Writer) (n int64, err error) { + size := int(l.size) + bufferSize := len(sharedBytes) + for size > 0 { + tempBuffer := sharedBytes + if size < bufferSize { + tempBuffer = sharedBytes[0:size] + } + count, e := w.Write(tempBuffer) + if e != nil { + return int64(size), e + } + size -= count + } + return l.size, nil +} + func Readln(r *bufio.Reader) ([]byte, error) { var ( isPrefix bool = true @@ -524,3 +544,4 @@ func Readln(r *bufio.Reader) ([]byte, error) { } return ln, err } + |
