mirror of https://github.com/grpc/grpc-go.git
Add driver command line options
This commit is contained in:
parent
643486f084
commit
26b336d491
|
|
@ -27,7 +27,7 @@ type benchmarkServer struct {
|
||||||
lastResetTime time.Time
|
lastResetTime time.Time
|
||||||
}
|
}
|
||||||
|
|
||||||
func startBenchmarkServerWithSetup(setup *testpb.ServerConfig) (*benchmarkServer, error) {
|
func startBenchmarkServerWithSetup(setup *testpb.ServerConfig, serverPort int) (*benchmarkServer, error) {
|
||||||
var opts []grpc.ServerOption
|
var opts []grpc.ServerOption
|
||||||
|
|
||||||
grpclog.Printf(" - server type: %v", setup.ServerType)
|
grpclog.Printf(" - server type: %v", setup.ServerType)
|
||||||
|
|
@ -55,49 +55,43 @@ func startBenchmarkServerWithSetup(setup *testpb.ServerConfig) (*benchmarkServer
|
||||||
if setup.CoreLimit > 0 {
|
if setup.CoreLimit > 0 {
|
||||||
runtime.GOMAXPROCS(int(setup.CoreLimit))
|
runtime.GOMAXPROCS(int(setup.CoreLimit))
|
||||||
} else {
|
} else {
|
||||||
// runtime.GOMAXPROCS(runtime.NumCPU())
|
|
||||||
runtime.GOMAXPROCS(1)
|
runtime.GOMAXPROCS(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
grpclog.Printf(" - core list: %v", setup.CoreList)
|
grpclog.Printf(" - core list: %v", setup.CoreList)
|
||||||
if len(setup.CoreList) > 0 {
|
if len(setup.CoreList) > 0 {
|
||||||
// TODO core list
|
return nil, grpc.Errorf(codes.InvalidArgument, "specifying core list is not supported")
|
||||||
grpclog.Printf("specifying cores to run server on: %v", setup.CoreList)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
grpclog.Printf(" - port: %v", setup.Port)
|
grpclog.Printf(" - port: %v", setup.Port)
|
||||||
|
var port int
|
||||||
|
if setup.Port != 0 {
|
||||||
|
port = int(setup.Port)
|
||||||
|
} else if serverPort != 0 {
|
||||||
|
port = serverPort
|
||||||
|
}
|
||||||
grpclog.Printf(" - payload config: %v", setup.PayloadConfig)
|
grpclog.Printf(" - payload config: %v", setup.PayloadConfig)
|
||||||
var p int
|
var p int
|
||||||
var close func()
|
var close func()
|
||||||
if setup.PayloadConfig != nil {
|
if setup.PayloadConfig != nil {
|
||||||
// TODO payload config
|
|
||||||
grpclog.Printf("payload config: %v", setup.PayloadConfig)
|
|
||||||
switch payload := setup.PayloadConfig.Payload.(type) {
|
switch payload := setup.PayloadConfig.Payload.(type) {
|
||||||
case *testpb.PayloadConfig_BytebufParams:
|
case *testpb.PayloadConfig_BytebufParams:
|
||||||
opts = append(opts, grpc.CustomCodec(byteBufCodec{}))
|
opts = append(opts, grpc.CustomCodec(byteBufCodec{}))
|
||||||
p, close = benchmark.StartGenericServer(":"+strconv.Itoa(int(setup.Port)), payload.BytebufParams.ReqSize, payload.BytebufParams.RespSize, opts...)
|
p, close = benchmark.StartGenericServer(":"+strconv.Itoa(port), payload.BytebufParams.ReqSize, payload.BytebufParams.RespSize, opts...)
|
||||||
case *testpb.PayloadConfig_SimpleParams:
|
case *testpb.PayloadConfig_SimpleParams:
|
||||||
p, close = benchmark.StartServer(":"+strconv.Itoa(int(setup.Port)), opts...)
|
p, close = benchmark.StartServer(":"+strconv.Itoa(port), opts...)
|
||||||
case *testpb.PayloadConfig_ComplexParams:
|
case *testpb.PayloadConfig_ComplexParams:
|
||||||
|
return nil, grpc.Errorf(codes.InvalidArgument, "unsupported payload config: %v", setup.PayloadConfig)
|
||||||
default:
|
default:
|
||||||
return nil, grpc.Errorf(codes.InvalidArgument, "unknow payload config: %v", setup.PayloadConfig)
|
return nil, grpc.Errorf(codes.InvalidArgument, "unknow payload config: %v", setup.PayloadConfig)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// Start protobuf server is payload config is nil
|
// Start protobuf server is payload config is nil
|
||||||
p, close = benchmark.StartServer(":"+strconv.Itoa(int(setup.Port)), opts...)
|
p, close = benchmark.StartServer(":"+strconv.Itoa(port), opts...)
|
||||||
}
|
}
|
||||||
|
|
||||||
grpclog.Printf("benchmark server listening at port %v", p)
|
grpclog.Printf("benchmark server listening at port %v", p)
|
||||||
|
|
||||||
// temp := strings.Split(addr, ":")
|
|
||||||
// if len(temp) <= 0 {
|
|
||||||
// return nil, grpc.Errorf(codes.Internal, "benchmark test address not valid: %v", addr)
|
|
||||||
// }
|
|
||||||
// p, err := strconv.Atoi(temp[len(temp)-1])
|
|
||||||
// if err != nil {
|
|
||||||
// return nil, grpc.Errorf(codes.Internal, "%v", err)
|
|
||||||
// }
|
|
||||||
|
|
||||||
bs := &benchmarkServer{port: p, close: close, lastResetTime: time.Now()}
|
bs := &benchmarkServer{port: p, close: close, lastResetTime: time.Now()}
|
||||||
return bs, nil
|
return bs, nil
|
||||||
}
|
}
|
||||||
|
|
@ -109,6 +103,7 @@ func (bs *benchmarkServer) getStats() *testpb.ServerStats {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (bs *benchmarkServer) reset() {
|
func (bs *benchmarkServer) reset() {
|
||||||
|
// TODO wall time, sys time, user time
|
||||||
bs.mu.Lock()
|
bs.mu.Lock()
|
||||||
defer bs.mu.Unlock()
|
defer bs.mu.Unlock()
|
||||||
bs.lastResetTime = time.Now()
|
bs.lastResetTime = time.Now()
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,11 @@
|
||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"flag"
|
||||||
"io"
|
"io"
|
||||||
"net"
|
"net"
|
||||||
"runtime"
|
"runtime"
|
||||||
"sync"
|
"strconv"
|
||||||
|
|
||||||
"golang.org/x/net/context"
|
"golang.org/x/net/context"
|
||||||
"google.golang.org/grpc"
|
"google.golang.org/grpc"
|
||||||
|
|
@ -14,8 +15,8 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
ports = []string{":10000"}
|
driverPort = flag.Int("driver_port", 10000, "port for communication with driver")
|
||||||
// ports = []string{":10010"}
|
serverPort = flag.Int("server_port", 0, "port for operation as a server")
|
||||||
)
|
)
|
||||||
|
|
||||||
type byteBufCodec struct {
|
type byteBufCodec struct {
|
||||||
|
|
@ -36,6 +37,8 @@ func (byteBufCodec) String() string {
|
||||||
|
|
||||||
type workerServer struct {
|
type workerServer struct {
|
||||||
bs *benchmarkServer
|
bs *benchmarkServer
|
||||||
|
stop chan<- bool
|
||||||
|
serverPort int
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *workerServer) RunServer(stream testpb.WorkerService_RunServerServer) error {
|
func (s *workerServer) RunServer(stream testpb.WorkerService_RunServerServer) error {
|
||||||
|
|
@ -57,7 +60,7 @@ func (s *workerServer) RunServer(stream testpb.WorkerService_RunServerServer) er
|
||||||
case *testpb.ServerArgs_Setup:
|
case *testpb.ServerArgs_Setup:
|
||||||
grpclog.Printf("server setup received:")
|
grpclog.Printf("server setup received:")
|
||||||
|
|
||||||
bs, err := startBenchmarkServerWithSetup(t.Setup)
|
bs, err := startBenchmarkServerWithSetup(t.Setup, s.serverPort)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
@ -100,25 +103,25 @@ func (s *workerServer) QuitWorker(ctx context.Context, in *testpb.Void) (*testpb
|
||||||
if s.bs != nil {
|
if s.bs != nil {
|
||||||
s.bs.close()
|
s.bs.close()
|
||||||
}
|
}
|
||||||
|
s.stop <- true
|
||||||
return &testpb.Void{}, nil
|
return &testpb.Void{}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
var wg sync.WaitGroup
|
flag.Parse()
|
||||||
wg.Add(len(ports))
|
lis, err := net.Listen("tcp", ":"+strconv.Itoa(*driverPort))
|
||||||
for i := 0; i < len(ports); i++ {
|
|
||||||
lis, err := net.Listen("tcp", ports[i])
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
grpclog.Fatalf("failed to listen: %v", err)
|
grpclog.Fatalf("failed to listen: %v", err)
|
||||||
}
|
}
|
||||||
grpclog.Printf("worker %d listening at port %v", i, ports[i])
|
grpclog.Printf("worker listening at port %v", *driverPort)
|
||||||
|
|
||||||
s := grpc.NewServer()
|
s := grpc.NewServer()
|
||||||
testpb.RegisterWorkerServiceServer(s, &workerServer{})
|
stop := make(chan bool)
|
||||||
go func() {
|
testpb.RegisterWorkerServiceServer(s, &workerServer{
|
||||||
defer wg.Done()
|
stop: stop,
|
||||||
s.Serve(lis)
|
serverPort: *serverPort,
|
||||||
}()
|
})
|
||||||
}
|
go s.Serve(lis)
|
||||||
wg.Wait()
|
<-stop
|
||||||
|
s.Stop()
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue