-
Notifications
You must be signed in to change notification settings - Fork 5
/
performance.html
212 lines (187 loc) · 10.7 KB
/
performance.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,
initial-scale=1,
minimum-scale=1,
maximum-scale=1,
user-scalable=no,
minimal-ui">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black">
<title>Vanadium Performance - Vanadium</title>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,300italic,400,400italic,500,500italic,700,700italic|Source+Code+Pro">
<link rel="stylesheet" href="/css/github.css">
<link rel="stylesheet" href="/css/material.min.css">
<link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons">
<script src="/js/react-0.14.3.min.js"></script>
<script src="/js/react-dom-0.14.3.min.js"></script>
<link rel="apple-touch-icon" sizes="57x57" href="/favicons/apple-touch-icon-57x57.png">
<link rel="apple-touch-icon" sizes="114x114" href="/favicons/apple-touch-icon-114x114.png">
<link rel="apple-touch-icon" sizes="72x72" href="/favicons/apple-touch-icon-72x72.png">
<link rel="apple-touch-icon" sizes="144x144" href="/favicons/apple-touch-icon-144x144.png">
<link rel="apple-touch-icon" sizes="60x60" href="/favicons/apple-touch-icon-60x60.png">
<link rel="apple-touch-icon" sizes="120x120" href="/favicons/apple-touch-icon-120x120.png">
<link rel="apple-touch-icon" sizes="76x76" href="/favicons/apple-touch-icon-76x76.png">
<link rel="apple-touch-icon" sizes="152x152" href="/favicons/apple-touch-icon-152x152.png">
<link rel="apple-touch-icon" sizes="180x180" href="/favicons/apple-touch-icon-180x180.png">
<link rel="icon" type="image/png" sizes="16x16" href="/favicons/favicon-16x16.png">
<link rel="icon" type="image/png" sizes="32x32" href="/favicons/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="96x96" href="/favicons/favicon-96x96.png">
<link rel="icon" type="image/png" sizes="160x160" href="/favicons/favicon-160x160.png">
<link rel="icon" type="image/png" sizes="192x192" href="/favicons/favicon-192x192.png">
<meta name="msapplication-TileColor" content="#00acc1">
<meta name="msapplication-TileImage" content="/favicons/mstile-144x144.png">
<link rel="stylesheet" href="/css/bundle.cyan.css">
<script src="/js/bundle.js"></script>
<script>
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-59720824-6', 'auto');
ga('send', 'pageview');
</script>
</head>
<body>
<header class="mdl-shadow--2dp">
<div class="row">
<div class="icon menu"><i class="material-icons">menu</i></div>
<div class="icon v-icon"><a href="/"><img src="/images/v-icon-white.svg"></a></div>
<div class="logo"><a href="/core.html">Vanadium Core</a></div>
<div class="spacer"></div>
<nav>
<a href="/core.html">Overview</a>
<a href="/installation/">Installation</a>
<a href="/tutorials/hello-world.html">Tutorials</a>
</nav>
</div>
</header>
<div data-subsite="core" class="sidebar"></div>
<div class="sidebar-data">
<a href="/core.html">Overview</a>
<a href="/installation/">Installation</a>
<a href="#" class="nav">Tutorials</a>
<nav>
<a href="/tutorials/hello-world.html">Hello World</a>
<a href="/tutorials/basics.html">Client/Server Basics</a>
<a href="#" class="nav">Security</a>
<nav>
<a href="/tutorials/security/">Overview</a>
<a href="/tutorials/security/principals-and-blessings.html">Principals and Blessings</a>
<a href="/tutorials/security/permissions-authorizer.html">Permissions Authorizer</a>
<a href="/tutorials/security/first-party-caveats.html">Caveats</a>
<a href="/tutorials/security/third-party-caveats.html">Third-party Caveats</a>
<a href="/tutorials/security/agent.html">The Agent</a>
<a href="/tutorials/security/custom-authorizer.html">Custom Authorizer</a>
</nav>
<a href="#" class="nav">Naming</a>
<nav>
<a href="/tutorials/naming/">Overview</a>
<a href="/tutorials/naming/mount-table.html">The Mount Table</a>
<a href="/tutorials/naming/namespace.html">Namespaces</a>
<a href="/tutorials/naming/suffix-part1.html">The Suffix - Part I</a>
<a href="/tutorials/naming/suffix-part2.html">The Suffix - Part II</a>
<a href="/tutorials/naming/globber.html">Globber</a>
</nav>
<a href="#" class="nav">Syncbase</a>
<nav>
<a href="/tutorials/syncbase/">Overview</a>
<a href="/tutorials/syncbase/localPersist.html">Local Persistence</a>
<a href="/tutorials/syncbase/sync.html">Syncing</a>
</nav>
<a href="#" class="nav">Java</a>
<nav>
<a href="/tutorials/java/">Overview</a>
<a href="/tutorials/java/fortune.html">Fortune in Java</a>
<a href="/tutorials/java/android.html">Location Service in Android</a>
</nav>
<a href="/tutorials/faq.html">Tutorial FAQ</a>
</nav>
<a href="#" class="nav">Concepts</a>
<nav>
<a href="/concepts/rpc.html">RPC System</a>
<a href="/concepts/naming.html">Naming</a>
<a href="/concepts/security.html">Security</a>
<a href="/concepts/device-management.html">Device Management</a>
</nav>
<a href="/example-apps.html">Example Apps</a>
<a href="/api-reference.html">API Reference</a>
<a href="#" class="nav">Community</a>
<nav>
<a href="/community/coding-guidelines.html">Coding Guidelines</a>
<a href="/community/contributing.html">Contributing</a>
<a href="/community/mailing-lists.html">Mailing List</a>
<a href="/community/roadmap.html">Roadmap</a>
</nav>
<a href="#" class="nav">Tools</a>
<nav>
<a href="/tools/identity-service-faq.html">Vanadium Identity Service</a>
<a href="/tools/jiri.html">Jiri</a>
<a href="/tools/namespace-browser.html">Namespace Browser</a>
<a href="/tools/services.html">Vanadium Cloud Services</a>
</nav>
<a href="#" class="nav">Design Docs</a>
<nav>
<a href="/designdocs/authentication.html">Authentication Protocol</a>
<a href="/designdocs/identity-service.html">Identity Service</a>
<a href="/designdocs/vdl-spec.html">VDL Specification</a>
<a href="/designdocs/vom-spec.html">VOM Specification</a>
</nav>
<a href="/glossary.html">Glossary</a>
<a href="/faq.html">FAQ</a>
<a href="/tos.html">Terms of Service</a>
</div>
<main>
<h1 class="title">
Vanadium Performance
</h1>
<div class="toc"></div>
<p>Performance of the Vanadium APIs is measured with microbenchmarks.
<a href="https://benchmarks.v.io">benchmarks.v.io</a> records these results at various snapshots of the codebase
and on multiple platforms. Since the total number of benchmarks served by
<a href="https://benchmarks.v.io">benchmarks.v.io</a> is somewhat overwhelming, this page lists out a small subset
that can be considered representative of Vanadium.</p>
<p>The numbers below are for using the Go API. Benchmarks for other languages
(Java in particular) are not integrated into the flow of continuous measurement
yet, but are intended to be.</p>
<p>All the numbers are currently one click away. We hope to restructure this page
to embed live results to avoid that one click in the future.</p>
<h1 id="rpc">RPC</h1>
<p>In all the benchmarks here, network round-trip time is zero. Thus, when RPCs
are executed 'in the wild', network round-trip time must be added.</p>
<h2 id="connection-establishment">Connection Establishment</h2>
<p>Results: <a href="https://benchmarks.v.io/?q=v.io%2Fx%2Fref%2Fruntime%2Finternal%2Frpc%2Fbenchmark.BenchmarkConnectionEstablishment+uploader%3Avlab#">v.io/x/ref/runtime/internal/rpc/benchmark.BenchmarkConnectionEstablishment</a></p>
<p>Establishment of a mutually authenticated, confidential network connection
between two processes. This includes the time it takes to establish a TCP
connection and execute the <a href="/designdocs/authentication.html">Vanadium authentication protocol</a> over it.</p>
<h2 id="echo">Echo</h2>
<p>Results: <a href="https://benchmarks.v.io/?q=v.io%2Fx%2Fref%2Fruntime%2Finternal%2Frpc%2Fbenchmark.Benchmark____1B+uploader%3Avlab#">v.io/x/ref/runtime/internal/rpc/benchmark.Benchmark____1B</a></p>
<p>Sending a 1 byte "echo" request and receiving the response over an established
connection. The Vanadium RPC protocol multiplexes RPCs over a single
established connection.</p>
<h1 id="syncbase">Syncbase</h1>
<h2 id="put">Put</h2>
<p>Results: <a href="https://benchmarks.v.io/?q=v.io%2Fv23%2Fsyncbase%2Fnosql.BenchmarkTinyPut+uploader%3Avlab#">v.io/v23/sycnbase/nosql.BenchmarkTinyPut</a>.</p>
<p>Writing a small piece of structured information to the syncbase daemon via the
<a href="https://godoc.org/v.io/v23/syncbase/nosql#Table">Table</a> API.</p>
<h2 id="get">Get</h2>
<p>Results: <a href="https://benchmarks.v.io/?q=v.io%2Fv23%2Fsyncbase%2Fnosql.BenchmarkTinyGet+uploader%3Avlab#">v.io/v23/sycnbase/nosql.BenchmarkTinyGet</a>.</p>
<p>Reading read a small piece of structured information from the syncbase daemon
via the <a href="https://godoc.org/v.io/v23/syncbase/nosql#Table">Table</a> API.</p>
<h2 id="sync">Sync</h2>
<p>Results: <a href="https://benchmarks.v.io/?q=v.io%2Fv23%2Fsyncbase%2Ffeaturetests.BenchmarkPingPongPair+uploader%3Avlab#">v.io/v23/syncbase/featuretests.BenchmarkPingPongPair</a>.</p>
<p>As of February 2016, this measures 500x the time it takes for peers in a
syncgroup to notice updates made to each other. For example, on desktop/laptop
class machines <a href="https://benchmarks.v.io">benchmarks.v.io</a> reported 1m40s, which means 100/500 seconds =
200ms to sync an update. The 500x multiplier is an artifact of the benchmark
implementation, not the sync protocol.</p>
<p>This also includes any idle time between attempts to contact the peer syncbase
instance for updates. Changes to the sync protocol (changing the polling
interval or using a push-notification mechanism) were being iterated on at the
time of this writing. These numbers are very sensitive to such changes.</p>
</main>
</body>
</html>