benchmark

package
v0.1.11 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 14, 2020 License: BSD-3-Clause Imports: 8 Imported by: 0

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

Documentation

Overview

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

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.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL