Skip to content

Commit

Permalink
Add the standalone benchmark client
Browse files Browse the repository at this point in the history
  • Loading branch information
iamqizhao committed Apr 29, 2015
1 parent 9f83f47 commit c0ead53
Showing 1 changed file with 72 additions and 0 deletions.
72 changes: 72 additions & 0 deletions benchmark/client/main.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
package main

import (
"flag"
"math"
"sync"
"time"

"fmt"

"google.golang.org/grpc/benchmark"
"google.golang.org/grpc/benchmark/stats"
testpb "google.golang.org/grpc/interop/grpc_testing"
)

var (
server = flag.String("server", "", "The server address")
maxConcurrentRPCs = flag.Int("max_concurrent_rpcs", 1, "The max number of concurrent RPCs")
duration = flag.Int("duration", math.MaxInt32, "The duration in seconds to run the benchmark client")
)

func caller(client testpb.TestServiceClient) {
benchmark.DoUnaryCall(client, 1, 1)
}

func closeLoop() {
s := stats.NewStats(256)
conn := benchmark.NewClientConn(*server)
tc := testpb.NewTestServiceClient(conn)
// Warm up connection.
for i := 0; i < 100; i++ {
caller(tc)
}
ch := make(chan int, *maxConcurrentRPCs*4)
var wg sync.WaitGroup
wg.Add(*maxConcurrentRPCs)

// Distribute RPCs over maxConcurrentCalls workers.
for i := 0; i < *maxConcurrentRPCs; i++ {
go func() {
for _ = range ch {
caller(tc)
}
wg.Done()
}()
}
// Stop the client when time is up.
done := make(chan struct{})
go func() {
<-time.After(time.Duration(*duration) * time.Second)
close(done)
}()
ok := true
for ok {
start := time.Now()
select {
case ch <-0:
s.Add(time.Since(start))
case <-done:
ok = false
}
}
close(ch)
wg.Wait()
conn.Close()
fmt.Println(s.String())
}

func main() {
flag.Parse()
closeLoop()
}

0 comments on commit c0ead53

Please sign in to comment.