-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.html
More file actions
253 lines (212 loc) · 11.7 KB
/
index.html
File metadata and controls
253 lines (212 loc) · 11.7 KB
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
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
<!DOCTYPE html>
<html lang="en">
<head>
<title>eRPC</title>
<!-- Meta -->
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="">
<meta name="author" content="">
<link rel="shortcut icon" href="favicon.ico">
<link href='https://fonts.googleapis.com/css?family=Lato:300,400,300italic,400italic' rel='stylesheet' type='text/css'>
<link href='https://fonts.googleapis.com/css?family=Montserrat:400,700' rel='stylesheet' type='text/css'>
<!-- FontAwesome JS -->
<script defer src="https://use.fontawesome.com/releases/v5.1.0/js/all.js" integrity="sha384-3LK/3kTpDE/Pkp8gTNp2gR/2gOiwQ6QaO7Td0zV76UFJVhqLl4Vl3KL1We6q6wR9" crossorigin="anonymous"></script>
<!-- Global CSS -->
<link rel="stylesheet" href="assets/plugins/bootstrap/css/bootstrap.min.css">
<!-- Plugins CSS -->
<link rel="stylesheet" href="assets/plugins/prism/prism.css">
<!-- Theme CSS -->
<link id="theme-style" rel="stylesheet" href="assets/css/theme-erpc.css">
<!-- GitHub Button -->
<script async defer src="https://buttons.github.io/buttons.js"></script>
</head>
<body data-spy="scroll">
<!-- ******HEADER****** -->
<header id="header" class="header">
<div class="container">
<h1 class="logo float-left">
<a class="scrollto" href="#promo">
<span class="logo-title">eRPC</span>
</a>
</h1><!--//logo-->
<nav id="main-nav" class="main-nav navbar-expand-md float-right" role="navigation">
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbar-collapse">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button><!--//nav-toggle-->
<div class="navbar-collapse collapse" id="navbar-collapse">
<ul class="nav navbar-nav">
<li class="nav-item sr-only"><a class="nav-link scrollto" href="#promo">Home</a></li>
<li class="nav-item"><a class="nav-link scrollto" href="#about">About</a></li>
<li class="nav-item"><a class="nav-link scrollto" href="#features">Features</a></li>
<li class="nav-item"><a class="nav-link scrollto" href="#docs">Get started</a></li>
<li class="nav-item"><a class="nav-link scrollto" href="#license">License</a></li>
<li class="nav-item last"><a class="nav-link scrollto" href="#contact">Contact</a></li>
</ul><!--//nav-->
</div><!--//navabr-collapse-->
</nav><!--//main-nav-->
</div>
</header><!--//header-->
<!-- ******PROMO****** -->
<section id="promo" class="promo section offset-header">
<div class="container text-center">
<h2 class="title">eRPC</span></h2>
<p class="intro">A fast remote procedure call library for datacenters</p>
<div class="btns">
<a class="btn btn-cta-primary" href="https://github.com/erpc-io/eRPC" target="_blank">Download</a>
<a class="btn btn-cta-secondary" href="https://www.usenix.org/conference/nsdi19/presentation/kalia" target="_blank">Paper</a>
<a class="btn btn-cta-secondary" href="docs/index.html" target="_blank">Documentation</a>
</div>
<ul class="meta list-inline">
</ul><!--//meta-->
</div><!--//container-->
<div class="social-media">
<div class="social-media-inner container text-center">
<ul class="list-inline mb-2">
<!--// Generate github buttons: https://github.com/mdo/github-buttons -->
<li class="list-inline-item github-star">
<a class="github-button" href="https://github.com/erpc-io/eRPC" data-icon="octicon-star" aria-label="Star erpc-io/eRPC on GitHub">Star</a></li>
<li class="list-inline-item github-follow"><!-- Place this tag where you want the button to render. -->
<a class="github-button" href="https://github.com/erpc-io" aria-label="Follow @erpc-io on GitHub">Follow @erpc-io</a></li>
</ul>
</div>
</div>
</section><!--//promo-->
<!-- ******ABOUT****** -->
<section id="about" class="about section">
<div class="container">
<h2 class="title text-center">What is eRPC?</h2>
<p class="intro text-justify">
eRPC is a fast Remote Procedure Call library designed for modern datacenter
networks. It runs over both Ethernet and InfiniBand, and performs comparably
to RDMA.
Currently, eRPC is intended for use in C++ applications running on
bare-metal clusters.
</div><!--//container-->
</section><!--//about-->
<!-- ******FEATURES****** -->
<section id="features" class="features section">
<div class="container text-center">
<h2 class="title">Features</h2>
<ul class="feature-list list-unstyled text-left">
<li><i class="fas fa-check"></i><b>Multiple supported networks</b>: Ethernet and InfiniBand</li>
<li><i class="fas fa-check"></i><b>Low latency</b>: 2.3 microseconds round-trip RPC latency with UDP over Ethernet</li>
<li><i class="fas fa-check"></i><b>High performance</b> for small 32-byte RPCs: ~10M RPCs/sec with one CPU core, 60--80M RPCs/sec with one NIC</li>
<li><i class="fas fa-check"></i><b>High bandwidth</b> for large RPC: 75 Gbps on one connection (one CPU core at server and client) for 8 MB RPCs</li>
<li><i class="fas fa-check"></i><b>High scalability</b>: 20000 RPC sessions per server</li>
<li><i class="fas fa-check"></i><b>End-to-end congestion control</b> that tolerates 100-way incasts</li>
<li><i class="fas fa-check"></i><b>Nested RPCs</b>, and long-running <b>background RPCs</b></li>
<li><i class="fas fa-check"></i><b>A port of Raft as an example</b> with 3-way replication in 5.3 microseconds with UDP over Ethernet.</li>
</ul>
</div><!--//container-->
</section><!--//features-->
<!-- ******DOCS****** -->
<section id="docs" class="docs section">
<div class="container">
<div class="docs-inner">
<h2 class="title text-center">Get started</h2>
<p>
Here's a hello, world example of how to use eRPC. The server
and client run on separate machines, named fawn-pluto0 and
fawn-pluto1, respectively. The client sends an RPC to the
server containing the text "hello", and the server replies
with "world".
You can <a href="https://github.com/erpc-io/eRPC/tree/master/hello_world">
browse</a> the example in the eRPC repository.
</p>
<div class="block">
<h3 class="sub-title text-center">Server</h3>
<div class="code-block">
<!--//Use Prismjs - http://prismjs.com/index.html#basic-usage -->
<pre><code class="language-cpp">
#include <stdio.h>
#include "rpc.h"
erpc::Rpc<erpc::CTransport> *rpc;
void req_handler(erpc::ReqHandle *req_handle, void *) {
printf("%s\n", reinterpret_cast<char *>(req_handle->get_req_msgbuf()->buf));
auto &resp = req_handle->pre_resp_msgbuf;
rpc->resize_msg_buffer(&resp, strlen("world"));
sprintf(reinterpret_cast<char *>(resp.buf), "world");
rpc->enqueue_response(req_handle, &resp);
}
int main() {
std::string server_uri = "fawn-pluto0:31850";
erpc::Nexus nexus(server_uri, 0, 0);
nexus.register_req_func(17 /* request type */, req_handler);
rpc = new erpc::Rpc<erpc::CTransport>(&nexus, nullptr, 0, nullptr);
rpc->run_event_loop(10000 /* 10 seconds */);
}
</code></pre>
</div><!--//code-block-->
</div><!--//block-->
<div class="block">
<h3 class="sub-title text-center">Client</h3>
<div class="code-block">
<!--//Use Prismjs - http://prismjs.com/index.html#basic-usage -->
<pre><code class="language-cpp">
#include <stdio.h>
#include "rpc.h"
erpc::Rpc<erpc::CTransport> *rpc;
erpc::MsgBuffer req;
erpc::MsgBuffer resp;
void cont_func(void *, void *) { printf("%s\n", resp.buf); }
void sm_handler(int, erpc::SmEventType, erpc::SmErrType, void *) {}
int main() {
erpc::Nexus nexus("fawn-pluto1:31850", 0, 0);
rpc = new erpc::Rpc<erpc::CTransport>(&nexus, nullptr, 0, sm_handler);
int session_num = rpc->create_session("fawn-pluto0:31850", 0);
while (!rpc->is_connected(session_num)) rpc->run_event_loop_once();
req = rpc->alloc_msg_buffer_or_die(strlen("hello"));
sprintf(reinterpret_cast<char *>(req.buf), "%s", "hello");
resp = rpc->alloc_msg_buffer_or_die(strlen("world"));
rpc->enqueue_request(session_num, 17, &req, &resp, cont_func, nullptr);
rpc->run_event_loop(1000 /* 1 second */);
delete rpc;
}
</code></pre>
</div><!--//code-block-->
</div><!--//block-->
</div><!--//docs-inner-->
</div><!--//container-->
</section><!--//features-->
<!-- ******LICENSE****** -->
<section id="license" class="license section">
<div class="container">
<div class="license-inner">
<h2 class="title text-center">License</h2>
<div class="info">
<p>eRPC is available under the Apache License, Version 2.0.</p>
</div><!--//info-->
</div><!--//license-inner-->
</div><!--//container-->
</section><!--//how-->
<!-- ******CONTACT****** -->
<section id="contact" class="contact section has-pattern">
<div class="container">
<div class="contact-inner">
<h2 class="title text-center">Contact</h2>
<p class="intro text-center">Email Anuj Kalia (akalia@cs.cmu.edu) if you have any questions or suggestions, or open an Issue or PR on GitHub.</p>
<div class="clearfix"></div>
</div><!--//contact-inner-->
</div><!--//container-->
</section><!--//contact-->
<!-- ******FOOTER****** -->
<footer class="footer">
<div class="container text-center">
<!--/* This template is released under the Creative Commons Attribution 3.0 License. Please keep the attribution link below when using for your own project. Thank you for your support. :) If you'd like to use the template without the attribution, you can buy the commercial license via our website: themes.3rdwavemedia.com */-->
<small class="copyright">Designed with <i class="fas fa-heart"></i> by <a href="https://themes.3rdwavemedia.com" target="_blank">Xiaoying Riley</a> for developers</small>
</div><!--//container-->
</footer><!--//footer-->
<!-- Javascript -->
<script type="text/javascript" src="assets/plugins/jquery-3.3.1.min.js"></script>
<script type="text/javascript" src="assets/plugins/jquery.easing.1.3.js"></script>
<script type="text/javascript" src="assets/plugins/bootstrap/js/bootstrap.min.js"></script>
<script type="text/javascript" src="assets/plugins/jquery-scrollTo/jquery.scrollTo.min.js"></script>
<script type="text/javascript" src="assets/plugins/prism/prism.js"></script>
<script type="text/javascript" src="assets/js/main.js"></script>
</body>
</html>