README

This directory contains code uses to measure the performance of the Vanadium RPC stack.


This benchmarks use Go's testing package to run benchmarks. Each benchmark involves one server and one client. The server has two very simple methods that echo the data received from the client back to the client.

  • client ---- Echo(payload) ----> server
  • client <--- return payload ---- server

There are two versions of the Echo method:

  • Echo(payload []byte) ([]byte], error)
  • EchoStream() <[]byte,[]byte> error

Microbenchmarks

benchmark_test.go

The first benchmarks use the non-streaming version of Echo with a varying payload size. The second benchmarks use the streaming version with varying number of chunks and payload sizes. The third one is for measuring the performance with multiple clients hosted in the same process.

This test creates a VC before the benchmark begins. So, the VC creation overhead is excluded.

$ jiri go test -bench=. -timeout=1h -cpu=1 -benchtime=5s v.io/x/ref/runtime/internal/rpc/benchmark
PASS
Benchmark____1B     1000           8301357 ns/op           0.00 MB/s
--- Histogram (unit: ms)
        Count: 1000  Min: 7  Max: 17  Avg: 7.89
        ------------------------------------------------------------
        [  7,   8)   505   50.5%   50.5%  #####
        [  8,   9)   389   38.9%   89.4%  ####
        [  9,  10)    38    3.8%   93.2%
        [ 10,  11)    12    1.2%   94.4%
        [ 11,  12)     4    0.4%   94.8%
        [ 12,  14)    19    1.9%   96.7%
        [ 14,  16)    23    2.3%   99.0%
        [ 16,  18)    10    1.0%  100.0%
        [ 18,  21)     0    0.0%  100.0%
        [ 21,  24)     0    0.0%  100.0%
        [ 24, inf)     0    0.0%  100.0%
Benchmark___10B     1000           8587341 ns/op           0.00 MB/s
...

RESULTS.txt has the full benchmark results.

simple/main.go

simple/main.go is a simple command-line tool to run the main benchmarks to measure RPC setup time, latency, and throughput.

$ jiri go run simple/main.go
RPC Connection  33.48 ms/rpc
RPC (echo 1000B)  1.31 ms/rpc (763.05 qps)
RPC Streaming (echo 1000B)  0.11 ms/rpc
RPC Streaming Throughput (echo 1MB) 313.91 MB/s

Client/Server

{benchmark,benchmarkd}/main.go

benchmarkd/main.go and benchmark/main.go are simple command-line tools to run the benchmark server and client as separate processes. Unlike the benchmarks above, this test includes the startup cost of name resolution, creating the VC, etc. in the first RPC.

$ jiri go run benchmarkd/main.go \
  -v23.tcp.address=localhost:8888 -v23.permissions.literal='{"Read": {"In": ["..."]}}'

(In a different shell)

$ jiri go run benchmark/main.go \
  -server=/localhost:8888 -iterations=100 -chunk_count=0 -payload_size=10
iterations: 100  chunk_count: 0  payload_size: 10
elapsed time: 1.369034277s
Histogram (unit: ms)
Count: 100  Min: 7  Max: 94  Avg: 13.17
------------------------------------------------------------
[  7,   8)    1    1.0%    1.0%
[  8,   9)    4    4.0%    5.0%
[  9,  10)   17   17.0%   22.0%  ##
[ 10,  12)   24   24.0%   46.0%  ##
[ 12,  15)   24   24.0%   70.0%  ##
[ 15,  19)   28   28.0%   98.0%  ###
[ 19,  24)    1    1.0%   99.0%
[ 24,  32)    0    0.0%   99.0%
[ 32,  42)    0    0.0%   99.0%
[ 42,  56)    0    0.0%   99.0%
[ 56,  75)    0    0.0%   99.0%
[ 75, 101)    1    1.0%  100.0%
[101, 136)    0    0.0%  100.0%
[136, 183)    0    0.0%  100.0%
[183, 247)    0    0.0%  100.0%
[247, 334)    0    0.0%  100.0%
[334, inf)    0    0.0%  100.0%

Raspberry Pi

On a Raspberry Pi, everything is much slower. The same tests show the following results:

$ ./main
RPC Connection  1765.47 ms/rpc
RPC (echo 1000B)  78.61 ms/rpc (12.72 qps)
RPC Streaming (echo 1000B)  23.85 ms/rpc
RPC Streaming Throughput (echo 1MB) 0.92 MB/s

On a Raspberry Pi 2,

$ ./main
RPC Connection  847.41 ms/rpc
RPC (echo 1000B)  16.47 ms/rpc (60.71 qps)
RPC Streaming (echo 1000B)  3.33 ms/rpc
RPC Streaming Throughput (echo 1MB) 2.31 MB/s
Expand ▾ Collapse ▴

Documentation

Overview

    package benchmark provides simple tools to measure the performance of the IPC system. nolint:golint

    Index

    Constants

    This section is empty.

    Variables

    View Source
    var BenchmarkDesc rpc.InterfaceDesc = descBenchmark

      BenchmarkDesc describes the Benchmark interface.

      Functions

      This section is empty.

      Types

      type BenchmarkClientMethods

      type BenchmarkClientMethods interface {
      	// Echo returns the payload that it receives.
      	Echo(_ *context.T, Payload []byte, _ ...rpc.CallOpt) ([]byte, error)
      	// EchoStream returns the payload that it receives via the stream.
      	EchoStream(*context.T, ...rpc.CallOpt) (BenchmarkEchoStreamClientCall, error)
      }

        BenchmarkClientMethods is the client interface containing Benchmark methods.

        type BenchmarkClientStub

        type BenchmarkClientStub interface {
        	BenchmarkClientMethods
        }

          BenchmarkClientStub embeds BenchmarkClientMethods and is a placeholder for additional management operations.

          func BenchmarkClient

          func BenchmarkClient(name string) BenchmarkClientStub

            BenchmarkClient returns a client stub for Benchmark.

            type BenchmarkEchoStreamClientCall

            type BenchmarkEchoStreamClientCall interface {
            	BenchmarkEchoStreamClientStream
            	// Finish performs the equivalent of SendStream().Close, then blocks until
            	// the server is done, and returns the positional return values for the call.
            	//
            	// Finish returns immediately if the call has been canceled; depending on the
            	// timing the output could either be an error signaling cancelation, or the
            	// valid positional return values from the server.
            	//
            	// Calling Finish is mandatory for releasing stream resources, unless the call
            	// has been canceled or any of the other methods return an error.  Finish should
            	// be called at most once.
            	Finish() error
            }

              BenchmarkEchoStreamClientCall represents the call returned from Benchmark.EchoStream.

              type BenchmarkEchoStreamClientStream

              type BenchmarkEchoStreamClientStream interface {
              	// RecvStream returns the receiver side of the Benchmark.EchoStream client stream.
              	RecvStream() interface {
              		// Advance stages an item so that it may be retrieved via Value.  Returns
              		// true iff there is an item to retrieve.  Advance must be called before
              		// Value is called.  May block if an item is not available.
              		Advance() bool
              		// Value returns the item that was staged by Advance.  May panic if Advance
              		// returned false or was not called.  Never blocks.
              		Value() []byte
              		// Err returns any error encountered by Advance.  Never blocks.
              		Err() error
              	}
              	// SendStream returns the send side of the Benchmark.EchoStream client stream.
              	SendStream() interface {
              		// Send places the item onto the output stream.  Returns errors
              		// encountered while sending, or if Send is called after Close or
              		// the stream has been canceled.  Blocks if there is no buffer
              		// space; will unblock when buffer space is available or after
              		// the stream has been canceled.
              		Send(item []byte) error
              		// Close indicates to the server that no more items will be sent;
              		// server Recv calls will receive io.EOF after all sent items.
              		// This is an optional call - e.g. a client might call Close if it
              		// needs to continue receiving items from the server after it's
              		// done sending.  Returns errors encountered while closing, or if
              		// Close is called after the stream has been canceled.  Like Send,
              		// blocks if there is no buffer space available.
              		Close() error
              	}
              }

                BenchmarkEchoStreamClientStream is the client stream for Benchmark.EchoStream.

                type BenchmarkEchoStreamServerCall

                type BenchmarkEchoStreamServerCall interface {
                	rpc.ServerCall
                	BenchmarkEchoStreamServerStream
                }

                  BenchmarkEchoStreamServerCall represents the context passed to Benchmark.EchoStream.

                  type BenchmarkEchoStreamServerCallStub

                  type BenchmarkEchoStreamServerCallStub struct {
                  	rpc.StreamServerCall
                  	// contains filtered or unexported fields
                  }

                    BenchmarkEchoStreamServerCallStub is a wrapper that converts rpc.StreamServerCall into a typesafe stub that implements BenchmarkEchoStreamServerCall.

                    func (*BenchmarkEchoStreamServerCallStub) Init

                      Init initializes BenchmarkEchoStreamServerCallStub from rpc.StreamServerCall.

                      func (*BenchmarkEchoStreamServerCallStub) RecvStream

                      func (s *BenchmarkEchoStreamServerCallStub) RecvStream() interface {
                      	Advance() bool
                      	Value() []byte
                      	Err() error
                      }

                        RecvStream returns the receiver side of the Benchmark.EchoStream server stream.

                        func (*BenchmarkEchoStreamServerCallStub) SendStream

                        func (s *BenchmarkEchoStreamServerCallStub) SendStream() interface {
                        	Send(item []byte) error
                        }

                          SendStream returns the send side of the Benchmark.EchoStream server stream.

                          type BenchmarkEchoStreamServerStream

                          type BenchmarkEchoStreamServerStream interface {
                          	// RecvStream returns the receiver side of the Benchmark.EchoStream server stream.
                          	RecvStream() interface {
                          		// Advance stages an item so that it may be retrieved via Value.  Returns
                          		// true iff there is an item to retrieve.  Advance must be called before
                          		// Value is called.  May block if an item is not available.
                          		Advance() bool
                          		// Value returns the item that was staged by Advance.  May panic if Advance
                          		// returned false or was not called.  Never blocks.
                          		Value() []byte
                          		// Err returns any error encountered by Advance.  Never blocks.
                          		Err() error
                          	}
                          	// SendStream returns the send side of the Benchmark.EchoStream server stream.
                          	SendStream() interface {
                          		// Send places the item onto the output stream.  Returns errors encountered
                          		// while sending.  Blocks if there is no buffer space; will unblock when
                          		// buffer space is available.
                          		Send(item []byte) error
                          	}
                          }

                            BenchmarkEchoStreamServerStream is the server stream for Benchmark.EchoStream.

                            type BenchmarkServerMethods

                            type BenchmarkServerMethods interface {
                            	// Echo returns the payload that it receives.
                            	Echo(_ *context.T, _ rpc.ServerCall, Payload []byte) ([]byte, error)
                            	// EchoStream returns the payload that it receives via the stream.
                            	EchoStream(*context.T, BenchmarkEchoStreamServerCall) error
                            }

                              BenchmarkServerMethods is the interface a server writer implements for Benchmark.

                              type BenchmarkServerStub

                              type BenchmarkServerStub interface {
                              	BenchmarkServerStubMethods
                              	// DescribeInterfaces the Benchmark interfaces.
                              	Describe__() []rpc.InterfaceDesc
                              }

                                BenchmarkServerStub adds universal methods to BenchmarkServerStubMethods.

                                func BenchmarkServer

                                func BenchmarkServer(impl BenchmarkServerMethods) BenchmarkServerStub

                                  BenchmarkServer returns a server stub for Benchmark. It converts an implementation of BenchmarkServerMethods into an object that may be used by rpc.Server.

                                  type BenchmarkServerStubMethods

                                  type BenchmarkServerStubMethods interface {
                                  	// Echo returns the payload that it receives.
                                  	Echo(_ *context.T, _ rpc.ServerCall, Payload []byte) ([]byte, error)
                                  	// EchoStream returns the payload that it receives via the stream.
                                  	EchoStream(*context.T, *BenchmarkEchoStreamServerCallStub) error
                                  }

                                    BenchmarkServerStubMethods is the server interface containing Benchmark methods, as expected by rpc.Server. The only difference between this interface and BenchmarkServerMethods is the streaming methods.

                                    type Caveat

                                    type Caveat struct {
                                    	Id               []byte `protobuf:"bytes,1,req,name=id" json:"id,omitempty"`
                                    	ParamVom         []byte `protobuf:"bytes,2,req,name=paramVom" json:"paramVom,omitempty"`
                                    	XXX_unrecognized []byte `json:"-"`
                                    }

                                    func (*Caveat) GetId

                                    func (m *Caveat) GetId() []byte

                                    func (*Caveat) GetParamVom

                                    func (m *Caveat) GetParamVom() []byte

                                    func (*Caveat) ProtoMessage

                                    func (*Caveat) ProtoMessage()

                                    func (*Caveat) Reset

                                    func (m *Caveat) Reset()

                                    func (*Caveat) String

                                    func (m *Caveat) String() string

                                    type Certificate

                                    type Certificate struct {
                                    	Extension        *string    `protobuf:"bytes,1,req,name=extension" json:"extension,omitempty"`
                                    	PublicKey        []byte     `protobuf:"bytes,2,req,name=publicKey" json:"publicKey,omitempty"`
                                    	Caveats          []*Caveat  `protobuf:"bytes,3,rep,name=caveats" json:"caveats,omitempty"`
                                    	Signature        *Signature `protobuf:"bytes,4,req,name=signature" json:"signature,omitempty"`
                                    	XXX_unrecognized []byte     `json:"-"`
                                    }

                                    func (*Certificate) GetCaveats

                                    func (m *Certificate) GetCaveats() []*Caveat

                                    func (*Certificate) GetExtension

                                    func (m *Certificate) GetExtension() string

                                    func (*Certificate) GetPublicKey

                                    func (m *Certificate) GetPublicKey() []byte

                                    func (*Certificate) GetSignature

                                    func (m *Certificate) GetSignature() *Signature

                                    func (*Certificate) ProtoMessage

                                    func (*Certificate) ProtoMessage()

                                    func (*Certificate) Reset

                                    func (m *Certificate) Reset()

                                    func (*Certificate) String

                                    func (m *Certificate) String() string

                                    type CertificateChain

                                    type CertificateChain struct {
                                    	Certificates     []*Certificate `protobuf:"bytes,1,rep,name=certificates" json:"certificates,omitempty"`
                                    	XXX_unrecognized []byte         `json:"-"`
                                    }

                                    func (*CertificateChain) GetCertificates

                                    func (m *CertificateChain) GetCertificates() []*Certificate

                                    func (*CertificateChain) ProtoMessage

                                    func (*CertificateChain) ProtoMessage()

                                    func (*CertificateChain) Reset

                                    func (m *CertificateChain) Reset()

                                    func (*CertificateChain) String

                                    func (m *CertificateChain) String() string

                                    type RpcRequest

                                    type RpcRequest struct {
                                    	Suffix           *string                `protobuf:"bytes,1,req,name=suffix" json:"suffix,omitempty"`
                                    	Method           *string                `protobuf:"bytes,2,req,name=method" json:"method,omitempty"`
                                    	NumPosArgs       *uint64                `protobuf:"varint,3,req,name=numPosArgs" json:"numPosArgs,omitempty"`
                                    	EndStreamArgs    *bool                  `protobuf:"varint,4,req,name=endStreamArgs" json:"endStreamArgs,omitempty"`
                                    	Deadline         *TimeWireDeadline      `protobuf:"bytes,5,req,name=deadline" json:"deadline,omitempty"`
                                    	GrantedBlessings *SecurityWireBlessings `protobuf:"bytes,6,req,name=grantedBlessings" json:"grantedBlessings,omitempty"`
                                    	TraceRequest     *VtraceRequest         `protobuf:"bytes,7,req,name=traceRequest" json:"traceRequest,omitempty"`
                                    	Language         *string                `protobuf:"bytes,8,req,name=language" json:"language,omitempty"`
                                    	XXX_unrecognized []byte                 `json:"-"`
                                    }

                                    func (*RpcRequest) GetDeadline

                                    func (m *RpcRequest) GetDeadline() *TimeWireDeadline

                                    func (*RpcRequest) GetEndStreamArgs

                                    func (m *RpcRequest) GetEndStreamArgs() bool

                                    func (*RpcRequest) GetGrantedBlessings

                                    func (m *RpcRequest) GetGrantedBlessings() *SecurityWireBlessings

                                    func (*RpcRequest) GetLanguage

                                    func (m *RpcRequest) GetLanguage() string

                                    func (*RpcRequest) GetMethod

                                    func (m *RpcRequest) GetMethod() string

                                    func (*RpcRequest) GetNumPosArgs

                                    func (m *RpcRequest) GetNumPosArgs() uint64

                                    func (*RpcRequest) GetSuffix

                                    func (m *RpcRequest) GetSuffix() string

                                    func (*RpcRequest) GetTraceRequest

                                    func (m *RpcRequest) GetTraceRequest() *VtraceRequest

                                    func (*RpcRequest) ProtoMessage

                                    func (*RpcRequest) ProtoMessage()

                                    func (*RpcRequest) Reset

                                    func (m *RpcRequest) Reset()

                                    func (*RpcRequest) String

                                    func (m *RpcRequest) String() string

                                    type RpcResponse

                                    type RpcResponse struct {
                                    	Error            *string         `protobuf:"bytes,1,opt,name=error" json:"error,omitempty"`
                                    	EndStreamResults *bool           `protobuf:"varint,2,req,name=endStreamResults" json:"endStreamResults,omitempty"`
                                    	NumPosResults    *uint64         `protobuf:"varint,3,req,name=numPosResults" json:"numPosResults,omitempty"`
                                    	TraceResponse    *VtraceResponse `protobuf:"bytes,4,req,name=traceResponse" json:"traceResponse,omitempty"`
                                    	AckBlessings     *bool           `protobuf:"varint,5,req,name=ackBlessings" json:"ackBlessings,omitempty"`
                                    	XXX_unrecognized []byte          `json:"-"`
                                    }

                                    func (*RpcResponse) GetAckBlessings

                                    func (m *RpcResponse) GetAckBlessings() bool

                                    func (*RpcResponse) GetEndStreamResults

                                    func (m *RpcResponse) GetEndStreamResults() bool

                                    func (*RpcResponse) GetError

                                    func (m *RpcResponse) GetError() string

                                    func (*RpcResponse) GetNumPosResults

                                    func (m *RpcResponse) GetNumPosResults() uint64

                                    func (*RpcResponse) GetTraceResponse

                                    func (m *RpcResponse) GetTraceResponse() *VtraceResponse

                                    func (*RpcResponse) ProtoMessage

                                    func (*RpcResponse) ProtoMessage()

                                    func (*RpcResponse) Reset

                                    func (m *RpcResponse) Reset()

                                    func (*RpcResponse) String

                                    func (m *RpcResponse) String() string

                                    type SecurityWireBlessings

                                    type SecurityWireBlessings struct {
                                    	CertificateChains []*CertificateChain `protobuf:"bytes,1,rep,name=certificateChains" json:"certificateChains,omitempty"`
                                    	XXX_unrecognized  []byte              `json:"-"`
                                    }

                                    func (*SecurityWireBlessings) GetCertificateChains

                                    func (m *SecurityWireBlessings) GetCertificateChains() []*CertificateChain

                                    func (*SecurityWireBlessings) ProtoMessage

                                    func (*SecurityWireBlessings) ProtoMessage()

                                    func (*SecurityWireBlessings) Reset

                                    func (m *SecurityWireBlessings) Reset()

                                    func (*SecurityWireBlessings) String

                                    func (m *SecurityWireBlessings) String() string

                                    type Signature

                                    type Signature struct {
                                    	Purpose          []byte  `protobuf:"bytes,1,req,name=purpose" json:"purpose,omitempty"`
                                    	Hash             *string `protobuf:"bytes,2,req,name=hash" json:"hash,omitempty"`
                                    	R                []byte  `protobuf:"bytes,3,req,name=r" json:"r,omitempty"`
                                    	S                []byte  `protobuf:"bytes,4,req,name=s" json:"s,omitempty"`
                                    	XXX_unrecognized []byte  `json:"-"`
                                    }

                                    func (*Signature) GetHash

                                    func (m *Signature) GetHash() string

                                    func (*Signature) GetPurpose

                                    func (m *Signature) GetPurpose() []byte

                                    func (*Signature) GetR

                                    func (m *Signature) GetR() []byte

                                    func (*Signature) GetS

                                    func (m *Signature) GetS() []byte

                                    func (*Signature) ProtoMessage

                                    func (*Signature) ProtoMessage()

                                    func (*Signature) Reset

                                    func (m *Signature) Reset()

                                    func (*Signature) String

                                    func (m *Signature) String() string

                                    type TimeDuration

                                    type TimeDuration struct {
                                    	Seconds          *int64 `protobuf:"varint,1,req,name=seconds" json:"seconds,omitempty"`
                                    	Nanos            *int64 `protobuf:"varint,2,req,name=nanos" json:"nanos,omitempty"`
                                    	XXX_unrecognized []byte `json:"-"`
                                    }

                                    func (*TimeDuration) GetNanos

                                    func (m *TimeDuration) GetNanos() int64

                                    func (*TimeDuration) GetSeconds

                                    func (m *TimeDuration) GetSeconds() int64

                                    func (*TimeDuration) ProtoMessage

                                    func (*TimeDuration) ProtoMessage()

                                    func (*TimeDuration) Reset

                                    func (m *TimeDuration) Reset()

                                    func (*TimeDuration) String

                                    func (m *TimeDuration) String() string

                                    type TimeTime

                                    type TimeTime struct {
                                    	Seconds          *int64 `protobuf:"varint,1,req,name=seconds" json:"seconds,omitempty"`
                                    	Nanos            *int32 `protobuf:"varint,2,req,name=nanos" json:"nanos,omitempty"`
                                    	XXX_unrecognized []byte `json:"-"`
                                    }

                                    func (*TimeTime) GetNanos

                                    func (m *TimeTime) GetNanos() int32

                                    func (*TimeTime) GetSeconds

                                    func (m *TimeTime) GetSeconds() int64

                                    func (*TimeTime) ProtoMessage

                                    func (*TimeTime) ProtoMessage()

                                    func (*TimeTime) Reset

                                    func (m *TimeTime) Reset()

                                    func (*TimeTime) String

                                    func (m *TimeTime) String() string

                                    type TimeWireDeadline

                                    type TimeWireDeadline struct {
                                    	FromNow          *TimeDuration `protobuf:"bytes,1,req,name=fromNow" json:"fromNow,omitempty"`
                                    	NoDeadline       *bool         `protobuf:"varint,2,req,name=noDeadline" json:"noDeadline,omitempty"`
                                    	XXX_unrecognized []byte        `json:"-"`
                                    }

                                    func (*TimeWireDeadline) GetFromNow

                                    func (m *TimeWireDeadline) GetFromNow() *TimeDuration

                                    func (*TimeWireDeadline) GetNoDeadline

                                    func (m *TimeWireDeadline) GetNoDeadline() bool

                                    func (*TimeWireDeadline) ProtoMessage

                                    func (*TimeWireDeadline) ProtoMessage()

                                    func (*TimeWireDeadline) Reset

                                    func (m *TimeWireDeadline) Reset()

                                    func (*TimeWireDeadline) String

                                    func (m *TimeWireDeadline) String() string

                                    type VtraceAnnotation

                                    type VtraceAnnotation struct {
                                    	When             *TimeTime `protobuf:"bytes,1,req,name=when" json:"when,omitempty"`
                                    	Msg              *string   `protobuf:"bytes,2,req,name=msg" json:"msg,omitempty"`
                                    	XXX_unrecognized []byte    `json:"-"`
                                    }

                                    func (*VtraceAnnotation) GetMsg

                                    func (m *VtraceAnnotation) GetMsg() string

                                    func (*VtraceAnnotation) GetWhen

                                    func (m *VtraceAnnotation) GetWhen() *TimeTime

                                    func (*VtraceAnnotation) ProtoMessage

                                    func (*VtraceAnnotation) ProtoMessage()

                                    func (*VtraceAnnotation) Reset

                                    func (m *VtraceAnnotation) Reset()

                                    func (*VtraceAnnotation) String

                                    func (m *VtraceAnnotation) String() string

                                    type VtraceRequest

                                    type VtraceRequest struct {
                                    	SpanId           []byte `protobuf:"bytes,1,req,name=spanId" json:"spanId,omitempty"`
                                    	TraceId          []byte `protobuf:"bytes,2,req,name=traceId" json:"traceId,omitempty"`
                                    	Flags            *int32 `protobuf:"varint,3,req,name=flags" json:"flags,omitempty"`
                                    	LogLevel         *int32 `protobuf:"varint,4,req,name=logLevel" json:"logLevel,omitempty"`
                                    	XXX_unrecognized []byte `json:"-"`
                                    }

                                    func (*VtraceRequest) GetFlags

                                    func (m *VtraceRequest) GetFlags() int32

                                    func (*VtraceRequest) GetLogLevel

                                    func (m *VtraceRequest) GetLogLevel() int32

                                    func (*VtraceRequest) GetSpanId

                                    func (m *VtraceRequest) GetSpanId() []byte

                                    func (*VtraceRequest) GetTraceId

                                    func (m *VtraceRequest) GetTraceId() []byte

                                    func (*VtraceRequest) ProtoMessage

                                    func (*VtraceRequest) ProtoMessage()

                                    func (*VtraceRequest) Reset

                                    func (m *VtraceRequest) Reset()

                                    func (*VtraceRequest) String

                                    func (m *VtraceRequest) String() string

                                    type VtraceResponse

                                    type VtraceResponse struct {
                                    	TraceFlags       *int32             `protobuf:"varint,1,req,name=traceFlags" json:"traceFlags,omitempty"`
                                    	Trace            *VtraceTraceRecord `protobuf:"bytes,2,req,name=trace" json:"trace,omitempty"`
                                    	XXX_unrecognized []byte             `json:"-"`
                                    }

                                    func (*VtraceResponse) GetTrace

                                    func (m *VtraceResponse) GetTrace() *VtraceTraceRecord

                                    func (*VtraceResponse) GetTraceFlags

                                    func (m *VtraceResponse) GetTraceFlags() int32

                                    func (*VtraceResponse) ProtoMessage

                                    func (*VtraceResponse) ProtoMessage()

                                    func (*VtraceResponse) Reset

                                    func (m *VtraceResponse) Reset()

                                    func (*VtraceResponse) String

                                    func (m *VtraceResponse) String() string

                                    type VtraceSpanRecord

                                    type VtraceSpanRecord struct {
                                    	Id               []byte              `protobuf:"bytes,1,req,name=id" json:"id,omitempty"`
                                    	Parent           []byte              `protobuf:"bytes,2,req,name=parent" json:"parent,omitempty"`
                                    	Name             *string             `protobuf:"bytes,3,req,name=name" json:"name,omitempty"`
                                    	Start            *TimeTime           `protobuf:"bytes,4,req,name=start" json:"start,omitempty"`
                                    	End              *TimeTime           `protobuf:"bytes,5,req,name=end" json:"end,omitempty"`
                                    	Annotations      []*VtraceAnnotation `protobuf:"bytes,6,rep,name=annotations" json:"annotations,omitempty"`
                                    	XXX_unrecognized []byte              `json:"-"`
                                    }

                                    func (*VtraceSpanRecord) GetAnnotations

                                    func (m *VtraceSpanRecord) GetAnnotations() []*VtraceAnnotation

                                    func (*VtraceSpanRecord) GetEnd

                                    func (m *VtraceSpanRecord) GetEnd() *TimeTime

                                    func (*VtraceSpanRecord) GetId

                                    func (m *VtraceSpanRecord) GetId() []byte

                                    func (*VtraceSpanRecord) GetName

                                    func (m *VtraceSpanRecord) GetName() string

                                    func (*VtraceSpanRecord) GetParent

                                    func (m *VtraceSpanRecord) GetParent() []byte

                                    func (*VtraceSpanRecord) GetStart

                                    func (m *VtraceSpanRecord) GetStart() *TimeTime

                                    func (*VtraceSpanRecord) ProtoMessage

                                    func (*VtraceSpanRecord) ProtoMessage()

                                    func (*VtraceSpanRecord) Reset

                                    func (m *VtraceSpanRecord) Reset()

                                    func (*VtraceSpanRecord) String

                                    func (m *VtraceSpanRecord) String() string

                                    type VtraceTraceRecord

                                    type VtraceTraceRecord struct {
                                    	Id               []byte              `protobuf:"bytes,1,req,name=id" json:"id,omitempty"`
                                    	SpanRecord       []*VtraceSpanRecord `protobuf:"bytes,2,rep,name=spanRecord" json:"spanRecord,omitempty"`
                                    	XXX_unrecognized []byte              `json:"-"`
                                    }

                                    func (*VtraceTraceRecord) GetId

                                    func (m *VtraceTraceRecord) GetId() []byte

                                    func (*VtraceTraceRecord) GetSpanRecord

                                    func (m *VtraceTraceRecord) GetSpanRecord() []*VtraceSpanRecord

                                    func (*VtraceTraceRecord) ProtoMessage

                                    func (*VtraceTraceRecord) ProtoMessage()

                                    func (*VtraceTraceRecord) Reset

                                    func (m *VtraceTraceRecord) Reset()

                                    func (*VtraceTraceRecord) String

                                    func (m *VtraceTraceRecord) String() string

                                    Directories

                                    Path Synopsis
                                    Command benchmark runs the benchmark client.
                                    Command benchmark runs the benchmark client.
                                    Command benchmarkd runs the benchmark server.
                                    Command benchmarkd runs the benchmark server.